minor code cleanups for metaclass patch
authorStefan Behnel <scoder@users.berlios.de>
Thu, 18 Nov 2010 20:40:33 +0000 (21:40 +0100)
committerStefan Behnel <scoder@users.berlios.de>
Thu, 18 Nov 2010 20:40:33 +0000 (21:40 +0100)
Cython/Compiler/ExprNodes.py
Cython/Compiler/Nodes.py

index 2f45f1fa2aa5d12c26a755845e9515a25eff785f..9e4e4118d4b1805f05de14fd12ba5ddfaa898522 100755 (executable)
@@ -4593,14 +4593,14 @@ class Py3ClassNode(ExprNode):
     def analyse_types(self, env):
         self.type = py_object_type
         self.is_temp = 1
-        env.use_utility_code(create_py3class_utility_code);
 
     def may_be_none(self):
         return True
 
-    gil_message = "Constructing Python3+ class"
+    gil_message = "Constructing Python class"
 
     def generate_result_code(self, code):
+        code.globalstate.use_utility_code(create_py3class_utility_code)
         cname = code.intern_identifier(self.name)
         code.putln(
             '%s = __Pyx_Py3ClassCreate(%s, %s, %s, %s, %s); %s' % (
@@ -4643,38 +4643,19 @@ class KeywordArgsNode(ExprNode):
         if self.keyword_args:
             code.putln("%s = %s;" % (self.result(), self.keyword_args.result()))
             code.put_incref(self.keyword_args.result(), self.keyword_args.ctype())
-            code.put_giveref(self.keyword_args.result())
         elif self.starstar_arg:
             code.putln(
                 "%s = PyDict_Copy(%s); %s" % (
                     self.result(),
                     self.starstar_arg.py_result(),
                     code.error_goto_if_null(self.result(), self.pos)))
+            code.put_gotref(self.py_result())
         else:
             code.putln(
                 "%s = PyDict_New(); %s" % (
                     self.result(),
                     code.error_goto_if_null(self.result(), self.pos)))
-        code.put_gotref(self.py_result())
-
-class PyClassBasesNode(ExprNode):
-    # Helper class that holds bases for python3 class
-    # Actually hack to make `bases` visible across other nondes
-    #
-    # bases         ExprNode           Base class tuple
-
-    subexprs = ['bases']
-    type = py_object_type
-    is_temp = True
-
-    def analyse_types(self, env):
-        self.bases.analyse_types(env)
-
-    def generate_result_code(self, code):
-        code.putln("%s = %s;" % (self.result(), self.bases.result()))
-        code.put_incref(self.bases.result(), self.bases.ctype())
-        code.put_giveref(self.bases.result())
-        code.put_gotref(self.py_result())
+            code.put_gotref(self.py_result())
 
 class PyClassMetaclassNode(ExprNode):
     # Helper class holds Python3 metaclass object
index 64aac10f7ec72765db93b4f3a45cd2b0ffe180ed..17a28f7f6cf471e634667573b520c975eb418679 100644 (file)
@@ -2958,7 +2958,7 @@ class PyClassDefNode(ClassDefNode):
             doc_node = None
         if keyword_args or starstar_arg:
             self.py3_style_class = True
-            self.bases = ExprNodes.PyClassBasesNode(pos, bases = bases)
+            self.bases = bases
             self.mkw = ExprNodes.KeywordArgsNode(pos,
                     keyword_args = keyword_args, starstar_arg = starstar_arg)
             self.metaclass = ExprNodes.PyClassMetaclassNode(pos, mkw = self.mkw, bases = self.bases)