aboutsummaryrefslogtreecommitdiff
path: root/lux-jvm/source/luxc/lang/translation/jvm/case.lux
diff options
context:
space:
mode:
authorEduardo Julian2020-10-09 01:16:47 -0400
committerEduardo Julian2020-10-09 01:16:47 -0400
commitbae39f32cddb816a6123697269c20dbf4a65ac19 (patch)
treed9ee53073ebe0d83e29dbd24e0dda8d5dd95dc47 /lux-jvm/source/luxc/lang/translation/jvm/case.lux
parent79aa92dfd81d569fe6120b8e5c00d41528801153 (diff)
Also using BIPUSH and SIPUSH during JVM generation.
Diffstat (limited to 'lux-jvm/source/luxc/lang/translation/jvm/case.lux')
-rw-r--r--lux-jvm/source/luxc/lang/translation/jvm/case.lux15
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>]