Fix refnanny for cpdef functions
authorRobert Bradshaw <robertwb@math.washington.edu>
Fri, 20 Feb 2009 23:04:51 +0000 (15:04 -0800)
committerRobert Bradshaw <robertwb@math.washington.edu>
Fri, 20 Feb 2009 23:04:51 +0000 (15:04 -0800)
Cython/Compiler/Nodes.py

index 4391328437d1d89dfe234cb548d895859959cf7b..7130353549be8114fa090f7fae942c7192224094 100644 (file)
@@ -2427,9 +2427,9 @@ class OverrideCheckNode(StatNode):
         else:
             code.putln("else if (unlikely(Py_TYPE(%s)->tp_dictoffset != 0)) {" % self_arg)
         err = code.error_goto_if_null(self.func_node.result(), self.pos)
-        code.put_gotref(self.func_node.py_result())
         # need to get attribute manually--scope would return cdef method
         code.putln("%s = PyObject_GetAttr(%s, %s); %s" % (self.func_node.result(), self_arg, self.py_func.interned_attr_cname, err))
+        code.put_gotref(self.func_node.py_result())
         # It appears that this type is not anywhere exposed in the Python/C API
         is_builtin_function_or_method = '(strcmp(Py_TYPE(%s)->tp_name, "builtin_function_or_method") == 0)' % self.func_node.result()
         is_overridden = '(PyCFunction_GET_FUNCTION(%s) != (void *)&%s)' % (self.func_node.result(), self.py_func.entry.func_cname)