macropy icon indicating copy to clipboard operation
macropy copied to clipboard

with m1, m2: expands differently from nested with m2: with m1:

Open Technologicat opened this issue 6 years ago • 0 comments

These expand differently:

from macropy.core import macros, show_expanded
from unpythonic.syntax import macros, curry

with curry, show_expanded:
    def add3(a, b, c):
        return a + b + c
    assert add3(1)(2)(3) == 6

with show_expanded:
    with curry:
        def add3(a, b, c):
            return a + b + c
        assert add3(1)(2)(3) == 6

I traced this and the issue is triggered by the fact that from the viewpoint of macropy.core.macros.Block.detect_macro, curry doesn't only update the existing nodes in in_tree.body, but replaces the body with something else, when it wraps the original tree in a with dyn.let(...):.

If the macros are invoked in the same with, this new tree is never seen by show_expanded - it gets just the updated nodes of the original in_tree.body.

Using nested with blocks (and keeping in mind the from inside out expansion order), the expansion works as expected - show_expanded sees the with dyn.let(...): inserted by curry.

It seems this can be fixed very simply - PR to follow.

Technologicat avatar Oct 27 '18 20:10 Technologicat