diff options
| author | Bruce Hill <bitbucket@bruce-hill.com> | 2017-09-22 11:44:07 -0700 |
|---|---|---|
| committer | Bruce Hill <bitbucket@bruce-hill.com> | 2017-09-22 11:44:07 -0700 |
| commit | 6882862d0ff226d73bc6a010d335896c44d8cde9 (patch) | |
| tree | fe91165713eacf3f55b3884be27bd305f9ad88a2 /lib/control_flow.nom | |
| parent | d3a5fc73bc9aa37f58b2e159a9959afb53df73e3 (diff) | |
Cleaned up code generation to have less cruft.
Diffstat (limited to 'lib/control_flow.nom')
| -rw-r--r-- | lib/control_flow.nom | 17 |
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 |
