From 4e821308af654706b8bda5f3d00dce7a933d9942 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Wed, 25 Apr 2018 17:43:48 -0700 Subject: Overhauling parsing of Blocks (can no longer contain only one statement) --- core/control_flow.nom | 8 ++++++-- core/math.nom | 2 +- core/metaprogramming.nom | 3 --- 3 files changed, 7 insertions(+), 6 deletions(-) (limited to 'core') diff --git a/core/control_flow.nom b/core/control_flow.nom index b51ecdf..d3d18ac 100644 --- a/core/control_flow.nom +++ b/core/control_flow.nom @@ -261,7 +261,9 @@ immediately %fallthroughs <- [] %is_first <- (yes) %seen_else <- (no) - for %func_call in %body.value + %branches <- + %body.value if (%body.type = "Block") else [%body] + for %func_call in %branches assume (%func_call.type is "Action") or barf ".." Invalid format for 'when' statement. Only '*' blocks are allowed. %tokens <- %func_call.value @@ -308,7 +310,9 @@ immediately %fallthroughs <- [] %is_first <- (yes) %seen_else <- (no) - for %func_call in %body.value + %branches <- + %body.value if (%body.type = "Block") else [%body] + for %func_call in %branches assume (%func_call.type is "Action") or barf ".." Invalid format for 'when' statement. Only '*' blocks are allowed. %tokens <- %func_call.value diff --git a/core/math.nom b/core/math.nom index 75e41b4..ad419fa 100644 --- a/core/math.nom +++ b/core/math.nom @@ -90,6 +90,6 @@ parse [seed random] as: seed random with (=lua "os.time()") compile [random number, random, rand] to: Lua value "math.random()" compile [random int %n, random integer %n, randint %n] to: Lua value "math.random(\(%n as lua expr))" compile [random from %low to %high, random number from %low to %high, rand %low %high] to - "math.random(\(%low as lua expr), \(%high as lua expr))" + Lua value "math.random(\(%low as lua expr), \(%high as lua expr))" action [random choice from %elements, random choice %elements, random %elements] =lua "\%elements[math.random(#\%elements)]" diff --git a/core/metaprogramming.nom b/core/metaprogramming.nom index 9722afd..f6f202f 100644 --- a/core/metaprogramming.nom +++ b/core/metaprogramming.nom @@ -22,9 +22,6 @@ immediately for i,tok in ipairs(\%actions.value[1].value) do if tok.type == "Var" then args[#args+1] = nomsu:var_to_lua_identifier(tok.value); end end - if \%lua.type == "Text" then - error("Invalid type for 'compile % to %', expected a dict with expr/statements, but got text.", 0); - end for i, arg in ipairs(args) do lua:append(", "); lua:append(arg); -- cgit v1.2.3