diff options
Diffstat (limited to 'lux-jvm/source/luxc/lang/translation/jvm/structure.lux')
-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 |