aboutsummaryrefslogtreecommitdiff
path: root/core.moon
diff options
context:
space:
mode:
authorBruce Hill <bitbucket@bruce-hill.com>2017-09-05 23:51:35 -0700
committerBruce Hill <bitbucket@bruce-hill.com>2017-09-05 23:51:35 -0700
commite8f2b4fdd263e90e40ff4e6b950296045ac8a7ea (patch)
treeb27136eecf104cb3d0a4229c76adee99e1f567c1 /core.moon
parent7e9bacfb20365a20da0fa9f2fb61a207402ab737 (diff)
Macros working better.
Diffstat (limited to 'core.moon')
-rwxr-xr-xcore.moon31
1 files changed, 17 insertions, 14 deletions
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