我正在尝试创建一对甜蜜的 js 宏,其中内部和外部宏共享一个局部变量:
syntax cdo = function(ctx) {
let call = ctx.next().value;
let dummy = #`dummy`.get(0);
let context_id = #`${dummy.fromIdentifier("$context$")}`;
return #`let ${context_id} = ${call}`;
}
syntax context = function(ctx) {
let func = ctx.next().value; // function keyword
let func_name = ctx.next().value;
let args = ctx.next().value; // all args
let body = ctx.next().value; // function body
let dummy = #`dummy`.get(0);
let context_id = #`${dummy.fromIdentifier("$context$")}`;
let body_result = #`let ${context_id} = 1234`;
for (let stx of body.inner()) {
body_result = body_result.concat(#`${stx}`);
}
return #`${func} ${func_name}${args}{${body_result}}`;
}
context function foo(a, b) {
cdo bar();
}
我想要的是“上下文”宏调用能够分配一个可访问/可分配给内部 cdo 宏调用的局部变量。
这是使用甜蜜的 js 1.0,我已经研究过使用 name() 来访问调用上下文,但是我似乎无法让它工作。这样做的正确方法是什么?