diff options
author | Eduardo Julian | 2020-10-09 01:16:47 -0400 |
---|---|---|
committer | Eduardo Julian | 2020-10-09 01:16:47 -0400 |
commit | bae39f32cddb816a6123697269c20dbf4a65ac19 (patch) | |
tree | d9ee53073ebe0d83e29dbd24e0dda8d5dd95dc47 /lux-jvm/source/luxc/lang/translation/jvm/case.lux | |
parent | 79aa92dfd81d569fe6120b8e5c00d41528801153 (diff) |
Also using BIPUSH and SIPUSH during JVM generation.
Diffstat (limited to '')
-rw-r--r-- | lux-jvm/source/luxc/lang/translation/jvm/case.lux | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/lux-jvm/source/luxc/lang/translation/jvm/case.lux b/lux-jvm/source/luxc/lang/translation/jvm/case.lux index d77e747fd..eea77aaf0 100644 --- a/lux-jvm/source/luxc/lang/translation/jvm/case.lux +++ b/lux-jvm/source/luxc/lang/translation/jvm/case.lux @@ -30,7 +30,8 @@ ["$" jvm (#+ Label Inst Operation Phase Generator) ["_" inst]]]]] ["." // - ["." runtime]]) + ["." runtime] + ["." structure]]) (def: (pop-altI stack-depth) (-> Nat Inst) @@ -151,14 +152,14 @@ bodyI (_.GOTO @end)))) - (^template [<pattern> <flag> <prepare>] - (^ (<pattern> idx)) + (^template [<pattern> <right?>] + (^ (<pattern> lefts)) (operation@wrap (<| _.with-label (function (_ @success)) _.with-label (function (_ @fail)) (|>> peekI (_.CHECKCAST //.$Variant) - (_.int (.int (<prepare> idx))) - <flag> + (structure.tagI lefts <right?>) + (structure.flagI <right?>) (_.INVOKESTATIC //.$Runtime "pm_variant" (type.method [(list //.$Variant runtime.$Tag runtime.$Flag) runtime.$Value (list)])) _.DUP (_.IFNULL @fail) @@ -168,8 +169,8 @@ (_.GOTO @else) (_.label @success) pushI)))) - ([synthesis.side/left _.NULL function.identity] - [synthesis.side/right (_.string "") .inc]) + ([synthesis.side/left false] + [synthesis.side/right true]) ## Extra optimization (^template [<path> <projection>] |