def analyse_expressions(self, env):
for arg in self.args:
arg.analyse_target_expression(env, None)
- if arg.type.is_pyobject or (arg.type.is_ptr and arg.type.base_type.is_cpp_class):
+ if arg.type.is_pyobject:
self.gil_check(env)
- error(arg.pos, "Deletion of static C++ object")
+ elif arg.type.is_ptr and arg.type.base_type.is_cpp_class:
+ pass
+ elif arg.type.is_cpp_class:
++ error(arg.pos, "Deletion of non-heap C++ object")
else:
- error(arg.pos, "Deletion of non-Python object")
+ error(arg.pos, "Deletion of non-Python, non-C++ object")
#arg.release_target_temp(env)
- gil_message = "Deleting Python object or C++ dynamic object"
+ gil_message = "Deleting Python object"
def generate_execution_code(self, code):
for arg in self.args:
if arg.type.is_pyobject:
arg.generate_deletion_code(code)
elif arg.type.is_ptr and arg.type.base_type.is_cpp_class:
- code.putln("delete %s;" % arg.name)
+ arg.generate_result_code()
- code.putln("delete %s" % arg.result())
++ code.putln("delete %s;" % arg.result())
# else error reported earlier
def annotate(self, code):