From f4ca44d9e155da79632415dbbf9c4ca9eb210f56 Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Tue, 31 Oct 2017 18:09:58 -0400 Subject: - Re-named "expr" module to "expression". --- new-luxc/source/luxc/generator/expression.jvm.lux | 78 +++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 new-luxc/source/luxc/generator/expression.jvm.lux (limited to 'new-luxc/source/luxc/generator/expression.jvm.lux') diff --git a/new-luxc/source/luxc/generator/expression.jvm.lux b/new-luxc/source/luxc/generator/expression.jvm.lux new file mode 100644 index 000000000..61120ef86 --- /dev/null +++ b/new-luxc/source/luxc/generator/expression.jvm.lux @@ -0,0 +1,78 @@ +(;module: + lux + (lux (control monad + ["ex" exception #+ exception:] + ["p" parser]) + (data ["e" error] + text/format) + [meta] + (meta ["s" syntax])) + (luxc ["&" base] + (lang ["ls" synthesis]) + ["&;" analyser] + ["&;" synthesizer] + (synthesizer [";S" function]) + (generator ["&;" common] + ["&;" primitive] + ["&;" structure] + ["&;" eval] + ["&;" procedure] + ["&;" function] + ["&;" reference] + [";G" case] + (host ["$" jvm])))) + +(exception: #export Unrecognized-Synthesis) + +(def: #export (generate synthesis) + (-> ls;Synthesis (Meta $;Inst)) + (case synthesis + (^code []) + &primitive;generate-unit + + (^code [(~ singleton)]) + (generate singleton) + + (^template [ ] + [_ ( value)] + ( value)) + ([#;Bool &primitive;generate-bool] + [#;Nat &primitive;generate-nat] + [#;Int &primitive;generate-int] + [#;Deg &primitive;generate-deg] + [#;Frac &primitive;generate-frac] + [#;Text &primitive;generate-text]) + + (^code ((~ [_ (#;Nat tag)]) (~ [_ (#;Bool last?)]) (~ valueS))) + (&structure;generate-variant generate tag last? valueS) + + (^code [(~@ members)]) + (&structure;generate-tuple generate members) + + (^ [_ (#;Form (list [_ (#;Int var)]))]) + (if (functionS;captured? var) + (&reference;generate-captured var) + (&reference;generate-variable var)) + + [_ (#;Symbol definition)] + (&reference;generate-definition definition) + + (^code ("lux let" (~ [_ (#;Nat register)]) (~ inputS) (~ exprS))) + (caseG;generate-let generate register inputS exprS) + + (^code ("lux case" (~ inputS) (~ pathPS))) + (caseG;generate-case generate inputS pathPS) + + (^multi (^code ("lux function" (~ [_ (#;Nat arity)]) [(~@ environment)] (~ bodyS))) + [(s;run environment (p;some s;int)) (#e;Success environment)]) + (&function;generate-function generate environment arity bodyS) + + (^code ("lux call" (~ functionS) (~@ argsS))) + (&function;generate-call generate functionS argsS) + + (^code ((~ [_ (#;Text procedure)]) (~@ argsS))) + (&procedure;generate-procedure generate procedure argsS) + + _ + (&;throw Unrecognized-Synthesis (%code synthesis)) + )) -- cgit v1.2.3