From: Stefan Behnel Date: Mon, 14 Jan 2008 11:35:47 +0000 (+0100) Subject: use PyObject_Call() instead of _CallObject() just as Python calls it internally,... X-Git-Tag: 0.9.6.14~29^2~62^2~8 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=f669064af07e9e536e5ce97ef6ca9b450f769927;p=cython.git use PyObject_Call() instead of _CallObject() just as Python calls it internally, speedup of about 5% --- diff --git a/Cython/Compiler/ExprNodes.py b/Cython/Compiler/ExprNodes.py index c64d5577..a4852d6d 100644 --- a/Cython/Compiler/ExprNodes.py +++ b/Cython/Compiler/ExprNodes.py @@ -1478,11 +1478,8 @@ class SimpleCallNode(ExprNode): function.obj = CloneNode(self.self) func_type = self.function_type() if func_type.is_pyobject: - if self.args: - self.arg_tuple = TupleNode(self.pos, args = self.args) - self.arg_tuple.analyse_types(env) - else: - self.arg_tuple = None + self.arg_tuple = TupleNode(self.pos, args = self.args) + self.arg_tuple.analyse_types(env) self.args = None self.type = py_object_type self.is_temp = 1 @@ -1573,12 +1570,9 @@ class SimpleCallNode(ExprNode): def generate_result_code(self, code): func_type = self.function_type() if func_type.is_pyobject: - if self.arg_tuple: - arg_code = self.arg_tuple.py_result() - else: - arg_code = "0" + arg_code = self.arg_tuple.py_result() code.putln( - "%s = PyObject_CallObject(%s, %s); %s" % ( + "%s = PyObject_Call(%s, %s, NULL); %s" % ( self.result_code, self.function.py_result(), arg_code, @@ -1663,7 +1657,7 @@ class GeneralCallNode(ExprNode): else: keyword_code = None if not keyword_code: - call_code = "PyObject_CallObject(%s, %s)" % ( + call_code = "PyObject_Call(%s, %s, NULL)" % ( self.function.py_result(), self.positional_args.py_result()) else: