aboutsummaryrefslogtreecommitdiff
path: root/new-luxc/source
diff options
context:
space:
mode:
authorEduardo Julian2019-04-26 18:01:12 -0400
committerEduardo Julian2019-04-26 18:01:12 -0400
commite0b3538721a71f6e8c016b12c8c257b8cebd3981 (patch)
tree1263740cda4bff9311e58d5bb217e7565060d724 /new-luxc/source
parentf2c0473640e8029f27797f6ecf21662dddb0685b (diff)
WIP: Turning compiler tests into a re-usable specification.
Diffstat (limited to 'new-luxc/source')
-rw-r--r--new-luxc/source/luxc/lang/translation/jvm/function.lux2
-rw-r--r--new-luxc/source/program.lux13
-rw-r--r--new-luxc/source/test/program.lux56
3 files changed, 65 insertions, 6 deletions
diff --git a/new-luxc/source/luxc/lang/translation/jvm/function.lux b/new-luxc/source/luxc/lang/translation/jvm/function.lux
index db8716697..0fea18acd 100644
--- a/new-luxc/source/luxc/lang/translation/jvm/function.lux
+++ b/new-luxc/source/luxc/lang/translation/jvm/function.lux
@@ -300,7 +300,7 @@
(generation.with-anchor [@begin 1]
(translate bodyS)))
[functionD instanceI] (with-function @begin function-class env arity bodyI)
- _ (generation.save! ["" function-class]
+ _ (generation.save! true ["" function-class]
[function-class
(def.class #$.V1_6 #$.Public $.finalC
function-class (list)
diff --git a/new-luxc/source/program.lux b/new-luxc/source/program.lux
index 0936b51dd..de4445d5f 100644
--- a/new-luxc/source/program.lux
+++ b/new-luxc/source/program.lux
@@ -57,7 +57,7 @@
(@.array-write 0 _object-class)
(@.array-write 1 _object-class)))
-(def: (expander macro inputs lux)
+(def: #export (expander macro inputs lux)
Expander
(do error.monad
[apply-method (|> macro
@@ -72,7 +72,7 @@
(@.array-write 1 (:coerce java/lang/Object lux)))
apply-method))))
-(def: jvm
+(def: #export jvm
(IO (Platform IO _.Anchor _.Inst _.Definition))
(do io.monad
[host jvm.host]
@@ -82,7 +82,7 @@
#platform.phase expression.translate
#platform.runtime runtime.translate})))
-(def: (program programI)
+(def: #export (program programI)
(-> _.Inst _.Definition)
(let [nilI runtime.noneI
num-inputsI (|>> ($i.ALOAD 0) $i.ARRAYLENGTH)
@@ -147,10 +147,13 @@
$i.POP
$i.RETURN))))]))
+(def: #export bundle
+ (dictionary.merge common.bundle
+ host.bundle))
+
(program: [{service /cli.service}]
(/.compiler ..expander
..jvm
- (dictionary.merge common.bundle
- host.bundle)
+ ..bundle
..program
service))
diff --git a/new-luxc/source/test/program.lux b/new-luxc/source/test/program.lux
new file mode 100644
index 000000000..40eb214c2
--- /dev/null
+++ b/new-luxc/source/test/program.lux
@@ -0,0 +1,56 @@
+(.module:
+ [lux #*
+ ["_" test (#+ Test)]
+ [abstract
+ [monad (#+ do)]]
+ [control
+ ["." io]
+ [parser
+ [cli (#+ program:)]]]
+ [math
+ ["r" random]]]
+ [spec
+ ["." compositor (#+ Runner)
+ [generation
+ ["." primitive]
+ ["." structure]]]]
+ {1
+ ["." /]}
+ ## [test
+ ## [luxc
+ ## [lang
+ ## [translation
+ ## ## ["_.T" function]
+ ## ## ["_.T" reference]
+ ## ## ["_.T" case]
+ ## ## ["_.T" common]
+ ## ## ["_.T" jvm]
+ ## ## ["_.T" js]
+ ## ## ["_.T" lua]
+ ## ## ["_.T" ruby]
+ ## ## ["_.T" python]
+ ## ## ["_.T" r]
+ ## ## ["_.T" scheme]
+ ## ## ["_.T" common-lisp]
+ ## ## ["_.T" php]
+ ## ]]]]
+ )
+
+(def: (test runner)
+ (-> Runner Test)
+ ($_ _.and
+ (primitive.spec runner)
+ (structure.spec runner)
+ ))
+
+(program: args
+ (<| io.io
+ _.run!
+ (_.times 100)
+ (do r.monad
+ [_ (wrap [])
+ #let [platform (io.run /.jvm)]])
+ (..test (compositor.runner platform
+ /.bundle
+ /.expander
+ /.program))))