aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--stdlib/source/lux/compiler/default.lux11
-rw-r--r--stdlib/source/lux/compiler/default/evaluation.lux4
-rw-r--r--stdlib/source/lux/compiler/default/init.lux11
-rw-r--r--stdlib/source/lux/compiler/default/phase.lux3
-rw-r--r--stdlib/source/lux/compiler/default/phase/analysis/expression.lux4
-rw-r--r--stdlib/source/lux/compiler/meta/archive.lux5
-rw-r--r--stdlib/test/test/lux/compiler/default/phase/analysis/function.lux24
-rw-r--r--stdlib/test/test/lux/compiler/default/phase/analysis/primitive.lux6
-rw-r--r--stdlib/test/test/lux/compiler/default/phase/analysis/reference.lux10
-rw-r--r--stdlib/test/test/lux/compiler/default/phase/analysis/structure.lux40
10 files changed, 55 insertions, 63 deletions
diff --git a/stdlib/source/lux/compiler/default.lux b/stdlib/source/lux/compiler/default.lux
index bc58c5d7b..197befb10 100644
--- a/stdlib/source/lux/compiler/default.lux
+++ b/stdlib/source/lux/compiler/default.lux
@@ -1,11 +1,2 @@
(.module:
- [lux #*
- [data
- ["." error (#+ Error)]]])
-
-(type: #export Eval
- (-> Type Code (Error Any)))
-
-(type: #export Version Text)
-
-(def: #export version Version "0.6.0")
+ [lux #*])
diff --git a/stdlib/source/lux/compiler/default/evaluation.lux b/stdlib/source/lux/compiler/default/evaluation.lux
index 26c4b0355..3e00d79c5 100644
--- a/stdlib/source/lux/compiler/default/evaluation.lux
+++ b/stdlib/source/lux/compiler/default/evaluation.lux
@@ -5,8 +5,8 @@
pipe]
[data
["." error]]]
- ["." // (#+ Eval)
- ["." phase
+ [//
+ ["." phase (#+ Eval)
["." analysis
[".A" expression]]
["." synthesis
diff --git a/stdlib/source/lux/compiler/default/init.lux b/stdlib/source/lux/compiler/default/init.lux
index af31e03a4..3bfba340b 100644
--- a/stdlib/source/lux/compiler/default/init.lux
+++ b/stdlib/source/lux/compiler/default/init.lux
@@ -1,8 +1,11 @@
(.module:
lux
- ["." //
- [//
- ["." host]]])
+ [///
+ ["." host]])
+
+(type: #export Version Text)
+
+(def: #export version Version "0.6.0")
(def: #export (cursor file)
(-> Text Cursor)
@@ -33,7 +36,7 @@
(~~ (static host.r)) host.r
(~~ (static host.ruby)) host.ruby
(~~ (static host.scheme)) host.scheme})
- #.version //.version
+ #.version ..version
#.mode #.Build}))
(def: #export (compiler host)
diff --git a/stdlib/source/lux/compiler/default/phase.lux b/stdlib/source/lux/compiler/default/phase.lux
index 24bba1229..ae146be74 100644
--- a/stdlib/source/lux/compiler/default/phase.lux
+++ b/stdlib/source/lux/compiler/default/phase.lux
@@ -67,3 +67,6 @@
[[pre/state' temp] (pre input pre/state)
[post/state' output] (post temp post/state)]
(wrap [[pre/state' post/state'] output]))))
+
+(type: #export Eval
+ (-> Type Code (Error Any)))
diff --git a/stdlib/source/lux/compiler/default/phase/analysis/expression.lux b/stdlib/source/lux/compiler/default/phase/analysis/expression.lux
index 8a0a129bc..6b0d38a53 100644
--- a/stdlib/source/lux/compiler/default/phase/analysis/expression.lux
+++ b/stdlib/source/lux/compiler/default/phase/analysis/expression.lux
@@ -13,9 +13,9 @@
["." primitive]
["." structure]
["." reference]
- ["/." //
+ ["/." // (#+ Eval)
["." extension]
- ["//." // (#+ Eval)
+ [//
## [".L" macro]
]]])
diff --git a/stdlib/source/lux/compiler/meta/archive.lux b/stdlib/source/lux/compiler/meta/archive.lux
index 47572fe04..1e9240f7b 100644
--- a/stdlib/source/lux/compiler/meta/archive.lux
+++ b/stdlib/source/lux/compiler/meta/archive.lux
@@ -16,7 +16,8 @@
[world
[file (#+ File)]]]
[///
- ["." default (#+ Version)]])
+ [default
+ ["." init (#+ Version)]]])
## Key
(type: #export Signature
@@ -44,7 +45,7 @@
(def: #export default
(Key Nothing)
(:abstraction {#name ["" ""]
- #version default.version}))
+ #version init.version}))
(def: #export signature
(-> (Key Any) Signature)
diff --git a/stdlib/test/test/lux/compiler/default/phase/analysis/function.lux b/stdlib/test/test/lux/compiler/default/phase/analysis/function.lux
index ba84d926f..5cf5b232a 100644
--- a/stdlib/test/test/lux/compiler/default/phase/analysis/function.lux
+++ b/stdlib/test/test/lux/compiler/default/phase/analysis/function.lux
@@ -17,7 +17,7 @@
["." macro
["." code]]
[compiler
- ["." default
+ [default
["." reference]
["." init]
["." phase
@@ -32,8 +32,6 @@
["_." primitive]
["_." structure]])
-(def: analyse (expression.analyser (:coerce default.Eval [])))
-
(def: (check-apply expectedT num-args analysis)
(-> Type Nat (Operation Analysis) Bit)
(|> analysis
@@ -57,21 +55,21 @@
($_ seq
(test "Can analyse function."
(and (|> (typeA.with-type (All [a] (-> a outputT))
- (/.function ..analyse func-name arg-name outputC))
+ (/.function _primitive.analyse func-name arg-name outputC))
_structure.check-succeeds)
(|> (typeA.with-type (All [a] (-> a a))
- (/.function ..analyse func-name arg-name g!arg))
+ (/.function _primitive.analyse func-name arg-name g!arg))
_structure.check-succeeds)))
(test "Generic functions can always be specialized."
(and (|> (typeA.with-type (-> inputT outputT)
- (/.function ..analyse func-name arg-name outputC))
+ (/.function _primitive.analyse func-name arg-name outputC))
_structure.check-succeeds)
(|> (typeA.with-type (-> inputT inputT)
- (/.function ..analyse func-name arg-name g!arg))
+ (/.function _primitive.analyse func-name arg-name g!arg))
_structure.check-succeeds)))
(test "The function's name is bound to the function's type."
(|> (typeA.with-type (Rec self (-> inputT self))
- (/.function ..analyse func-name arg-name (code.local-identifier func-name)))
+ (/.function _primitive.analyse func-name arg-name (code.local-identifier func-name)))
_structure.check-succeeds))
))))
@@ -103,18 +101,18 @@
dummy-function (#analysis.Function (list) (#analysis.Reference (reference.local 1)))]]
($_ seq
(test "Can analyse monomorphic type application."
- (|> (/.apply ..analyse funcT dummy-function inputsC)
+ (|> (/.apply _primitive.analyse funcT dummy-function inputsC)
(check-apply outputT full-args)))
(test "Can partially apply functions."
- (|> (/.apply ..analyse funcT dummy-function (list.take partial-args inputsC))
+ (|> (/.apply _primitive.analyse funcT dummy-function (list.take partial-args inputsC))
(check-apply partialT partial-args)))
(test "Can apply polymorphic functions."
- (|> (/.apply ..analyse polyT dummy-function inputsC)
+ (|> (/.apply _primitive.analyse polyT dummy-function inputsC)
(check-apply poly-inputT full-args)))
(test "Polymorphic partial application propagates found type-vars."
- (|> (/.apply ..analyse polyT dummy-function (list.take (inc var-idx) inputsC))
+ (|> (/.apply _primitive.analyse polyT dummy-function (list.take (inc var-idx) inputsC))
(check-apply partial-polyT1 (inc var-idx))))
(test "Polymorphic partial application preserves quantification for type-vars."
- (|> (/.apply ..analyse polyT dummy-function (list.take var-idx inputsC))
+ (|> (/.apply _primitive.analyse polyT dummy-function (list.take var-idx inputsC))
(check-apply partial-polyT2 var-idx)))
))))
diff --git a/stdlib/test/test/lux/compiler/default/phase/analysis/primitive.lux b/stdlib/test/test/lux/compiler/default/phase/analysis/primitive.lux
index 1d807e519..85e5660b0 100644
--- a/stdlib/test/test/lux/compiler/default/phase/analysis/primitive.lux
+++ b/stdlib/test/test/lux/compiler/default/phase/analysis/primitive.lux
@@ -14,9 +14,9 @@
[macro
["." code]]
[compiler
- ["." default
+ [default
["." init]
- ["." phase
+ ["." phase (#+ Eval)
["." analysis (#+ Analysis Operation)
[".A" type]
["." expression]]
@@ -24,7 +24,7 @@
[".E" analysis]]]]]
test])
-(def: #export analyse (expression.analyser (:coerce default.Eval [])))
+(def: #export analyse (expression.analyser (:coerce Eval [])))
(def: unit
(r.Random Code)
diff --git a/stdlib/test/test/lux/compiler/default/phase/analysis/reference.lux b/stdlib/test/test/lux/compiler/default/phase/analysis/reference.lux
index dae6d916b..a78d1b236 100644
--- a/stdlib/test/test/lux/compiler/default/phase/analysis/reference.lux
+++ b/stdlib/test/test/lux/compiler/default/phase/analysis/reference.lux
@@ -13,7 +13,7 @@
[macro
["." code]]
[compiler
- ["." default
+ [default
["." reference]
["." init]
["." phase
@@ -28,8 +28,6 @@
[//
["_." primitive]])
-(def: analyse (expression.analyser (:coerce default.Eval [])))
-
(type: Check (-> (e.Error Any) Bit))
(do-template [<name> <on-success> <on-failure>]
@@ -60,7 +58,7 @@
(module.import def-module)
(wrap []))]
(typeA.with-inference
- (..analyse (code.identifier [def-module var-name]))))))
+ (_primitive.analyse (code.identifier [def-module var-name]))))))
(phase.run [analysisE.bundle (init.compiler [])])
check!))
@@ -78,7 +76,7 @@
(|> (scope.with-scope scope-name
(scope.with-local [var-name expectedT]
(typeA.with-inference
- (..analyse (code.local-identifier var-name)))))
+ (_primitive.analyse (code.local-identifier var-name)))))
(phase.run [analysisE.bundle (init.compiler [])])
(case> (^ (#e.Success [inferredT (#analysis.Reference (reference.local var))]))
(and (type/= expectedT inferredT)
@@ -91,7 +89,7 @@
(|> (do phase.Monad<Operation>
[_ (module.define var-name [expectedT (' {}) []])]
(typeA.with-inference
- (..analyse (code.identifier def-name))))
+ (_primitive.analyse (code.identifier def-name))))
(module.with-module 0 def-module)
(phase.run [analysisE.bundle (init.compiler [])])
(case> (^ (#e.Success [_ inferredT (#analysis.Reference (reference.constant constant-name))]))
diff --git a/stdlib/test/test/lux/compiler/default/phase/analysis/structure.lux b/stdlib/test/test/lux/compiler/default/phase/analysis/structure.lux
index d36bffe20..92f92e54e 100644
--- a/stdlib/test/test/lux/compiler/default/phase/analysis/structure.lux
+++ b/stdlib/test/test/lux/compiler/default/phase/analysis/structure.lux
@@ -19,7 +19,7 @@
[macro
["." code]]
[compiler
- ["." default
+ [default
["." init]
["." phase
["." analysis (#+ Analysis Variant Tag Operation)
@@ -33,8 +33,6 @@
[//
["_." primitive]])
-(def: analyse (expression.analyser (:coerce default.Eval [])))
-
(do-template [<name> <on-success> <on-error>]
[(def: #export <name>
(All [a] (-> (Operation a) Bit))
@@ -126,14 +124,14 @@
($_ seq
(test "Can analyse sum."
(check-sum variantT size choice
- (/.sum ..analyse choice valueC)))
+ (/.sum _primitive.analyse choice valueC)))
(test "Can analyse sum through bound type-vars."
(|> (do phase.Monad<Operation>
[[_ varT] (typeA.with-env check.var)
_ (typeA.with-env
(check.check varT variantT))]
(typeA.with-type varT
- (/.sum ..analyse choice valueC)))
+ (/.sum _primitive.analyse choice valueC)))
(phase.run [analysisE.bundle (init.compiler [])])
(case> (^multi (#e.Success sumA)
[(analysis.variant sumA)
@@ -146,18 +144,18 @@
(|> (do phase.Monad<Operation>
[[_ varT] (typeA.with-env check.var)]
(typeA.with-type varT
- (/.sum ..analyse choice valueC)))
+ (/.sum _primitive.analyse choice valueC)))
check-fails))
(test "Can analyse sum through existential quantification."
(|> (typeA.with-type (type.ex-q 1 +variantT)
- (/.sum ..analyse +choice +valueC))
+ (/.sum _primitive.analyse +choice +valueC))
check-succeeds))
(test "Can analyse sum through universal quantification."
(let [check-outcome (if (not (n/= choice +choice))
check-succeeds
check-fails)]
(|> (typeA.with-type (type.univ-q 1 +variantT)
- (/.sum ..analyse +choice +valueC))
+ (/.sum _primitive.analyse +choice +valueC))
check-outcome)))
))))
@@ -177,7 +175,7 @@
($_ seq
(test "Can analyse product."
(|> (typeA.with-type tupleT
- (/.product ..analyse (list/map product.right primitives)))
+ (/.product _primitive.analyse (list/map product.right primitives)))
(phase.run [analysisE.bundle (init.compiler [])])
(case> (#e.Success tupleA)
(right-size? size tupleA)
@@ -186,7 +184,7 @@
#0)))
(test "Can infer product."
(|> (typeA.with-inference
- (/.product ..analyse (list/map product.right primitives)))
+ (/.product _primitive.analyse (list/map product.right primitives)))
(phase.run [analysisE.bundle (init.compiler [])])
(case> (#e.Success [_type tupleA])
(and (type/= tupleT _type)
@@ -196,7 +194,7 @@
#0)))
(test "Can analyse pseudo-product (singleton tuple)"
(|> (typeA.with-type singletonT
- (..analyse (` [(~ singletonC)])))
+ (_primitive.analyse (` [(~ singletonC)])))
check-succeeds))
(test "Can analyse product through bound type-vars."
(|> (do phase.Monad<Operation>
@@ -204,7 +202,7 @@
_ (typeA.with-env
(check.check varT (type.tuple (list/map product.left primitives))))]
(typeA.with-type varT
- (/.product ..analyse (list/map product.right primitives))))
+ (/.product _primitive.analyse (list/map product.right primitives))))
(phase.run [analysisE.bundle (init.compiler [])])
(case> (#e.Success tupleA)
(right-size? size tupleA)
@@ -213,11 +211,11 @@
#0)))
(test "Can analyse product through existential quantification."
(|> (typeA.with-type (type.ex-q 1 +tupleT)
- (/.product ..analyse (list/map product.right +primitives)))
+ (/.product _primitive.analyse (list/map product.right +primitives)))
check-succeeds))
(test "Cannot analyse product through universal quantification."
(|> (typeA.with-type (type.univ-q 1 +tupleT)
- (/.product ..analyse (list/map product.right +primitives)))
+ (/.product _primitive.analyse (list/map product.right +primitives)))
check-fails))
))))
@@ -246,17 +244,17 @@
other-choice-tag (maybe.assume (list.nth other-choice tags))]]
($_ seq
(test "Can infer tagged sum."
- (|> (/.tagged-sum ..analyse [module-name choice-tag] choiceC)
+ (|> (/.tagged-sum _primitive.analyse [module-name choice-tag] choiceC)
(check-variant module-name tags namedT choice size)))
(test "Tagged sums specialize when type-vars get bound."
- (|> (/.tagged-sum ..analyse [module-name choice-tag] choiceC)
+ (|> (/.tagged-sum _primitive.analyse [module-name choice-tag] choiceC)
(check-variant module-name tags named-polyT choice size)))
(test "Tagged sum inference retains universal quantification when type-vars are not bound."
- (|> (/.tagged-sum ..analyse [module-name other-choice-tag] other-choiceC)
+ (|> (/.tagged-sum _primitive.analyse [module-name other-choice-tag] other-choiceC)
(check-variant module-name tags named-polyT other-choice size)))
(test "Can specialize generic tagged sums."
(|> (typeA.with-type variantT
- (/.tagged-sum ..analyse [module-name other-choice-tag] other-choiceC))
+ (/.tagged-sum _primitive.analyse [module-name other-choice-tag] other-choiceC))
(check-variant module-name tags named-polyT other-choice size)))
))))
@@ -284,16 +282,16 @@
($_ seq
(test "Can infer record."
(|> (typeA.with-inference
- (/.record ..analyse recordC))
+ (/.record _primitive.analyse recordC))
(check-record-inference module-name tags namedT size)))
(test "Records specialize when type-vars get bound."
(|> (typeA.with-inference
- (/.record ..analyse recordC))
+ (/.record _primitive.analyse recordC))
(check-record-inference module-name tags named-polyT size)))
(test "Can specialize generic records."
(|> (do phase.Monad<Operation>
[recordA (typeA.with-type tupleT
- (/.record ..analyse recordC))]
+ (/.record _primitive.analyse recordC))]
(wrap [tupleT recordA]))
(check-record-inference module-name tags named-polyT size)))
))))