diff options
author | Eduardo Julian | 2019-03-26 21:23:30 -0400 |
---|---|---|
committer | Eduardo Julian | 2019-03-26 21:23:30 -0400 |
commit | 8df108600f6791237d0079af6b582e6cb306906d (patch) | |
tree | d47d2d0d8cccb58b2baa758057670c35123a187e /new-luxc/source/luxc/lang/translation/python | |
parent | e76fd0e68475f65e75c1339cfcef6a8114707472 (diff) |
Got the Python compiler running.
Diffstat (limited to 'new-luxc/source/luxc/lang/translation/python')
-rw-r--r-- | new-luxc/source/luxc/lang/translation/python/eval.jvm.lux | 149 | ||||
-rw-r--r-- | new-luxc/source/luxc/lang/translation/python/statement.jvm.lux | 48 |
2 files changed, 0 insertions, 197 deletions
diff --git a/new-luxc/source/luxc/lang/translation/python/eval.jvm.lux b/new-luxc/source/luxc/lang/translation/python/eval.jvm.lux deleted file mode 100644 index 1ffcc5a1f..000000000 --- a/new-luxc/source/luxc/lang/translation/python/eval.jvm.lux +++ /dev/null @@ -1,149 +0,0 @@ -(.module: - lux - (lux (control ["ex" exception #+ exception:]) - (data [bit] - [maybe] - ["e" error #+ Error] - text/format - (coll [array])) - [host]) - (luxc [lang] - (lang (host [python #+ Expression Statement]))) - [//]) - -(do-template [<name>] - [(exception: #export (<name> {message Text}) - message)] - - [Not-A-Variant] - [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: org/python/core/PyType - (getName [] String)) - -(host.import: org/python/core/PyString - (new [String])) - -(host.import: org/python/core/PyObject - (asLong [] long) - (asDouble [] double) - (asString [] String) - (__nonzero__ [] boolean) - (__getitem__ [int] #try PyObject) - (__getitem__ #as __getitem__dict [PyObject] #try PyObject) - (__len__ [] int) - (getType [] PyType)) - -(def: (tuple lux-object host-object) - (-> (-> PyObject (Error Any)) PyObject (Error Any)) - (let [size (:coerce Nat (PyObject::__len__ [] host-object))] - (loop [idx +0 - output (:coerce (Array Any) (array.new size))] - (if (n/< size idx) - (case (PyObject::__getitem__ [(:coerce Int idx)] host-object) - (#e.Error error) - (#e.Error error) - - (#e.Success value) - (case (lux-object value) - (#e.Error error) - (#e.Error error) - - (#e.Success lux-value) - (recur (inc idx) (array.write idx lux-value output)))) - (#e.Success output))))) - -(def: python-type - (-> PyObject Text) - (|>> (PyObject::getType []) (PyType::getName []) (:coerce Text))) - -(def: tag-field (PyString::new [//.variant-tag-field])) -(def: flag-field (PyString::new [//.variant-flag-field])) -(def: value-field (PyString::new [//.variant-value-field])) - -(def: (variant lux-object host-object) - (-> (-> PyObject (Error Any)) PyObject (Error Any)) - (case [(PyObject::__getitem__dict [tag-field] host-object) - (PyObject::__getitem__dict [flag-field] host-object) - (PyObject::__getitem__dict [value-field] host-object)] - (^or [(#e.Error error) _ _] [_ (#e.Error error) _] [_ _ (#e.Error error)]) - (#e.Error error) - - (^multi [(#e.Success tag) (#e.Success flag) (#e.Success value)] - [(lux-object tag) - (#e.Success tag)] - [(lux-object value) - (#e.Success value)]) - (#e.Success [(Long::intValue [] (:coerce Long tag)) - (: Any - (case (python-type (:coerce PyObject flag)) - "NoneType" - (host.null) - - _ - "")) - value]) - - _ - (ex.throw Not-A-Variant (Object::toString [] host-object)))) - -(def: (lux-object host-object) - (-> PyObject (Error Any)) - (case (python-type host-object) - "str" - (#e.Success (PyObject::asString [] host-object)) - - "bool" - (#e.Success (PyObject::__nonzero__ [] host-object)) - - "float" - (#e.Success (PyObject::asDouble [] host-object)) - - (^or "int" "long") - (#e.Success (PyObject::asLong [] host-object)) - - "tuple" - (tuple lux-object host-object) - - "dict" - (variant lux-object host-object) - - "NoneType" - (#e.Success []) - - type - (ex.throw Unknown-Kind-Of-Host-Object (format type " " (Object::toString [] host-object))))) - -(def: #export (eval code) - (-> Expression (Meta Any)) - (function (_ compiler) - (let [interpreter (|> compiler (get@ #.host) (:coerce //.Host) (get@ #//.interpreter))] - (case (interpreter code) - (#e.Error error) - (exec (log! (format "eval #e.Error\n" - "<< " (python.expression code) "\n" - error)) - ((lang.throw Cannot-Evaluate error) compiler)) - - (#e.Success output) - (case (lux-object output) - (#e.Success parsed-output) - (exec ## (log! (format "eval #e.Success\n" - ## "<< " (python.expression code))) - (#e.Success [compiler parsed-output])) - - (#e.Error error) - (exec (log! (format "eval #e.Error\n" - "<< " (python.expression code) "\n" - error)) - ((lang.throw Cannot-Evaluate error) compiler))))))) diff --git a/new-luxc/source/luxc/lang/translation/python/statement.jvm.lux b/new-luxc/source/luxc/lang/translation/python/statement.jvm.lux deleted file mode 100644 index bf34f3f2f..000000000 --- a/new-luxc/source/luxc/lang/translation/python/statement.jvm.lux +++ /dev/null @@ -1,48 +0,0 @@ -(.module: - lux - (lux (control [monad #+ do]) - [macro] - (data text/format)) - (luxc (lang [".L" module] - (host [python #+ Expression Statement @@]))) - [//] - (// [".T" runtime] - [".T" reference] - [".T" eval])) - -(def: #export (translate-def name expressionT expressionO metaV) - (-> Text Type Expression Code (Meta Any)) - (do macro.Monad<Meta> - [current-module macro.current-module-name - #let [def-name [current-module name]]] - (case (macro.get-identifier-ann (name-of #.alias) metaV) - (#.Some real-def) - (do @ - [[realT realA realV] (macro.find-def real-def) - _ (moduleL.define def-name [realT metaV realV])] - (wrap [])) - - _ - (do @ - [#let [def-name (referenceT.global def-name)] - _ (//.save (python.set! (list def-name) expressionO)) - expressionV (evalT.eval (@@ def-name)) - _ (moduleL.define def-name [expressionT metaV expressionV]) - _ (if (macro.type? metaV) - (case (macro.declared-tags metaV) - #.Nil - (wrap []) - - tags - (moduleL.declare-tags tags (macro.export? metaV) (:coerce Type expressionV))) - (wrap [])) - #let [_ (log! (format "DEF " (%name def-name)))]] - (wrap [])) - ))) - -(def: #export (translate-program programO) - (-> Expression (Meta Statement)) - (macro.fail "translate-program NOT IMPLEMENTED YET") - ## (hostT.save (format "var " (referenceT.variable +0) " = " runtimeT.lux//program-args "();" - ## "(" programO ")(null);")) - ) |