aboutsummaryrefslogtreecommitdiff
path: root/src/lux/analyser/host.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/lux/analyser/host.clj')
-rw-r--r--src/lux/analyser/host.clj180
1 files changed, 90 insertions, 90 deletions
diff --git a/src/lux/analyser/host.clj b/src/lux/analyser/host.clj
index ec8b8b5db..64f297994 100644
--- a/src/lux/analyser/host.clj
+++ b/src/lux/analyser/host.clj
@@ -62,45 +62,45 @@
_ (&type/check exo-type output-type)]
(return (&/|list (&/T (&/V <output-tag> (&/T =x =y)) output-type))))))
- analyse-jvm-iadd "jvm-iadd" "java.lang.Integer" "java.lang.Integer"
- analyse-jvm-isub "jvm-isub" "java.lang.Integer" "java.lang.Integer"
- analyse-jvm-imul "jvm-imul" "java.lang.Integer" "java.lang.Integer"
- analyse-jvm-idiv "jvm-idiv" "java.lang.Integer" "java.lang.Integer"
- analyse-jvm-irem "jvm-irem" "java.lang.Integer" "java.lang.Integer"
- analyse-jvm-ieq "jvm-ieq" "java.lang.Integer" "java.lang.Boolean"
- analyse-jvm-ilt "jvm-ilt" "java.lang.Integer" "java.lang.Boolean"
- analyse-jvm-igt "jvm-igt" "java.lang.Integer" "java.lang.Boolean"
-
- analyse-jvm-ceq "jvm-ceq" "java.lang.Character" "java.lang.Boolean"
- analyse-jvm-clt "jvm-clt" "java.lang.Character" "java.lang.Boolean"
- analyse-jvm-cgt "jvm-cgt" "java.lang.Character" "java.lang.Boolean"
-
- analyse-jvm-ladd "jvm-ladd" "java.lang.Long" "java.lang.Long"
- analyse-jvm-lsub "jvm-lsub" "java.lang.Long" "java.lang.Long"
- analyse-jvm-lmul "jvm-lmul" "java.lang.Long" "java.lang.Long"
- analyse-jvm-ldiv "jvm-ldiv" "java.lang.Long" "java.lang.Long"
- analyse-jvm-lrem "jvm-lrem" "java.lang.Long" "java.lang.Long"
- analyse-jvm-leq "jvm-leq" "java.lang.Long" "java.lang.Boolean"
- analyse-jvm-llt "jvm-llt" "java.lang.Long" "java.lang.Boolean"
- analyse-jvm-lgt "jvm-lgt" "java.lang.Long" "java.lang.Boolean"
-
- analyse-jvm-fadd "jvm-fadd" "java.lang.Float" "java.lang.Float"
- analyse-jvm-fsub "jvm-fsub" "java.lang.Float" "java.lang.Float"
- analyse-jvm-fmul "jvm-fmul" "java.lang.Float" "java.lang.Float"
- analyse-jvm-fdiv "jvm-fdiv" "java.lang.Float" "java.lang.Float"
- analyse-jvm-frem "jvm-frem" "java.lang.Float" "java.lang.Float"
- analyse-jvm-feq "jvm-feq" "java.lang.Float" "java.lang.Boolean"
- analyse-jvm-flt "jvm-flt" "java.lang.Float" "java.lang.Boolean"
- analyse-jvm-fgt "jvm-fgt" "java.lang.Float" "java.lang.Boolean"
-
- analyse-jvm-dadd "jvm-dadd" "java.lang.Double" "java.lang.Double"
- analyse-jvm-dsub "jvm-dsub" "java.lang.Double" "java.lang.Double"
- analyse-jvm-dmul "jvm-dmul" "java.lang.Double" "java.lang.Double"
- analyse-jvm-ddiv "jvm-ddiv" "java.lang.Double" "java.lang.Double"
- analyse-jvm-drem "jvm-drem" "java.lang.Double" "java.lang.Double"
- analyse-jvm-deq "jvm-deq" "java.lang.Double" "java.lang.Boolean"
- analyse-jvm-dlt "jvm-dlt" "java.lang.Double" "java.lang.Boolean"
- analyse-jvm-dgt "jvm-dgt" "java.lang.Double" "java.lang.Boolean"
+ analyse-jvm-iadd &&/$jvm-iadd "java.lang.Integer" "java.lang.Integer"
+ analyse-jvm-isub &&/$jvm-isub "java.lang.Integer" "java.lang.Integer"
+ analyse-jvm-imul &&/$jvm-imul "java.lang.Integer" "java.lang.Integer"
+ analyse-jvm-idiv &&/$jvm-idiv "java.lang.Integer" "java.lang.Integer"
+ analyse-jvm-irem &&/$jvm-irem "java.lang.Integer" "java.lang.Integer"
+ analyse-jvm-ieq &&/$jvm-ieq "java.lang.Integer" "java.lang.Boolean"
+ analyse-jvm-ilt &&/$jvm-ilt "java.lang.Integer" "java.lang.Boolean"
+ analyse-jvm-igt &&/$jvm-igt "java.lang.Integer" "java.lang.Boolean"
+
+ analyse-jvm-ceq &&/$jvm-ceq "java.lang.Character" "java.lang.Boolean"
+ analyse-jvm-clt &&/$jvm-clt "java.lang.Character" "java.lang.Boolean"
+ analyse-jvm-cgt &&/$jvm-cgt "java.lang.Character" "java.lang.Boolean"
+
+ analyse-jvm-ladd &&/$jvm-ladd "java.lang.Long" "java.lang.Long"
+ analyse-jvm-lsub &&/$jvm-lsub "java.lang.Long" "java.lang.Long"
+ analyse-jvm-lmul &&/$jvm-lmul "java.lang.Long" "java.lang.Long"
+ analyse-jvm-ldiv &&/$jvm-ldiv "java.lang.Long" "java.lang.Long"
+ analyse-jvm-lrem &&/$jvm-lrem "java.lang.Long" "java.lang.Long"
+ analyse-jvm-leq &&/$jvm-leq "java.lang.Long" "java.lang.Boolean"
+ analyse-jvm-llt &&/$jvm-llt "java.lang.Long" "java.lang.Boolean"
+ analyse-jvm-lgt &&/$jvm-lgt "java.lang.Long" "java.lang.Boolean"
+
+ analyse-jvm-fadd &&/$jvm-fadd "java.lang.Float" "java.lang.Float"
+ analyse-jvm-fsub &&/$jvm-fsub "java.lang.Float" "java.lang.Float"
+ analyse-jvm-fmul &&/$jvm-fmul "java.lang.Float" "java.lang.Float"
+ analyse-jvm-fdiv &&/$jvm-fdiv "java.lang.Float" "java.lang.Float"
+ analyse-jvm-frem &&/$jvm-frem "java.lang.Float" "java.lang.Float"
+ analyse-jvm-feq &&/$jvm-feq "java.lang.Float" "java.lang.Boolean"
+ analyse-jvm-flt &&/$jvm-flt "java.lang.Float" "java.lang.Boolean"
+ analyse-jvm-fgt &&/$jvm-fgt "java.lang.Float" "java.lang.Boolean"
+
+ analyse-jvm-dadd &&/$jvm-dadd "java.lang.Double" "java.lang.Double"
+ analyse-jvm-dsub &&/$jvm-dsub "java.lang.Double" "java.lang.Double"
+ analyse-jvm-dmul &&/$jvm-dmul "java.lang.Double" "java.lang.Double"
+ analyse-jvm-ddiv &&/$jvm-ddiv "java.lang.Double" "java.lang.Double"
+ analyse-jvm-drem &&/$jvm-drem "java.lang.Double" "java.lang.Double"
+ analyse-jvm-deq &&/$jvm-deq "java.lang.Double" "java.lang.Boolean"
+ analyse-jvm-dlt &&/$jvm-dlt "java.lang.Double" "java.lang.Boolean"
+ analyse-jvm-dgt &&/$jvm-dgt "java.lang.Double" "java.lang.Boolean"
)
(defn analyse-jvm-getstatic [analyse exo-type ?class ?field]
@@ -108,7 +108,7 @@
=type (&host/lookup-static-field class-loader ?class ?field)
:let [output-type =type]
_ (&type/check exo-type output-type)]
- (return (&/|list (&/T (&/V "jvm-getstatic" (&/T ?class ?field)) output-type)))))
+ (return (&/|list (&/T (&/V &&/$jvm-getstatic (&/T ?class ?field)) output-type)))))
(defn analyse-jvm-getfield [analyse exo-type ?class ?field ?object]
(|do [class-loader &/loader
@@ -116,7 +116,7 @@
=object (&&/analyse-1 analyse ?object)
:let [output-type =type]
_ (&type/check exo-type output-type)]
- (return (&/|list (&/T (&/V "jvm-getfield" (&/T ?class ?field =object)) output-type)))))
+ (return (&/|list (&/T (&/V &&/$jvm-getfield (&/T ?class ?field =object)) output-type)))))
(defn analyse-jvm-putstatic [analyse exo-type ?class ?field ?value]
(|do [class-loader &/loader
@@ -124,7 +124,7 @@
=value (&&/analyse-1 analyse =type ?value)
:let [output-type &type/Unit]
_ (&type/check exo-type output-type)]
- (return (&/|list (&/T (&/V "jvm-putstatic" (&/T ?class ?field =value)) output-type)))))
+ (return (&/|list (&/T (&/V &&/$jvm-putstatic (&/T ?class ?field =value)) output-type)))))
(defn analyse-jvm-putfield [analyse exo-type ?class ?field ?object ?value]
(|do [class-loader &/loader
@@ -133,7 +133,7 @@
=value (&&/analyse-1 analyse =type ?value)
:let [output-type &type/Unit]
_ (&type/check exo-type output-type)]
- (return (&/|list (&/T (&/V "jvm-putfield" (&/T ?class ?field =object =value)) output-type)))))
+ (return (&/|list (&/T (&/V &&/$jvm-putfield (&/T ?class ?field =object =value)) output-type)))))
(defn analyse-jvm-invokestatic [analyse exo-type ?class ?method ?classes ?args]
(|do [class-loader &/loader
@@ -148,14 +148,14 @@
?args)
:let [output-type =return]
_ (&type/check exo-type output-type)]
- (return (&/|list (&/T (&/V "jvm-invokestatic" (&/T ?class ?method =classes =args)) output-type)))))
+ (return (&/|list (&/T (&/V &&/$jvm-invokestatic (&/T ?class ?method =classes =args)) output-type)))))
(defn analyse-jvm-instanceof [analyse exo-type ?class ?object]
(|do [=object (analyse-1+ analyse ?object)
_ (ensure-object =object)
:let [output-type &type/Bool]
_ (&type/check exo-type output-type)]
- (return (&/|list (&/T (&/V "jvm-instanceof" (&/T ?class =object)) output-type)))))
+ (return (&/|list (&/T (&/V &&/$jvm-instanceof (&/T ?class =object)) output-type)))))
(do-template [<name> <tag>]
(defn <name> [analyse exo-type ?class ?method ?classes ?object ?args]
@@ -169,8 +169,8 @@
_ (&type/check exo-type output-type)]
(return (&/|list (&/T (&/V <tag> (&/T ?class ?method =classes =object =args)) output-type)))))
- analyse-jvm-invokevirtual "jvm-invokevirtual"
- analyse-jvm-invokeinterface "jvm-invokeinterface"
+ analyse-jvm-invokevirtual &&/$jvm-invokevirtual
+ analyse-jvm-invokeinterface &&/$jvm-invokeinterface
)
(defn analyse-jvm-invokespecial [analyse exo-type ?class ?method ?classes ?object ?args]
@@ -185,41 +185,41 @@
=classes ?args)
:let [output-type =return]
_ (&type/check exo-type output-type)]
- (return (&/|list (&/T (&/V "jvm-invokespecial" (&/T ?class ?method =classes =object =args)) output-type)))))
+ (return (&/|list (&/T (&/V &&/$jvm-invokespecial (&/T ?class ?method =classes =object =args)) output-type)))))
(defn analyse-jvm-null? [analyse exo-type ?object]
(|do [=object (analyse-1+ analyse ?object)
_ (ensure-object =object)
:let [output-type &type/Bool]
_ (&type/check exo-type output-type)]
- (return (&/|list (&/T (&/V "jvm-null?" =object) output-type)))))
+ (return (&/|list (&/T (&/V &&/$jvm-null? =object) output-type)))))
(defn analyse-jvm-null [analyse exo-type]
(|do [:let [output-type (&/V &/$DataT "null")]
_ (&type/check exo-type output-type)]
- (return (&/|list (&/T (&/V "jvm-null" nil) output-type)))))
+ (return (&/|list (&/T (&/V &&/$jvm-null nil) output-type)))))
(defn analyse-jvm-new [analyse exo-type ?class ?classes ?args]
(|do [=classes (&/map% extract-text ?classes)
=args (&/map% (partial analyse-1+ analyse) ?args)
:let [output-type (&/V &/$DataT ?class)]
_ (&type/check exo-type output-type)]
- (return (&/|list (&/T (&/V "jvm-new" (&/T ?class =classes =args)) output-type)))))
+ (return (&/|list (&/T (&/V &&/$jvm-new (&/T ?class =classes =args)) output-type)))))
(defn analyse-jvm-new-array [analyse ?class ?length]
- (return (&/|list (&/T (&/V "jvm-new-array" (&/T ?class ?length)) (&/V "array" (&/T (&/V &/$DataT ?class)
- (&/V &/$Nil nil)))))))
+ (return (&/|list (&/T (&/V &&/$jvm-new-array (&/T ?class ?length)) (&/V "array" (&/T (&/V &/$DataT ?class)
+ (&/V &/$Nil nil)))))))
(defn analyse-jvm-aastore [analyse ?array ?idx ?elem]
(|do [=array (analyse-1+ analyse ?array)
=elem (analyse-1+ analyse ?elem)
=array-type (&&/expr-type =array)]
- (return (&/|list (&/T (&/V "jvm-aastore" (&/T =array ?idx =elem)) =array-type)))))
+ (return (&/|list (&/T (&/V &&/$jvm-aastore (&/T =array ?idx =elem)) =array-type)))))
(defn analyse-jvm-aaload [analyse ?array ?idx]
(|do [=array (analyse-1+ analyse ?array)
=array-type (&&/expr-type =array)]
- (return (&/|list (&/T (&/V "jvm-aaload" (&/T =array ?idx)) =array-type)))))
+ (return (&/|list (&/T (&/V &&/$jvm-aaload (&/T =array ?idx)) =array-type)))))
(defn ^:private analyse-modifiers [modifiers]
(&/fold% (fn [so-far modif]
@@ -327,7 +327,7 @@
_
(fail "[Analyser Error] Wrong syntax for method.")))
(&/enumerate ?methods))
- _ (compile-token (&/V "jvm-class" (&/T ?name ?super-class =interfaces =fields =methods)))]
+ _ (compile-token (&/V &&/$jvm-class (&/T ?name ?super-class =interfaces =fields =methods)))]
(return (&/|list))))
(defn analyse-jvm-interface [analyse compile-token ?name ?supers ?methods]
@@ -349,7 +349,7 @@
_
(fail (str "[Analyser Error] Invalid method signature: " (&/show-ast method)))))
?methods)
- _ (compile-token (&/V "jvm-interface" (&/T ?name =supers =methods)))]
+ _ (compile-token (&/V &&/$jvm-interface (&/T ?name =supers =methods)))]
(return (&/|list))))
(defn analyse-jvm-try [analyse exo-type ?body ?catches+?finally]
@@ -365,13 +365,13 @@
(&/$None) (return (&/V &/$None nil))
(&/$Some ?finally*) (|do [=finally (analyse-1+ analyse ?finally*)]
(return (&/V &/$Some =finally))))]
- (return (&/|list (&/T (&/V "jvm-try" (&/T =body =catches =finally)) exo-type)))))
+ (return (&/|list (&/T (&/V &&/$jvm-try (&/T =body =catches =finally)) exo-type)))))
(defn analyse-jvm-throw [analyse exo-type ?ex]
(|do [=ex (analyse-1+ analyse ?ex)
:let [[_obj _type] =ex]
_ (&type/check (&/V &/$DataT "java.lang.Throwable") _type)]
- (return (&/|list (&/T (&/V "jvm-throw" =ex) &type/$Void)))))
+ (return (&/|list (&/T (&/V &&/$jvm-throw =ex) &type/$Void)))))
(do-template [<name> <tag>]
(defn <name> [analyse exo-type ?monitor]
@@ -381,8 +381,8 @@
_ (&type/check exo-type output-type)]
(return (&/|list (&/T (&/V <tag> =monitor) output-type)))))
- analyse-jvm-monitorenter "jvm-monitorenter"
- analyse-jvm-monitorexit "jvm-monitorexit"
+ analyse-jvm-monitorenter &&/$jvm-monitorenter
+ analyse-jvm-monitorexit &&/$jvm-monitorexit
)
(do-template [<name> <tag> <from-class> <to-class>]
@@ -392,24 +392,24 @@
_ (&type/check exo-type output-type)]
(return (&/|list (&/T (&/V <tag> =value) output-type))))))
- analyse-jvm-d2f "jvm-d2f" "java.lang.Double" "java.lang.Float"
- analyse-jvm-d2i "jvm-d2i" "java.lang.Double" "java.lang.Integer"
- analyse-jvm-d2l "jvm-d2l" "java.lang.Double" "java.lang.Long"
+ analyse-jvm-d2f &&/$jvm-d2f "java.lang.Double" "java.lang.Float"
+ analyse-jvm-d2i &&/$jvm-d2i "java.lang.Double" "java.lang.Integer"
+ analyse-jvm-d2l &&/$jvm-d2l "java.lang.Double" "java.lang.Long"
- analyse-jvm-f2d "jvm-f2d" "java.lang.Float" "java.lang.Double"
- analyse-jvm-f2i "jvm-f2i" "java.lang.Float" "java.lang.Integer"
- analyse-jvm-f2l "jvm-f2l" "java.lang.Float" "java.lang.Long"
+ analyse-jvm-f2d &&/$jvm-f2d "java.lang.Float" "java.lang.Double"
+ analyse-jvm-f2i &&/$jvm-f2i "java.lang.Float" "java.lang.Integer"
+ analyse-jvm-f2l &&/$jvm-f2l "java.lang.Float" "java.lang.Long"
- analyse-jvm-i2b "jvm-i2b" "java.lang.Integer" "java.lang.Byte"
- analyse-jvm-i2c "jvm-i2c" "java.lang.Integer" "java.lang.Character"
- analyse-jvm-i2d "jvm-i2d" "java.lang.Integer" "java.lang.Double"
- analyse-jvm-i2f "jvm-i2f" "java.lang.Integer" "java.lang.Float"
- analyse-jvm-i2l "jvm-i2l" "java.lang.Integer" "java.lang.Long"
- analyse-jvm-i2s "jvm-i2s" "java.lang.Integer" "java.lang.Short"
+ analyse-jvm-i2b &&/$jvm-i2b "java.lang.Integer" "java.lang.Byte"
+ analyse-jvm-i2c &&/$jvm-i2c "java.lang.Integer" "java.lang.Character"
+ analyse-jvm-i2d &&/$jvm-i2d "java.lang.Integer" "java.lang.Double"
+ analyse-jvm-i2f &&/$jvm-i2f "java.lang.Integer" "java.lang.Float"
+ analyse-jvm-i2l &&/$jvm-i2l "java.lang.Integer" "java.lang.Long"
+ analyse-jvm-i2s &&/$jvm-i2s "java.lang.Integer" "java.lang.Short"
- analyse-jvm-l2d "jvm-l2d" "java.lang.Long" "java.lang.Double"
- analyse-jvm-l2f "jvm-l2f" "java.lang.Long" "java.lang.Float"
- analyse-jvm-l2i "jvm-l2i" "java.lang.Long" "java.lang.Integer"
+ analyse-jvm-l2d &&/$jvm-l2d "java.lang.Long" "java.lang.Double"
+ analyse-jvm-l2f &&/$jvm-l2f "java.lang.Long" "java.lang.Float"
+ analyse-jvm-l2i &&/$jvm-l2i "java.lang.Long" "java.lang.Integer"
)
(do-template [<name> <tag> <from-class> <to-class>]
@@ -419,24 +419,24 @@
_ (&type/check exo-type output-type)]
(return (&/|list (&/T (&/V <tag> =value) output-type))))))
- analyse-jvm-iand "jvm-iand" "java.lang.Integer" "java.lang.Integer"
- analyse-jvm-ior "jvm-ior" "java.lang.Integer" "java.lang.Integer"
- analyse-jvm-ixor "jvm-ixor" "java.lang.Integer" "java.lang.Integer"
- analyse-jvm-ishl "jvm-ishl" "java.lang.Integer" "java.lang.Integer"
- analyse-jvm-ishr "jvm-ishr" "java.lang.Integer" "java.lang.Integer"
- analyse-jvm-iushr "jvm-iushr" "java.lang.Integer" "java.lang.Integer"
-
- analyse-jvm-land "jvm-land" "java.lang.Long" "java.lang.Long"
- analyse-jvm-lor "jvm-lor" "java.lang.Long" "java.lang.Long"
- analyse-jvm-lxor "jvm-lxor" "java.lang.Long" "java.lang.Long"
- analyse-jvm-lshl "jvm-lshl" "java.lang.Long" "java.lang.Integer"
- analyse-jvm-lshr "jvm-lshr" "java.lang.Long" "java.lang.Integer"
- analyse-jvm-lushr "jvm-lushr" "java.lang.Long" "java.lang.Integer"
+ analyse-jvm-iand &&/$jvm-iand "java.lang.Integer" "java.lang.Integer"
+ analyse-jvm-ior &&/$jvm-ior "java.lang.Integer" "java.lang.Integer"
+ analyse-jvm-ixor &&/$jvm-ixor "java.lang.Integer" "java.lang.Integer"
+ analyse-jvm-ishl &&/$jvm-ishl "java.lang.Integer" "java.lang.Integer"
+ analyse-jvm-ishr &&/$jvm-ishr "java.lang.Integer" "java.lang.Integer"
+ analyse-jvm-iushr &&/$jvm-iushr "java.lang.Integer" "java.lang.Integer"
+
+ analyse-jvm-land &&/$jvm-land "java.lang.Long" "java.lang.Long"
+ analyse-jvm-lor &&/$jvm-lor "java.lang.Long" "java.lang.Long"
+ analyse-jvm-lxor &&/$jvm-lxor "java.lang.Long" "java.lang.Long"
+ analyse-jvm-lshl &&/$jvm-lshl "java.lang.Long" "java.lang.Integer"
+ analyse-jvm-lshr &&/$jvm-lshr "java.lang.Long" "java.lang.Integer"
+ analyse-jvm-lushr &&/$jvm-lushr "java.lang.Long" "java.lang.Integer"
)
(defn analyse-jvm-program [analyse compile-token ?args ?body]
(|do [=body (&/with-scope ""
(&&env/with-local ?args (&/V &/$AppT (&/T &type/List &type/Text))
(&&/analyse-1 analyse (&/V &/$AppT (&/T &type/IO &type/Unit)) ?body)))
- _ (compile-token (&/V "jvm-program" =body))]
+ _ (compile-token (&/V &&/$jvm-program =body))]
(return (&/|list))))