From dd5220e13b03c8f85972feac535a34ef64525222 Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Tue, 9 May 2017 17:48:27 -0400 Subject: - Added tests for some kinds of analysis. - WIP: Porting more code. --- new-luxc/source/luxc/synthesizer.lux | 39 +++++++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) (limited to 'new-luxc/source/luxc/synthesizer.lux') diff --git a/new-luxc/source/luxc/synthesizer.lux b/new-luxc/source/luxc/synthesizer.lux index 900c16e05..c0aaec6ad 100644 --- a/new-luxc/source/luxc/synthesizer.lux +++ b/new-luxc/source/luxc/synthesizer.lux @@ -1,12 +1,45 @@ (;module: lux (lux (control monad) - (data text/format) + (data text/format + (coll [list "L/" Functor])) [macro #+ Monad]) (luxc ["&" base] - lang + (lang ["la" analysis #+ Analysis] + ["ls" synthesis #+ Synthesis]) ["&;" analyser])) (def: #export (synthesize analysis) (-> Analysis Synthesis) - (undefined)) + (case analysis + (^template [ ] + [meta ( value)] + ( value)) + ([#la;Unit #ls;Unit] + [#la;Bool #ls;Bool] + [#la;Nat #ls;Nat] + [#la;Int #ls;Int] + [#la;Deg #ls;Deg] + [#la;Real #ls;Real] + [#la;Char #ls;Char] + [#la;Text #ls;Text] + [#la;Relative #ls;Relative] + [#la;Absolute #ls;Absolute]) + + [meta (#la;Tuple values)] + (#ls;Tuple (L/map synthesize values)) + + [meta (#la;Variant tag last? value)] + (#ls;Variant tag last? (synthesize value)) + + [meta (#la;Function scope body)] + (#ls;Function scope (synthesize body)) + + [meta (#la;Call func args)] + (#ls;Call (synthesize func) (L/map synthesize args)) + + [meta (#la;Procedure name args)] + (#ls;Procedure name (L/map synthesize args)) + + [meta (#la;Case pattern)] + (undefined))) -- cgit v1.2.3