Vitja Makarov, 08.02.2011 10:16: > Trying to merge latest changes in argument parsing code I found that > it still uses direct returns > > https://github.com/cython/cython/blob/master/Cython/Compiler/Nodes.py#L2624 > > Like this: > if self.starstar_arg: > self.starstar_arg.entry.xdecref_cleanup = 0 > code.putln('%s = PyDict_New(); if (unlikely(!%s)) return %s;' % ( > self.starstar_arg.entry.cname, > self.starstar_arg.entry.cname, > self.error_value())) > code.put_gotref(self.starstar_arg.entry.cname) > Or this: > if self.starstar_arg: > code.putln("") > code.putln("if (unlikely(!%s)) {" % > self.star_arg.entry.cname) > code.put_decref_clear(self.starstar_arg.entry.cname, > py_object_type) > code.putln('return %s;' % self.error_value()) > code.putln('}') > else: > code.putln("if (unlikely(!%s)) return %s;" % ( > self.star_arg.entry.cname, self.error_value())) > > That's not good because current scope and refnanny context is already > created and should be freed.
These aren't really critical bugs as they only deal with memory problems. Unless you want to rework them now, I think this is something that we should clean up as part of the DefNode/CFuncDefNode refactoring during the workshop. Stefan _______________________________________________ Cython-dev mailing list Cython-dev@codespeak.net http://codespeak.net/mailman/listinfo/cython-dev