This works: macro t2(): untyped = result = getAst(t1()) #t2() Run
A macro produces an abstract syntax tree (AST) of nodes, that's what is assigned to its `result` variable. A macro call like `t1()` is replaced with the code representation of this AST, not with the AST itself. If you need the AST, and you do in `result = t1()` because `t2` is supposed to return an AST, wrap it with `getAST`. Alternatively, `t1` could become a `proc`. > Even stranger if I comment out t1 and add discard... The compiler just warns about `t2` not being used because the call to it is commented out, not sure what you mean.