From e8f2b4fdd263e90e40ff4e6b950296045ac8a7ea Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Tue, 5 Sep 2017 23:51:35 -0700 Subject: Macros working better. --- core.moon | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) (limited to 'core.moon') diff --git a/core.moon b/core.moon index 4f832f8..a0d105a 100755 --- a/core.moon +++ b/core.moon @@ -36,6 +36,22 @@ class PermissionNomic extends Nomic g = PermissionNomic() +g\defmacro [[lua %lua_code]], (vars,helpers,ftype)=> + with helpers + lua_code = vars.lua_code.value + escapes = n:"\n", t:"\t", b:"\b", a:"\a", v:"\v", f:"\f", r:"\r" + unescape = (s)-> s\gsub("\\(.)", ((c)-> escapes[c] or c)) + switch lua_code.type + when "List" + -- TODO: handle subexpressions + .lua table.concat[unescape(i.value.value) for i in *lua_code.value] + when "String" + .lua(unescape(lua_code.value)) + when "Longstring" + .lua(lua_code.value) + else error("Unknown type: #{lua_code.type}") + return nil + g\def {"restrict %fn to %whitelist"}, (vars)=> fns = if type(vars.fn) == 'string' then {vars.fn} else vars.fn whitelist = if type(vars.whitelist) == 'string' then {vars.whitelist} else vars.whitelist @@ -308,22 +324,9 @@ if (not %condition) %body g\def [[do %action]], (vars)=> return vars.action(self,vars) -g\defmacro [[lua %lua_code]], (vars,helpers,ftype)=> - with helpers - lua_code = vars.lua_code.value - escapes = n:"\n", t:"\t", b:"\b", a:"\a", v:"\v", f:"\f", r:"\r" - unescape = (s)-> s\gsub("\\(.)", ((c)-> escapes[c] or c)) - switch lua_code.type - when "List" - -- TODO: handle subexpressions - .lua table.concat[unescape(i.value.value) for i in *lua_code.value] - when "String" - .lua(unescape(lua_code.value)) - else error("Unknown type: #{lua_code.type}") - return nil g\defmacro [[macro %spec %body]], (vars,helpers,ftype)=> - self\simplemacro vars.spec.value.value, vars.body.value.value.src + self\simplemacro vars.spec.value.value, vars.body.src return g -- cgit v1.2.3