aboutsummaryrefslogtreecommitdiff
path: root/nomsu.moon
diff options
context:
space:
mode:
authorBruce Hill <bitbucket@bruce-hill.com>2018-01-07 18:03:37 -0800
committerBruce Hill <bitbucket@bruce-hill.com>2018-01-07 18:03:37 -0800
commitc92e5fbc81e57ada43f2c17792e500da5b708bee (patch)
tree8f89f2c0ab21de3fe6110c84ee980e0920d18fb4 /nomsu.moon
parentb1c6354464ab2c9f8f09217815a11317cc068cec (diff)
Some overhaul of binary operators so that arbitrary math patterns work
fine.
Diffstat (limited to 'nomsu.moon')
-rwxr-xr-xnomsu.moon17
1 files changed, 12 insertions, 5 deletions
diff --git a/nomsu.moon b/nomsu.moon
index 13ff129..fd74879 100755
--- a/nomsu.moon
+++ b/nomsu.moon
@@ -533,6 +533,7 @@ end);]])\format(concat(buffer, "\n"))
else
error("Unsupported value_to_nomsu type: #{type(value)}")
+ @math_patt: re.compile [[ "%" (" " [*/^+-] " %")+ ]]
tree_to_lua: (tree, filename)=>
-- Return <lua code for value>, <additional lua code>
@assert tree, "No tree provided."
@@ -570,13 +571,19 @@ end)]])\format(concat(lua_bits, "\n"))
def = @defs[tree.stub]
if def and def.is_macro
expr, statement = @run_macro(tree)
- if def.whiteset
- if expr
- expr = "(nomsu:assert_permission(#{repr tree.stub}) and #{expr})"
- if statement
- statement = "nomsu:assert_permission(#{repr tree.stub});\n"..statement
remove @compilestack
return expr, statement
+ elseif not def and @@math_patt\match(tree.stub)
+ bits = {}
+ for tok in *tree.value
+ if tok.type == "Word"
+ insert bits, tok.value
+ else
+ expr, statement = @tree_to_lua(tok, filename)
+ @assert(statement == nil, "non-expression value inside math expression")
+ insert bits, expr
+ return "(#{concat bits, " "})"
+
args = {repr(tree.stub), repr(tree.line_no)}
local arg_names, escaped_args
if def