From: Stefan Behnel Date: Wed, 3 Nov 2010 19:35:38 +0000 (+0100) Subject: simplify iter() optimisation based on signature override X-Git-Tag: 0.14.alpha0~239 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=3ba9ab5972f36269b5f3ffe631543b8d671711b1;p=cython.git simplify iter() optimisation based on signature override --- diff --git a/Cython/Compiler/Builtin.py b/Cython/Compiler/Builtin.py index f7b59806..507bfb46 100644 --- a/Cython/Compiler/Builtin.py +++ b/Cython/Compiler/Builtin.py @@ -33,6 +33,8 @@ builtin_function_table = [ ('isinstance', "OO", "b", "PyObject_IsInstance"), ('issubclass', "OO", "b", "PyObject_IsSubclass"), #('iter', "O", "O", "PyObject_GetIter"), # optimised later on + ('iter', "OO", "O", "PyCallIter_New"), + ('iter', "O", "O", "PyObject_GetIter"), ('len', "O", "z", "PyObject_Length"), ('locals', "", "O", "__pyx_locals"), #('map', "", "", ""), diff --git a/Cython/Compiler/Optimize.py b/Cython/Compiler/Optimize.py index bc0d4b3c..04f741f3 100644 --- a/Cython/Compiler/Optimize.py +++ b/Cython/Compiler/Optimize.py @@ -1852,35 +1852,6 @@ class OptimizeBuiltinCalls(Visitor.EnvTransform): self._error_wrong_arg_count('getattr', node, pos_args, '2 or 3') return node - PyObject_GetIter_func_type = PyrexTypes.CFuncType( - PyrexTypes.py_object_type, [ - PyrexTypes.CFuncTypeArg("object", PyrexTypes.py_object_type, None), - ]) - - PyCallIter_New_func_type = PyrexTypes.CFuncType( - PyrexTypes.py_object_type, [ - PyrexTypes.CFuncTypeArg("object", PyrexTypes.py_object_type, None), - PyrexTypes.CFuncTypeArg("sentinel", PyrexTypes.py_object_type, None), - ]) - - def _handle_simple_function_iter(self, node, pos_args): - """Replace 1/2 argument forms of iter() by C-API calls. - """ - if len(pos_args) == 1: - return ExprNodes.PythonCapiCallNode( - node.pos, "PyObject_GetIter", self.PyObject_GetIter_func_type, - args = pos_args, - may_return_none = True, - is_temp = node.is_temp) - elif len(pos_args) == 2: - return ExprNodes.PythonCapiCallNode( - node.pos, "PyCallIter_New", self.PyCallIter_New_func_type, - args = pos_args, - is_temp = node.is_temp) - else: - self._error_wrong_arg_count('iter', node, pos_args, '1 or 2') - return node - Pyx_strlen_func_type = PyrexTypes.CFuncType( PyrexTypes.c_size_t_type, [ PyrexTypes.CFuncTypeArg("bytes", PyrexTypes.c_char_ptr_type, None)