aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/tool/compiler/phase/analysis/expression.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/lux/tool/compiler/phase/analysis/expression.lux')
-rw-r--r--stdlib/source/lux/tool/compiler/phase/analysis/expression.lux130
1 files changed, 0 insertions, 130 deletions
diff --git a/stdlib/source/lux/tool/compiler/phase/analysis/expression.lux b/stdlib/source/lux/tool/compiler/phase/analysis/expression.lux
deleted file mode 100644
index f79d36f4f..000000000
--- a/stdlib/source/lux/tool/compiler/phase/analysis/expression.lux
+++ /dev/null
@@ -1,130 +0,0 @@
-(.module:
- [lux #*
- [control
- [monad (#+ do)]
- ["ex" exception (#+ exception:)]]
- [data
- ["." error]
- [text
- format]]
- ["." macro]]
- ["." // (#+ Analysis Operation Phase)
- ["." type]
- ["." primitive]
- ["." structure]
- ["//." reference]
- ["." case]
- ["." function]
- ["//." macro (#+ Expander)]
- ["/." //
- ["." extension]
- [//
- ["." reference]]]])
-
-(exception: #export (unrecognized-syntax {code Code})
- (ex.report ["Code" (%code code)]))
-
-## TODO: Had to split the 'compile' function due to compilation issues
-## with old-luxc. Must re-combine all the code ASAP
-
-(type: (Fix a)
- (-> a a))
-
-(def: (compile|primitive else code')
- (Fix (-> (Code' (Ann Cursor)) (Operation Analysis)))
- (case code'
- (^template [<tag> <analyser>]
- (<tag> value)
- (<analyser> value))
- ([#.Bit primitive.bit]
- [#.Nat primitive.nat]
- [#.Int primitive.int]
- [#.Rev primitive.rev]
- [#.Frac primitive.frac]
- [#.Text primitive.text])
-
- _
- (else code')))
-
-(def: (compile|structure compile else code')
- (-> Phase (Fix (-> (Code' (Ann Cursor)) (Operation Analysis))))
- (case code'
- (^template [<tag> <analyser>]
- (^ (#.Form (list& [_ (<tag> tag)]
- values)))
- (case values
- (#.Cons value #.Nil)
- (<analyser> compile tag value)
-
- _
- (<analyser> compile tag (` [(~+ values)]))))
- ([#.Nat structure.sum]
- [#.Tag structure.tagged-sum])
-
- (#.Tag tag)
- (structure.tagged-sum compile tag (' []))
-
- (^ (#.Tuple (list)))
- primitive.unit
-
- (^ (#.Tuple (list singleton)))
- (compile singleton)
-
- (^ (#.Tuple elems))
- (structure.product compile elems)
-
- (^ (#.Record pairs))
- (structure.record compile pairs)
-
- _
- (else code')))
-
-(def: (compile|others expander compile code')
- (-> Expander Phase (-> (Code' (Ann Cursor)) (Operation Analysis)))
- (case code'
- (#.Identifier reference)
- (//reference.reference reference)
-
- (^ (#.Form (list [_ (#.Record branches)] input)))
- (case.case compile input branches)
-
- (^ (#.Form (list& [_ (#.Text extension-name)] extension-args)))
- (extension.apply compile [extension-name extension-args])
-
- (^ (#.Form (list [_ (#.Tuple (list [_ (#.Identifier ["" function-name])]
- [_ (#.Identifier ["" arg-name])]))]
- body)))
- (function.function compile function-name arg-name body)
-
- (^ (#.Form (list& functionC argsC+)))
- (do ///.monad
- [[functionT functionA] (type.with-inference
- (compile functionC))]
- (case functionA
- (#//.Reference (#reference.Constant def-name))
- (do @
- [?macro (extension.lift (macro.find-macro def-name))]
- (case ?macro
- (#.Some macro)
- (do @
- [expansion (extension.lift (//macro.expand-one expander def-name macro argsC+))]
- (compile expansion))
-
- _
- (function.apply compile functionT functionA argsC+)))
-
- _
- (function.apply compile functionT functionA argsC+)))
-
- _
- (///.throw unrecognized-syntax [.dummy-cursor code'])))
-
-(def: #export (phase expander)
- (-> Expander Phase)
- (function (compile code)
- (let [[cursor code'] code]
- ## The cursor must be set in the state for the sake
- ## of having useful error messages.
- (//.with-cursor cursor
- (compile|primitive (compile|structure compile (compile|others expander compile))
- code')))))