(.module: [lux #* [language [compiler [synthesis (#+ Synthesis)] [extension]]]] [luxc [lang [host ["_" jvm (#+ Compiler)]]]] [// ["." common] ["." primitive] ["." structure] ["." reference] ["." case] ## ["." function] ## ["." procedure] ]) (def: #export (translate synthesis) Compiler (case synthesis (^ (synthesis.bit value)) (primitive.bit value) (^ (synthesis.i64 value)) (primitive.i64 value) (^ (synthesis.f64 value)) (primitive.f64 value) (^ (synthesis.text value)) (primitive.text value) (^ (synthesis.variant [lefts right? value])) (structure.variant translate lefts right? value) (^ (synthesis.tuple members)) (structure.tuple translate members) (^ (synthesis.variable variable)) (reference.variable variable) (^ (synthesis.constant constant)) (reference.constant constant) (^ (synthesis.branch/let [input register expr])) (case.let translate input register expr) (^ (synthesis.branch/if [test then else])) (case.if translate test then else) (^ (synthesis.branch/case [input path])) (case.case translate input path) ## (^code ("lux function" (~ [_ (#.Nat arity)]) [(~+ environment)] (~ bodyS))) ## (function.translate-function translate environment arity bodyS) ## (^code ("lux call" (~ functionS) (~+ argsS))) ## (function.translate-call translate functionS argsS) ## (^code ((~ [_ (#.Text extension)]) (~+ args))) ## (extension.apply [extension args]) _ (undefined)))