diff options
Diffstat (limited to 'lux-jvm/source/luxc/lang/translation/jvm/case.lux')
-rw-r--r-- | lux-jvm/source/luxc/lang/translation/jvm/case.lux | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/lux-jvm/source/luxc/lang/translation/jvm/case.lux b/lux-jvm/source/luxc/lang/translation/jvm/case.lux index 9a5172966..8e90b4510 100644 --- a/lux-jvm/source/luxc/lang/translation/jvm/case.lux +++ b/lux-jvm/source/luxc/lang/translation/jvm/case.lux @@ -9,6 +9,8 @@ [data [collection ["[0]" list ("[1]@[0]" mix)]]] + [macro + ["^" pattern]] [math [number ["n" nat]]] @@ -128,7 +130,7 @@ (_.label @else) elseG)))) - (^template [<tag> <unwrap> <dup> <pop> <test> <comparison> <if>] + (^.template [<tag> <unwrap> <dup> <pop> <test> <comparison> <if>] [{<tag> cons} (do [@ phase.monad] [forkG (: (Operation Inst) @@ -163,8 +165,8 @@ bodyI (_.GOTO @end)))) - (^template [<pattern> <right?>] - [(^ (<pattern> lefts)) + (^.template [<pattern> <right?>] + [(pattern (<pattern> lefts)) (operation@in (<| _.with_label (function (_ @success)) _.with_label (function (_ @fail)) (|>> peekI @@ -184,15 +186,15 @@ [synthesis.side/right true]) ... Extra optimization - (^template [<path> <projection>] - [(^ (<path> lefts)) + (^.template [<path> <projection>] + [(pattern (<path> lefts)) (operation@in (|>> peekI (<projection> lefts) pushI)) - (^ (synthesis.path/seq - (<path> lefts) - (synthesis.!bind_top register thenP))) + (pattern (synthesis.path/seq + (<path> lefts) + (synthesis.!bind_top register thenP))) (do phase.monad [then! (path' stack_depth @else @end phase archive thenP)] (in (|>> peekI |