diff options
Diffstat (limited to 'new-luxc/source/luxc/lang/translation/jvm/structure.lux')
-rw-r--r-- | new-luxc/source/luxc/lang/translation/jvm/structure.lux | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/new-luxc/source/luxc/lang/translation/jvm/structure.lux b/new-luxc/source/luxc/lang/translation/jvm/structure.lux index 9ce90085c..7cf9f4da0 100644 --- a/new-luxc/source/luxc/lang/translation/jvm/structure.lux +++ b/new-luxc/source/luxc/lang/translation/jvm/structure.lux @@ -20,13 +20,15 @@ [tool [compiler ["." phase] + [meta + [archive (#+ Archive)]] [language [lux [synthesis (#+ Synthesis)]]]]]] [luxc [lang [host - [jvm (#+ Inst Operation Phase) + [jvm (#+ Inst Operation Phase Generator) ["_" inst]]]]] ["." // ["#." runtime]]) @@ -35,8 +37,8 @@ (ex.report ["Expected size" ">= 2"] ["Actual size" (%.nat size)])) -(def: #export (tuple generate members) - (-> Phase (List Synthesis) (Operation Inst)) +(def: #export (tuple generate archive members) + (Generator (List Synthesis)) (do phase.monad [#let [size (list.size members)] _ (phase.assert not-a-tuple size @@ -45,7 +47,7 @@ list.enumerate (monad.map @ (function (_ [idx member]) (do @ - [memberI (generate member)] + [memberI (generate archive member)] (wrap (|>> _.DUP (_.int (.int idx)) memberI @@ -61,10 +63,10 @@ (_.string "") _.NULL)) -(def: #export (variant generate lefts right? member) - (-> Phase Nat Bit Synthesis (Operation Inst)) +(def: #export (variant generate archive [lefts right? member]) + (Generator [Nat Bit Synthesis]) (do phase.monad - [memberI (generate member)] + [memberI (generate archive member)] (wrap (|>> (_.int (.int (if right? (.inc lefts) lefts))) |