diff options
author | Eduardo Julian | 2020-10-07 23:03:33 -0400 |
---|---|---|
committer | Eduardo Julian | 2020-10-07 23:03:33 -0400 |
commit | 79aa92dfd81d569fe6120b8e5c00d41528801153 (patch) | |
tree | ee5d301077038e7e10bbd2773b9209d9eba77037 /lux-jvm/source/luxc/lang/translation/jvm/structure.lux | |
parent | 24ba990800665299b551e66d1bc3d89c96ff6c55 (diff) |
Optimized generation of I64, F64 and variants on JVM.
Diffstat (limited to '')
-rw-r--r-- | lux-jvm/source/luxc/lang/translation/jvm/structure.lux | 16 |
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 |