diff options
| author | Bruce Hill <bitbucket@bruce-hill.com> | 2018-01-07 18:03:37 -0800 |
|---|---|---|
| committer | Bruce Hill <bitbucket@bruce-hill.com> | 2018-01-07 18:03:37 -0800 |
| commit | c92e5fbc81e57ada43f2c17792e500da5b708bee (patch) | |
| tree | 8f89f2c0ab21de3fe6110c84ee980e0920d18fb4 /nomsu.moon | |
| parent | b1c6354464ab2c9f8f09217815a11317cc068cec (diff) | |
Some overhaul of binary operators so that arbitrary math patterns work
fine.
Diffstat (limited to 'nomsu.moon')
| -rwxr-xr-x | nomsu.moon | 17 |
1 files changed, 12 insertions, 5 deletions
@@ -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 |
