diff options
| author | Bruce Hill <bitbucket@bruce-hill.com> | 2017-09-05 23:51:35 -0700 |
|---|---|---|
| committer | Bruce Hill <bitbucket@bruce-hill.com> | 2017-09-05 23:51:35 -0700 |
| commit | e8f2b4fdd263e90e40ff4e6b950296045ac8a7ea (patch) | |
| tree | b27136eecf104cb3d0a4229c76adee99e1f567c1 /core.moon | |
| parent | 7e9bacfb20365a20da0fa9f2fb61a207402ab737 (diff) | |
Macros working better.
Diffstat (limited to 'core.moon')
| -rwxr-xr-x | core.moon | 31 |
1 files changed, 17 insertions, 14 deletions
@@ -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 |
