aboutsummaryrefslogtreecommitdiff
path: root/lux-jvm/source/luxc/lang/translation/jvm/structure.lux
diff options
context:
space:
mode:
authorEduardo Julian2020-10-07 23:03:33 -0400
committerEduardo Julian2020-10-07 23:03:33 -0400
commit79aa92dfd81d569fe6120b8e5c00d41528801153 (patch)
treeee5d301077038e7e10bbd2773b9209d9eba77037 /lux-jvm/source/luxc/lang/translation/jvm/structure.lux
parent24ba990800665299b551e66d1bc3d89c96ff6c55 (diff)
Optimized generation of I64, F64 and variants on JVM.
Diffstat (limited to 'lux-jvm/source/luxc/lang/translation/jvm/structure.lux')
-rw-r--r--lux-jvm/source/luxc/lang/translation/jvm/structure.lux16
1 files changed, 12 insertions, 4 deletions
diff --git a/lux-jvm/source/luxc/lang/translation/jvm/structure.lux b/lux-jvm/source/luxc/lang/translation/jvm/structure.lux
index 46f87142a..049c1549a 100644
--- a/lux-jvm/source/luxc/lang/translation/jvm/structure.lux
+++ b/lux-jvm/source/luxc/lang/translation/jvm/structure.lux
@@ -66,10 +66,18 @@
(def: #export (variant generate archive [lefts right? member])
(Generator [Nat Bit Synthesis])
(do phase.monad
- [memberI (generate archive member)]
- (wrap (|>> (_.int (.int (if right?
- (.inc lefts)
- lefts)))
+ [memberI (generate archive member)
+ #let [tagI (case (if right?
+ (.inc lefts)
+ lefts)
+ 0 _.ICONST_0
+ 1 _.ICONST_1
+ 2 _.ICONST_2
+ 3 _.ICONST_3
+ 4 _.ICONST_4
+ 5 _.ICONST_5
+ tag (_.int (.int tag)))]]
+ (wrap (|>> tagI
(flagI right?)
memberI
(_.INVOKESTATIC //.$Runtime