1 -- TODO: support modules as macros?
2 -- does it make sense to store a constant AST as a macro?
6 dollar = rawget(getfenv(), 'dollar') or { }
8 local function dollar_builder(call)
10 | `Call{ `Id{name}, ... } -> return dollar[name](select(2, unpack(call)))
12 local m = dollar[name]
14 | 'function' -> return m()
16 | 'nil' -> error "No such macro registered"
17 | t -> error ("Invalid macro type "..t)
19 | _ -> error "Invalid $macro, '$' should be followed by an identifier or function call"
23 mlp.expr.prefix:add{ '$', prec = 100, builder = |_, x| dollar_builder(x) }
24 mlp.stat:add{ '$', mlp.expr, builder = |x| dollar_builder(x[1]) }