On 2013-02-05 12:05, Timon Gehr wrote:

As far as my understanding goes, quasi-quoting is hygienic, and manual
AST building provides both options.

Yes, that's usually how it works.

We could provide all nested scopes in an array as part of the context.

macro foo(Context context){
     return<[
         context.scopes[0].x++;
         context.scopes[1].x++;
     ]>;
}
int x = 2;
void main(){
     int x=0;
     foo();
     assert(x==1 && .x==3);
}

How would one navigate these scopes. How would one know which one to use? If I recall correctly Nemerle has a way to indicate a symbol should refer to a symbol at the call site which has the closest lexical scope.

We would need a way to introduce a new symbol which does not leak outside the macro and another way to explicitly say the symbol is available outside the macro at call site.

So if I do something like:

int x;

macro foo (Context context)
{
    int y;
    return <[
        x++;
        y++;
    ]>;
}

The above would increment "x" and "y" available in the macro context and not refer to any symbols at the call site?

--
/Jacob Carlborg

Reply via email to