Creating default constructor if no constructor was declared
authorDanilo Freitas <dsurviver@gmail.com>
Mon, 17 Aug 2009 03:42:35 +0000 (00:42 -0300)
committerDanilo Freitas <dsurviver@gmail.com>
Mon, 17 Aug 2009 03:42:35 +0000 (00:42 -0300)
Cython/Compiler/ExprNodes.py

index d3e1278641c051f96158012078d1a8a31b7159db..79858e84e1db0586df1f9c1f51ace233f7f4c05f 100755 (executable)
@@ -1094,11 +1094,12 @@ class NewExprNode(AtomicExprNode):
             type = entry.type.specialize_here(self.pos, template_types)
         else:
             type = entry.type
         constructor = type.scope.lookup(u'__init__')
         if constructor is None:
-            print "no constructor declared"
-            # TODO(danilo): create one
+            return_type = PyrexTypes.CFuncType(type, [])
+            return_type = PyrexTypes.CPtrType(return_type)
+            type.scope.declare_cfunction(u'__init__', return_type, self.pos)
+            constructor = type.scope.lookup(u'__init__')
         self.class_type = type
         self.entry = constructor
         self.type = constructor.type
@@ -3812,12 +3813,12 @@ class UnopNode(ExprNode):
         function = entry.type.scope.lookup(self.operators[self.operator])
         if not function:
             error(self.pos, "'%s' operator not defined for %s"
-                % (self.operator, type1, type2, self.operator))
+                % (self.operator, type))
             self.type_error()
             return
         self.type = function.type.return_type
 
-    operator = {
+    operators = {
         "++":       u"__inc__",
         "--":       u"__dec__",
         "*":        u"__deref__",