On 25 January 2012 11:24, Vitja Makarov <[email protected]> wrote: > 2012/1/25 mark florisson <[email protected]>: >> On 25 January 2012 06:49, Vitja Makarov <[email protected]> wrote: >>> 2012/1/25 mark florisson <[email protected]>: >>>> 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 >>> [email protected] >>> 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? > -- > vitja. > _______________________________________________ > cython-devel mailing list > [email protected] > http://mail.python.org/mailman/listinfo/cython-devel _______________________________________________ cython-devel mailing list [email protected] http://mail.python.org/mailman/listinfo/cython-devel
