# ----- Automatic lead-ins for certain special functions
if is_getbuffer_slot:
self.getbuffer_init(code)
- code.put_setup_refcount_context(self.entry.name)
+ if not lenv.nogil:
+ code.put_setup_refcount_context(self.entry.name)
# ----- Fetch arguments
self.generate_argument_parsing_code(env, code)
# If an argument is assigned to in the body, we must
# code.putln("/* TODO: decref scope object */")
# ----- Return
# This code is duplicated in ModuleNode.generate_module_init_func
- default_retval = self.return_type.default_value
- err_val = self.error_value()
- if err_val is None and default_retval:
- err_val = default_retval
- if self.return_type.is_pyobject:
- code.put_xgiveref(self.return_type.as_pyobject(Naming.retval_cname))
+ if not lenv.nogil:
+ default_retval = self.return_type.default_value
+ err_val = self.error_value()
+ if err_val is None and default_retval:
+ err_val = default_retval
+ if self.return_type.is_pyobject:
+ code.put_xgiveref(self.return_type.as_pyobject(Naming.retval_cname))
- code.put_finish_refcount_context(self.pos,
- self.entry.qualified_name,
- Naming.retval_cname,
- err_val)
+ code.put_finish_refcount_context(self.pos,
+ self.entry.qualified_name,
+ Naming.retval_cname,
+ err_val)
if not self.return_type.is_void:
code.putln("return %s;" % Naming.retval_cname)
# Temporary hacky script, should be replaced
# with distutils-based solution.
-PYTHONINC=/local/include/python2.5
+#PYTHONINC=/local/include/python2.5
+PYTHONINC=/usr/include/python2.5
python ../../cython.py refnanny.pyx
gcc -shared -pthread -fPIC -fwrapv -O2 -Wall \
from python_ref cimport Py_INCREF, Py_DECREF
+cimport python_exc as exc
+
loglevel = 0
reflog = []
Py_DECREF(obj)
cdef public int __Pyx_Refnanny_FinishContext(void* ctx) except -1:
+ cdef exc.PyObject* type, *value, *tb
+ if exc.PyErr_Occurred():
+ exc.PyErr_Fetch(&type, &value, &tb)
+ Py_DECREF(<object>type); Py_DECREF(<object>value); Py_DECREF(<object>tb)
+ print "cleared!"
+ print (exc.PyErr_Occurred() == NULL)
obj = <object>ctx
try:
obj.end()