On 12 February 2012 14:06, Vitja Makarov <[email protected]> wrote: > 2012/2/4 Vitja Makarov <[email protected]>: >> 2012/1/26 mark florisson <[email protected]>: >>> On 26 January 2012 19:27, Stefan Behnel <[email protected]> wrote: >>>> mark florisson, 26.01.2012 20:15: >>>>> On 26 January 2012 18:53, Stefan Behnel wrote: >>>>>> mark florisson, 26.01.2012 16:20: >>>>>>> I think this problem can trivially be solved by creating a ProxyNode >>>>>>> that should never be replaced by any transform, but it's argument may >>>>>>> be replaced. So you wrap self.rhs in a ProxyNode and use that to >>>>>>> create your CloneNodes. >>>>>> >>>>>> I can't see what a ProxyNode would do that a CloneNode shouldn't do >>>>>> anyway. >>>>> >>>>> It wouldn't be a replacement, merely an addition (an extra indirection). >>>> >>>> What I was trying to say was that a ProxyNode would always be required by a >>>> CloneNode, but I don't see where a ProxyNode would be needed outside of a >>>> CloneNode. So it seems rather redundant and I don't know if we need a >>>> separate node for it. >>> >>> Yes it would be needed only for that, but I think the only real >>> alternative is to not use CloneNode at all, i.e. make the >>> transformation Dag mentioned, where you create new rhs (NameNode?) >>> references to the temporary result. >>> >> >> Now it seems to be the only case when we got problem like this. It >> means that clones may be safely created at very late stage. >> So transforming CascadeAssignment into SingleAssignments doesn't solve >> generic problem. >> >> I tried to implement conditional inlining the same problem may happen >> there (ConditionalCallNode owns arguments and replaces >> SimpleCallNode's args with clones). Splitting analyse_expressions() >> would help. On the other hand moving this optimization after >> OptimizeBuiltinCalls() would help too. >> > > I tried to introduce finalize_expressions() here: > > https://github.com/vitek/cython/tree/_finalize_expressions > > I moved arg_tuple creation logic from SimpleCallNode's analyse_types() > to finalize_expressions() so few tests are broken now. > > Now inlining is done right before AnalyseExpressions before arg_tuple > is created (before pyobject coercion nodes are created). It must be > run after expression analysis. So I'm completely sure that > analyse_types() must be split.
Ah, I didn't realize you were working on that, I fixed the cascaded assignment bug and pushed it to master a while ago. Anyway, if this fixes the problem for cascaded assignment, feel free to do a hard reset to remove those commits (probably want to keep the added tests though). > -- > 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
