code.putln("PyErr_Fetch(&etype, &eval, &etb);")
code.putln("++Py_REFCNT(o);")
code.putln("%s(o);" % entry.func_cname)
- code.putln("if (PyErr_Occurred()) PyErr_WriteUnraisable(o);")
code.putln("--Py_REFCNT(o);")
code.putln("PyErr_Restore(etype, eval, etb);")
code.putln("}")
return self.entry.signature.error_value
def caller_will_check_exceptions(self):
- return 1
+ return self.entry.signature.exception_check
def generate_function_definitions(self, env, code):
if self.defaults_getter:
self.fixed_arg_format = arg_format
self.ret_format = ret_format
self.error_value = self.error_value_map.get(ret_format, None)
+ self.exception_check = self.error_value is not None
self.is_staticmethod = False
def num_fixed_args(self):
else:
ret_type = self.return_type()
exc_value = self.exception_value()
- return PyrexTypes.CFuncType(ret_type, args, exception_value = exc_value)
+ return PyrexTypes.CFuncType(
+ ret_type, args, exception_value=exc_value,
+ exception_check=self.exception_check)
def method_flags(self):
if self.ret_format == "O":