aboutsummaryrefslogtreecommitdiff
path: root/new-luxc
diff options
context:
space:
mode:
authorEduardo Julian2018-08-09 23:39:17 -0400
committerEduardo Julian2018-08-09 23:39:17 -0400
commit84d7f9ccef221e9797929813af1094b335ba26e9 (patch)
tree428eb540e900d4e2bb29371361894d54389a0d66 /new-luxc
parent2ab2c4dc219e5d3667f4f2626166dfc782052fe3 (diff)
- Fixes for eval.
- Macro-expansion during analysis.
Diffstat (limited to 'new-luxc')
-rw-r--r--new-luxc/source/luxc/lang/macro.lux35
-rw-r--r--new-luxc/source/luxc/lang/translation/jvm.lux2
-rw-r--r--new-luxc/source/luxc/lang/translation/jvm/runtime.jvm.lux4
3 files changed, 3 insertions, 38 deletions
diff --git a/new-luxc/source/luxc/lang/macro.lux b/new-luxc/source/luxc/lang/macro.lux
deleted file mode 100644
index 17ed2436b..000000000
--- a/new-luxc/source/luxc/lang/macro.lux
+++ /dev/null
@@ -1,35 +0,0 @@
-(.module:
- lux
- (lux (control [monad #+ do])
- (data ["e" error])
- [macro]
- [host])
- (luxc (lang [".L" host]
- (translation (jvm [".T" common])))))
-
-(for {"JVM" (as-is (host.import: java/lang/reflect/Method
- (invoke [Object (Array Object)] #try Object))
- (host.import: (java/lang/Class c)
- (getMethod [String (Array (Class Object))] #try Method))
- (host.import: java/lang/Object)
- (def: _object-class (Class Object) (host.class-for Object))
- (def: _apply-args
- (Array (Class Object))
- (|> (host.array (Class Object) +2)
- (host.array-write +0 _object-class)
- (host.array-write +1 _object-class)))
- (def: #export (expand macro inputs)
- (-> Macro (List Code) (Meta (List Code)))
- (do macro.Monad<Meta>
- [class (commonT.load-class hostL.function-class)]
- (function (_ compiler)
- (do e.Monad<Error>
- [apply-method (Class::getMethod ["apply" _apply-args] class)
- output (Method::invoke [(:coerce Object macro)
- (|> (host.array Object +2)
- (host.array-write +0 (:coerce Object inputs))
- (host.array-write +1 (:coerce Object compiler)))]
- apply-method)]
- (:coerce (e.Error [Lux (List Code)])
- output))))))
- })
diff --git a/new-luxc/source/luxc/lang/translation/jvm.lux b/new-luxc/source/luxc/lang/translation/jvm.lux
index 14f8cf0a0..2aa46e050 100644
--- a/new-luxc/source/luxc/lang/translation/jvm.lux
+++ b/new-luxc/source/luxc/lang/translation/jvm.lux
@@ -117,7 +117,7 @@
(def: (store! name bytecode store)
(-> Text ByteCode Store (Error Any))
- (if (dictionary.contains? name (|> store atom.read io.run))
+ (if (|> store atom.read io.run (dictionary.contains? name))
(ex.throw class-already-stored name)
(exec (io.run (atom.update (dictionary.put name bytecode) store))
(#error.Success []))))
diff --git a/new-luxc/source/luxc/lang/translation/jvm/runtime.jvm.lux b/new-luxc/source/luxc/lang/translation/jvm/runtime.jvm.lux
index 4b3259efd..3c687f822 100644
--- a/new-luxc/source/luxc/lang/translation/jvm/runtime.jvm.lux
+++ b/new-luxc/source/luxc/lang/translation/jvm/runtime.jvm.lux
@@ -381,7 +381,7 @@
pm-methods
io-methods))]
(do phase.Monad<Operation>
- [_ (translation.execute! [//.runtime-class bytecode])]
+ [_ (translation.execute! //.runtime-class [//.runtime-class bytecode])]
(wrap bytecode))))
(def: translate-function
@@ -411,7 +411,7 @@
_.RETURN))
applyI))]
(do phase.Monad<Operation>
- [_ (translation.execute! [//.function-class bytecode])]
+ [_ (translation.execute! //.function-class [//.function-class bytecode])]
(wrap bytecode))))
(def: #export translate