From: Dag Sverre Seljebotn Date: Wed, 7 Jan 2009 13:42:44 +0000 (+0100) Subject: Refnanny cleanup and bugfix. X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=7c52c8a9b3f481cdcdf70fb4488c6c27fd00aa40;p=cython.git Refnanny cleanup and bugfix. --- diff --git a/Cython/Compiler/Code.py b/Cython/Compiler/Code.py index 8a4b61c1..f4f155b7 100644 --- a/Cython/Compiler/Code.py +++ b/Cython/Compiler/Code.py @@ -744,6 +744,9 @@ class CCodeWriter(object): def put_giveref(self, cname): self.putln("__Pyx_GIVEREF(%s);" % cname) + def put_xgiveref(self, cname): + self.putln("__Pyx_XGIVEREF(%s);" % cname) + def put_incref(self, cname, type): self.putln("__Pyx_INCREF(%s);" % self.as_pyobject(cname, type)) diff --git a/Cython/Compiler/ModuleNode.py b/Cython/Compiler/ModuleNode.py index 14ba4122..353ab7b6 100644 --- a/Cython/Compiler/ModuleNode.py +++ b/Cython/Compiler/ModuleNode.py @@ -2321,7 +2321,6 @@ bad: refcount_utility_code = UtilityCode(proto=""" #ifdef CYTHON_REFNANNY - void __Pyx_Refnanny_INCREF(void*, PyObject*, int); void __Pyx_Refnanny_GOTREF(void*, PyObject*, int); void __Pyx_Refnanny_GIVEREF(void*, PyObject*, int); @@ -2329,7 +2328,6 @@ void __Pyx_Refnanny_INCREF(void*, PyObject*, int); void __Pyx_Refnanny_DECREF(void*, PyObject*, int); void* __Pyx_Refnanny_NewContext(char*, int); int __Pyx_Refnanny_FinishContext(void*); - #define __Pyx_INCREF(r) __Pyx_Refnanny_INCREF(__pyx_refchk, r, __LINE__) #define __Pyx_GOTREF(r) __Pyx_Refnanny_GOTREF(__pyx_refchk, r, __LINE__) #define __Pyx_GIVEREF(r) __Pyx_Refnanny_GIVEREF(__pyx_refchk, r, __LINE__) @@ -2338,9 +2336,7 @@ int __Pyx_Refnanny_FinishContext(void*); #define __Pyx_SetupRefcountContext(name) \ void* __pyx_refchk = __Pyx_Refnanny_NewContext(name, __LINE__) #define __Pyx_FinishRefcountContext() __Pyx_Refnanny_FinishContext(__pyx_refchk) - #else - #define __Pyx_INCREF(r) Py_INCREF(r) #define __Pyx_GOTREF(r) #define __Pyx_GIVEREF(r) @@ -2348,6 +2344,6 @@ int __Pyx_Refnanny_FinishContext(void*); #define __Pyx_XDECREF(r) Py_XDECREF(r) #define __Pyx_SetupRefcountContext(name) #define __Pyx_FinishRefcountContext() 0 - #endif /* CYTHON_REFNANNY */ +#define __Pyx_XGIVEREF(r) (r ? __Pyx_GIVEREF(r) : 0) """) diff --git a/Cython/Compiler/Nodes.py b/Cython/Compiler/Nodes.py index 38ac2cca..7efc6837 100644 --- a/Cython/Compiler/Nodes.py +++ b/Cython/Compiler/Nodes.py @@ -1142,7 +1142,7 @@ class FuncDefNode(StatNode, BlockNode): if err_val is None and default_retval: err_val = default_retval if self.return_type.is_pyobject: - code.put_giveref(Naming.retval_cname) + code.put_xgiveref(Naming.retval_cname) if err_val is None: code.putln('__Pyx_FinishRefcountContext();') else: diff --git a/Cython/Runtime/build.sh b/Cython/Runtime/build.sh index 7f369b91..7fbea420 100755 --- a/Cython/Runtime/build.sh +++ b/Cython/Runtime/build.sh @@ -1,21 +1,9 @@ -cat < ../../Cython/Compiler/DebugFlags.py -debug_disposal_code = 0 -debug_temp_alloc = 0 -debug_coercion = 0 - -debug_refnanny = 0 -EOF +# Temporary hacky script, should be replaced +# with distutils-based solution. +PYTHONINC=/local/include/python2.5 python ../../cython.py refnanny.pyx gcc -shared -pthread -fPIC -fwrapv -O2 -Wall \ - -fno-strict-aliasing -I/local/include/python2.5 \ + -fno-strict-aliasing -I$PYTHONINC \ -o refnanny.so -I. refnanny.c - -cat < ../../Cython/Compiler/DebugFlags.py -debug_disposal_code = 0 -debug_temp_alloc = 0 -debug_coercion = 0 - -debug_refnanny = 1 -EOF