diff options
| author | Bruce Hill <bitbucket@bruce-hill.com> | 2018-05-27 18:28:23 -0700 |
|---|---|---|
| committer | Bruce Hill <bitbucket@bruce-hill.com> | 2018-05-27 18:29:23 -0700 |
| commit | 2e15c0fd5067318601e2f3b70ee6fc16ef58200d (patch) | |
| tree | 0006e0825b2680d457bb531c3d079661b16d6bc8 /core/operators.nom | |
| parent | 6ce32bdd25694d71dc232c50a008f8824f8a75ce (diff) | |
Some tweaks/cleanup on the nomsu code as well as adding variable
mangling to 'parse % as %' to make almost hygienic macros.
Diffstat (limited to 'core/operators.nom')
| -rw-r--r-- | core/operators.nom | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/core/operators.nom b/core/operators.nom index 7f5c772..c3b56c6 100644 --- a/core/operators.nom +++ b/core/operators.nom @@ -47,9 +47,16 @@ immediately # Variable assignment operator immediately compile [%var <- %value] to - lua> "local \%var_lua = \(%var as lua);" + lua> "local \%var_lua = \(%var as lua)" assume %var_lua.is_value or barf "Invalid target for assignment: \%var" - lua> "local \%value_lua = \(%value as lua);" + lua> ".." + \%value = \%value:map(function(t) + if Action:is_instance(t) and t:get_stub() == "?" then + return \%var + end + end) + local \%value_lua = \(%value as lua) + assume %value_lua.is_value or barf "Invalid value for assignment: \%value" lua> ".." local lua = Lua(tree.source, \%var_lua, ' = ', \%value_lua, ';') @@ -67,6 +74,11 @@ immediately local lhs, rhs = Lua(tree.source), Lua(tree.source) for i, item in ipairs(\%assignments.value) do local \%target, \%value = item.value[1], item.value[2] + \%value = \%value:map(function(t) + if Action:is_instance(t) and t:get_stub() == "?" then + return \%target + end + end) local target_lua = \(%target as lua) if not target_lua.is_value then error("Invalid target for assignment: "..\(%target as text)) end local value_lua = \(%value as lua) |
