aboutsummaryrefslogtreecommitdiff
path: root/new-luxc/source/luxc/lang/translation/lua/eval.jvm.lux
diff options
context:
space:
mode:
authorEduardo Julian2019-04-11 22:30:05 -0400
committerEduardo Julian2019-04-11 22:30:05 -0400
commitf2937706edb6887c5eb1a6a0b6668b1334f5ef3b (patch)
treee2c3b657aaa39b61ff0746fa0f59416514f87206 /new-luxc/source/luxc/lang/translation/lua/eval.jvm.lux
parent6c3e9f8c02ce153380392ba5bc8eeb517de5f781 (diff)
WIP: Lua compiler.
Diffstat (limited to 'new-luxc/source/luxc/lang/translation/lua/eval.jvm.lux')
-rw-r--r--new-luxc/source/luxc/lang/translation/lua/eval.jvm.lux125
1 files changed, 0 insertions, 125 deletions
diff --git a/new-luxc/source/luxc/lang/translation/lua/eval.jvm.lux b/new-luxc/source/luxc/lang/translation/lua/eval.jvm.lux
deleted file mode 100644
index 17596ffa7..000000000
--- a/new-luxc/source/luxc/lang/translation/lua/eval.jvm.lux
+++ /dev/null
@@ -1,125 +0,0 @@
-(.module:
- lux
- (lux (control ["ex" exception #+ exception:])
- (data [bit]
- [maybe]
- ["e" error #+ Error]
- text/format
- (coll [array]))
- [host])
- (luxc [lang]
- (lang (host [lua #+ Lua Expression Statement])))
- [//])
-
-(template [<name>]
- [(exception: #export (<name> {message Text})
- message)]
-
- [Unknown-Kind-Of-Host-Object]
- [Null-Has-No-Lux-Representation]
- [Cannot-Evaluate]
- )
-
-(host.import: java/lang/Object
- (toString [] String)
- (getClass [] (Class Object)))
-
-(host.import: java/lang/Long
- (intValue [] Integer))
-
-(host.import: net/sandius/rembulan/ByteString
- (decode [] String))
-
-(host.import: net/sandius/rembulan/Table
- (rawget #as get-idx [long] #? Object)
- (rawget #as get-key [Object] #? Object)
- (rawlen [] long))
-
-(host.import: net/sandius/rembulan/impl/DefaultTable)
-
-(def: (variant lux-object host-object)
- (-> (-> Object (Error Any)) DefaultTable (Maybe Any))
- (case [(Table::get-key [//.variant-tag-field] host-object)
- (Table::get-key [//.variant-flag-field] host-object)
- (Table::get-key [//.variant-value-field] host-object)]
- (^multi [(#.Some tag) ?flag (#.Some value)]
- [(lux-object value)
- (#.Some value)])
- (#.Some [(Long::intValue [] (:coerce Long tag))
- (: Any (case ?flag (#.Some _) "" #.None (host.null)))
- value])
-
- _
- #.None))
-
-(def: (array lux-object host-object)
- (-> (-> Object (Error Any)) DefaultTable (Maybe (Array Object)))
- (let [init-num-keys (:coerce Nat (Table::rawlen [] host-object))]
- (loop [num-keys init-num-keys
- idx +0
- output (: (Array Object)
- (array.new init-num-keys))]
- (if (n/< num-keys idx)
- (case (Table::get-idx (:coerce Long (inc idx)) host-object)
- (#.Some member)
- (case (lux-object member)
- (#e.Success parsed-member)
- (recur num-keys (inc idx) (array.write idx (:coerce Object parsed-member) output))
-
- (#e.Error error)
- #.None)
-
- #.None
- (recur num-keys (inc idx) output))
- (#.Some output)))))
-
-(def: (lux-object host-object)
- (-> Object (Error Any))
- (cond (host.null? host-object)
- (ex.throw Null-Has-No-Lux-Representation "")
-
- (or (host.instance? java/lang/Boolean host-object)
- (host.instance? java/lang/Long host-object)
- (host.instance? java/lang/Double host-object)
- (host.instance? java/lang/String host-object))
- (ex.return host-object)
-
- (host.instance? ByteString host-object)
- (ex.return (ByteString::decode [] (:coerce ByteString host-object)))
-
- (host.instance? DefaultTable host-object)
- (let [host-object (:coerce DefaultTable host-object)]
- (case (variant lux-object host-object)
- (#.Some value)
- (ex.return value)
-
- #.None
- (case (array lux-object host-object)
- (#.Some value)
- (ex.return value)
-
- #.None
- (ex.throw Unknown-Kind-Of-Host-Object (format "SECOND " (Object::toString [] (:coerce Object host-object)))))))
-
- ## else
- (ex.throw Unknown-Kind-Of-Host-Object (format "FIRST " (Object::toString [] (:coerce Object host-object))))
- ))
-
-(def: #export (eval code)
- (-> Expression (Meta Any))
- (function (_ compiler)
- (let [interpreter (|> compiler (get@ #.host) (:coerce //.Host) (get@ #//.interpreter))]
- (case (interpreter (format "return " code ";"))
- (#e.Error error)
- ((lang.throw Cannot-Evaluate error) compiler)
-
- (#e.Success output)
- (case (lux-object (|> output
- (:coerce (Array Object))
- (array.read +0)
- maybe.assume))
- (#e.Success parsed-output)
- (#e.Success [compiler parsed-output])
-
- (#e.Error error)
- ((lang.throw Cannot-Evaluate error) compiler))))))