2010/11/27 Vitja Makarov <[email protected]>: > 2010/11/27 Stefan Behnel <[email protected]>: >> Hi, >> >> please start a new thread when switching to a new topic. >> >> Vitja Makarov, 27.11.2010 08:24: >>> I'm now trying to make "module scope lambda" work. >>> That's almost done. >>> >>> I see that needs_assignment_synthesis() should be forced to create >>> PyMethodDef struct. >> >> I would be happier if we could get rid of PyMethodDef in the long term, but >> it's clearly easier to keep it for now. >> >> >>> Now I do it this way: >>> def needs_assignment_synthesis(self, ...): >>> ..... >>> if self.name == '<lambda>': >>> ..... >>> >>> Seems like a dirty hack. >> >> Yes. Instead, use a new flag "is_lambda" on the entry. >> > > This check is performed in DefNode so I prefer to call it > force_assignment_synthesis it could be used later for module level > functions. > > Or do you mean that "is_lambda" should be set after > declare_lambda_function() and then checked in DefNode? > >> >>> Also lambda function is defined in module methods table as >>> __pyx_lambda_funcdef4lala_lambda1, >>> Is it safe not to add lambda cname to pyfunc_entries in >>> Scope.declare_lambda_function()? >> >> I don't know, you can try. In any case, it needs to do everything that a >> normal Python function does, except for adding its Python name to the >> defining scope. That's a rather small distinction. >> >> Stefan > > Seems to work fine. No regressions. > > -- > vitja. >
I've attached patch to ticket #308, not sure right place for it. Btw lambda at module scope gives +29 points in pyregr. -- vitja. _______________________________________________ Cython-dev mailing list [email protected] http://codespeak.net/mailman/listinfo/cython-dev
