aboutsummaryrefslogtreecommitdiff
path: root/lib/control_flow.nom
diff options
context:
space:
mode:
authorBruce Hill <bitbucket@bruce-hill.com>2017-09-22 11:44:07 -0700
committerBruce Hill <bitbucket@bruce-hill.com>2017-09-22 11:44:07 -0700
commit6882862d0ff226d73bc6a010d335896c44d8cde9 (patch)
treefe91165713eacf3f55b3884be27bd305f9ad88a2 /lib/control_flow.nom
parentd3a5fc73bc9aa37f58b2e159a9959afb53df73e3 (diff)
Cleaned up code generation to have less cruft.
Diffstat (limited to 'lib/control_flow.nom')
-rw-r--r--lib/control_flow.nom17
1 files changed, 7 insertions, 10 deletions
diff --git a/lib/control_flow.nom b/lib/control_flow.nom
index fdde318..4bdaa06 100644
--- a/lib/control_flow.nom
+++ b/lib/control_flow.nom
@@ -16,7 +16,7 @@ macro statement [if %condition %if_body else %else_body] =:
|end
# Return
-macro block [return] =: "return nil"
+macro statement [return] =: "do return end"
macro block [return %return-value] =: ".."
|return \%return-value as lua\
@@ -117,9 +117,8 @@ macro block [when %body] =:
%result join=: ".."
|
|do
- | local ret
| \(lua expr "vars.thunk.value") as lua\
- | return ret
+ | goto finished_when
|end
..else:
if (lua expr "#vars.condition_bits == 1 and vars.condition_bits[1].type ~= 'Word'"):
@@ -132,11 +131,10 @@ macro block [when %body] =:
%result join=: ".."
|
|if \%condition as lua\ then
- | local ret
| \(lua expr "vars.thunk.value") as lua\
- | return ret
+ | goto finished_when
|end
-
+ %result join=: "\n::finished_when::"
%result
# Switch statement
@@ -160,9 +158,8 @@ macro block [when %branch-value %body] =:
%result join=: ".."
|
|do
- | local ret
| \(lua expr "vars.thunk.value") as lua\
- | return ret
+ | goto finished_when
|end
..else:
if (lua expr "#vars.condition_bits == 1 and vars.condition_bits[1].type ~= 'Word'"):
@@ -175,9 +172,9 @@ macro block [when %branch-value %body] =:
%result join=: ".."
|
|if compiler.utils.equivalent(branch_condition, \%condition as lua\) then
- | local ret
| \(lua expr "vars.thunk.value") as lua\
- | return ret
+ | goto finished_when
|end
+ %result join=: "\n::finished_when::"
%result