On 25 January 2012 11:32, mark florisson <markflorisso...@gmail.com> wrote: > On 25 January 2012 11:24, Vitja Makarov <vitja.maka...@gmail.com> wrote: >> 2012/1/25 mark florisson <markflorisso...@gmail.com>: >>> On 25 January 2012 06:49, Vitja Makarov <vitja.maka...@gmail.com> wrote: >>>> 2012/1/25 mark florisson <markflorisso...@gmail.com>: >>>>> I just noticed the inline defnode call code. When I try to compile >>>>> with 'cython -Xoptimize.inline_defnode_calls=True test.pyx' with the >>>>> following code: >>>>> >>>>> def foo(x): print foo >>>>> foo(10) >>>>> >>>>> I get >>>>> >>>>> Error compiling Cython file: >>>>> ------------------------------------------------------------ >>>>> ... >>>>> def foo(x): >>>>> print x >>>>> >>>>> foo(10) >>>>> ^ >>>>> ------------------------------------------------------------ >>>>> >>>>> test.pyx:4:3: Compiler crash in InlineDefNodeCalls >>>>> >>>>> ModuleNode.body = StatListNode(test.pyx:1:0) >>>>> StatListNode.stats[2] = ExprStatNode(test.pyx:4:3) >>>>> ExprStatNode.expr = SimpleCallNode(test.pyx:4:3, >>>>> result_is_used = True, >>>>> use_managed_ref = True) >>>>> >>>>> Compiler crash traceback from this point on: >>>>> File "/Users/mark/cy/Cython/Compiler/Visitor.py", line 176, in >>>>> _visitchild >>>>> result = handler_method(child) >>>>> File "/Users/mark/cy/Cython/Compiler/Optimize.py", line 1656, in >>>>> visit_SimpleCallNode >>>>> if not function_name.cf_state.is_single: >>>>> AttributeError: 'NoneType' object has no attribute 'is_single' >>>> >>>> >>>> Thanks for the report! The feature is still experimental and by >>>> default is disabled. >>>> Anyway it wouldn't work for your example. It works when we know what >>>> exactly function is referred by the name so it's closure case: >>>> >>>> def foo(): >>>> def bar(): >>>> pass >>>> bar() >>>> >>>> -- >>>> vitja. >>>> _______________________________________________ >>>> cython-devel mailing list >>>> cython-devel@python.org >>>> http://mail.python.org/mailman/listinfo/cython-devel >>> >>> Ah, neat. I thought it was perhaps also defying monkeypatching. >> >> >> I'm thinking about implementing "conditional inlining": depending on >> what function actually is it'll make direct call to C function or >> PyObject_Call(). >> > > Sounds like a good idea. Any idea how much faster that can be?
Hm, probably about an order of magnitude for a noop function (simple test of cdef vs def call). >> -- >> vitja. >> _______________________________________________ >> cython-devel mailing list >> cython-devel@python.org >> http://mail.python.org/mailman/listinfo/cython-devel _______________________________________________ cython-devel mailing list cython-devel@python.org http://mail.python.org/mailman/listinfo/cython-devel