aboutsummaryrefslogtreecommitdiff
path: root/src/lux/analyser.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/lux/analyser.clj')
-rw-r--r--src/lux/analyser.clj169
1 files changed, 87 insertions, 82 deletions
diff --git a/src/lux/analyser.clj b/src/lux/analyser.clj
index 1606a95c2..de7fc8497 100644
--- a/src/lux/analyser.clj
+++ b/src/lux/analyser.clj
@@ -10,7 +10,7 @@
(:require (clojure [template :refer [do-template]])
[clojure.core.match :as M :refer [matchv]]
clojure.core.match.array
- (lux [base :as & :refer [|let |do return fail return* fail* |list]]
+ (lux [base :as & :refer [|let |do return fail return* fail*]]
[reader :as &reader]
[parser :as &parser]
[type :as &type]
@@ -23,16 +23,16 @@
(defn ^:private parse-handler [[catch+ finally+] token]
(matchv ::M/objects [token]
[["lux;Meta" [meta ["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_catch"]]]]
- ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ ?ex-class]]]]
+ ["lux;Cons" [["lux;Meta" [_ ["lux;TextS" ?ex-class]]]
["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ ?ex-arg]]]]
["lux;Cons" [?catch-body
["lux;Nil" _]]]]]]]]]]]]]
- (&/T (&/|++ catch+ (|list (&/T ?ex-class ?ex-arg ?catch-body))) finally+)
+ (&/T (&/|++ catch+ (&/|list (&/T ?ex-class ?ex-arg ?catch-body))) finally+)
[["lux;Meta" [meta ["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_finally"]]]]
["lux;Cons" [?finally-body
["lux;Nil" _]]]]]]]]]
- (&/T catch+ ?finally-body)))
+ (&/T catch+ (&/V "lux;Some" ?finally-body))))
(defn ^:private aba7 [analyse eval! compile-module exo-type token]
(matchv ::M/objects [token]
@@ -62,7 +62,8 @@
["lux;Cons" [["lux;Meta" [_ ["lux;TextS" ?super-class]]]
["lux;Cons" [["lux;Meta" [_ ["lux;TupleS" ?interfaces]]]
["lux;Cons" [["lux;Meta" [_ ["lux;TupleS" ?fields]]]
- ?methods]]]]]]]]]]]]
+ ["lux;Cons" [["lux;Meta" [_ ["lux;TupleS" ?methods]]]
+ ["lux;Nil" _]]]]]]]]]]]]]]]
(&&host/analyse-jvm-class analyse ?name ?super-class ?interfaces ?fields ?methods)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_interface"]]]]
@@ -85,74 +86,74 @@
(matchv ::M/objects [token]
;; Primitive conversions
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_d2f"]]]] ["lux;Cons" [?value ["lux;Nil" _]]]]]]]
- (&&host/analyse-jvm-d2f analyse ?value)
+ (&&host/analyse-jvm-d2f analyse exo-type ?value)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_d2i"]]]] ["lux;Cons" [?value ["lux;Nil" _]]]]]]]
- (&&host/analyse-jvm-d2i analyse ?value)
+ (&&host/analyse-jvm-d2i analyse exo-type ?value)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_d2l"]]]] ["lux;Cons" [?value ["lux;Nil" _]]]]]]]
- (&&host/analyse-jvm-d2l analyse ?value)
+ (&&host/analyse-jvm-d2l analyse exo-type ?value)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_f2d"]]]] ["lux;Cons" [?value ["lux;Nil" _]]]]]]]
- (&&host/analyse-jvm-f2d analyse ?value)
+ (&&host/analyse-jvm-f2d analyse exo-type ?value)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_f2i"]]]] ["lux;Cons" [?value ["lux;Nil" _]]]]]]]
- (&&host/analyse-jvm-f2i analyse ?value)
+ (&&host/analyse-jvm-f2i analyse exo-type ?value)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_f2l"]]]] ["lux;Cons" [?value ["lux;Nil" _]]]]]]]
- (&&host/analyse-jvm-f2l analyse ?value)
+ (&&host/analyse-jvm-f2l analyse exo-type ?value)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_i2b"]]]] ["lux;Cons" [?value ["lux;Nil" _]]]]]]]
- (&&host/analyse-jvm-i2b analyse ?value)
+ (&&host/analyse-jvm-i2b analyse exo-type ?value)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_i2c"]]]] ["lux;Cons" [?value ["lux;Nil" _]]]]]]]
- (&&host/analyse-jvm-i2c analyse ?value)
+ (&&host/analyse-jvm-i2c analyse exo-type ?value)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_i2d"]]]] ["lux;Cons" [?value ["lux;Nil" _]]]]]]]
- (&&host/analyse-jvm-i2d analyse ?value)
+ (&&host/analyse-jvm-i2d analyse exo-type ?value)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_i2f"]]]] ["lux;Cons" [?value ["lux;Nil" _]]]]]]]
- (&&host/analyse-jvm-i2f analyse ?value)
+ (&&host/analyse-jvm-i2f analyse exo-type ?value)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_i2l"]]]] ["lux;Cons" [?value ["lux;Nil" _]]]]]]]
- (&&host/analyse-jvm-i2l analyse ?value)
+ (&&host/analyse-jvm-i2l analyse exo-type ?value)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_i2s"]]]] ["lux;Cons" [?value ["lux;Nil" _]]]]]]]
- (&&host/analyse-jvm-i2s analyse ?value)
+ (&&host/analyse-jvm-i2s analyse exo-type ?value)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_l2d"]]]] ["lux;Cons" [?value ["lux;Nil" _]]]]]]]
- (&&host/analyse-jvm-l2d analyse ?value)
+ (&&host/analyse-jvm-l2d analyse exo-type ?value)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_l2f"]]]] ["lux;Cons" [?value ["lux;Nil" _]]]]]]]
- (&&host/analyse-jvm-l2f analyse ?value)
+ (&&host/analyse-jvm-l2f analyse exo-type ?value)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_l2i"]]]] ["lux;Cons" [?value ["lux;Nil" _]]]]]]]
- (&&host/analyse-jvm-l2i analyse ?value)
+ (&&host/analyse-jvm-l2i analyse exo-type ?value)
;; Bitwise operators
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_iand"]]]] ["lux;Cons" [?x ["lux;Cons" [?y ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-iand analyse ?x ?y)
+ (&&host/analyse-jvm-iand analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_ior"]]]] ["lux;Cons" [?x ["lux;Cons" [?y ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-ior analyse ?x ?y)
+ (&&host/analyse-jvm-ior analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_land"]]]] ["lux;Cons" [?x ["lux;Cons" [?y ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-land analyse ?x ?y)
+ (&&host/analyse-jvm-land analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_lor"]]]] ["lux;Cons" [?x ["lux;Cons" [?y ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-lor analyse ?x ?y)
+ (&&host/analyse-jvm-lor analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_lxor"]]]] ["lux;Cons" [?x ["lux;Cons" [?y ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-lxor analyse ?x ?y)
+ (&&host/analyse-jvm-lxor analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_lshl"]]]] ["lux;Cons" [?x ["lux;Cons" [?y ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-lshl analyse ?x ?y)
+ (&&host/analyse-jvm-lshl analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_lshr"]]]] ["lux;Cons" [?x ["lux;Cons" [?y ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-lshr analyse ?x ?y)
+ (&&host/analyse-jvm-lshr analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_lushr"]]]] ["lux;Cons" [?x ["lux;Cons" [?y ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-lushr analyse ?x ?y)
+ (&&host/analyse-jvm-lushr analyse exo-type ?x ?y)
[_]
(aba7 analyse eval! compile-module exo-type token)))
@@ -163,40 +164,40 @@
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_null?"]]]]
["lux;Cons" [?object
["lux;Nil" _]]]]]]]
- (&&host/analyse-jvm-null? analyse ?object)
+ (&&host/analyse-jvm-null? analyse exo-type ?object)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_instanceof"]]]]
["lux;Cons" [["lux;Meta" [_ ["lux;TextS" ?class]]]
["lux;Cons" [?object
["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-instanceof analyse ?class ?object)
+ (&&host/analyse-jvm-instanceof analyse exo-type ?class ?object)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_new"]]]]
["lux;Cons" [["lux;Meta" [_ ["lux;TextS" ?class]]]
["lux;Cons" [["lux;Meta" [_ ["lux;TupleS" ?classes]]]
["lux;Cons" [["lux;Meta" [_ ["lux;TupleS" ?args]]]
["lux;Nil" _]]]]]]]]]]]
- (&&host/analyse-jvm-new analyse ?class ?classes ?args)
+ (&&host/analyse-jvm-new analyse exo-type ?class ?classes ?args)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_getstatic"]]]]
["lux;Cons" [["lux;Meta" [_ ["lux;TextS" ?class]]]
["lux;Cons" [["lux;Meta" [_ ["lux;TextS" ?field]]]
["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-getstatic analyse ?class ?field)
+ (&&host/analyse-jvm-getstatic analyse exo-type ?class ?field)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_getfield"]]]]
["lux;Cons" [["lux;Meta" [_ ["lux;TextS" ?class]]]
["lux;Cons" [["lux;Meta" [_ ["lux;TextS" ?field]]]
["lux;Cons" [?object
["lux;Nil" _]]]]]]]]]]]
- (&&host/analyse-jvm-getfield analyse ?class ?field ?object)
+ (&&host/analyse-jvm-getfield analyse exo-type ?class ?field ?object)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_putstatic"]]]]
["lux;Cons" [["lux;Meta" [_ ["lux;TextS" ?class]]]
["lux;Cons" [["lux;Meta" [_ ["lux;TextS" ?field]]]
["lux;Cons" [?value
["lux;Nil" _]]]]]]]]]]]
- (&&host/analyse-jvm-putstatic analyse ?class ?field ?value)
+ (&&host/analyse-jvm-putstatic analyse exo-type ?class ?field ?value)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_putfield"]]]]
["lux;Cons" [["lux;Meta" [_ ["lux;TextS" ?class]]]
@@ -204,7 +205,7 @@
["lux;Cons" [?object
["lux;Cons" [?value
["lux;Nil" _]]]]]]]]]]]]]
- (&&host/analyse-jvm-putfield analyse ?class ?field ?object ?value)
+ (&&host/analyse-jvm-putfield analyse exo-type ?class ?field ?object ?value)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_invokestatic"]]]]
["lux;Cons" [["lux;Meta" [_ ["lux;TextS" ?class]]]
@@ -212,7 +213,7 @@
["lux;Cons" [["lux;Meta" [_ ["lux;TupleS" ?classes]]]
["lux;Cons" [["lux;Meta" [_ ["lux;TupleS" ?args]]]
["lux;Nil" _]]]]]]]]]]]]]
- (&&host/analyse-jvm-invokestatic analyse ?class ?method ?classes ?args)
+ (&&host/analyse-jvm-invokestatic analyse exo-type ?class ?method ?classes ?args)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_invokevirtual"]]]]
["lux;Cons" [["lux;Meta" [_ ["lux;TextS" ?class]]]
@@ -221,7 +222,7 @@
["lux;Cons" [?object
["lux;Cons" [["lux;Meta" [_ ["lux;TupleS" ?args]]]
["lux;Nil" _]]]]]]]]]]]]]]]
- (&&host/analyse-jvm-invokevirtual analyse ?class ?method ?classes ?object ?args)
+ (&&host/analyse-jvm-invokevirtual analyse exo-type ?class ?method ?classes ?object ?args)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_invokeinterface"]]]]
["lux;Cons" [["lux;Meta" [_ ["lux;TextS" ?class]]]
@@ -230,7 +231,7 @@
["lux;Cons" [?object
["lux;Cons" [["lux;Meta" [_ ["lux;TupleS" ?args]]]
["lux;Nil" _]]]]]]]]]]]]]]]
- (&&host/analyse-jvm-invokeinterface analyse ?class ?method ?classes ?object ?args)
+ (&&host/analyse-jvm-invokeinterface analyse exo-type ?class ?method ?classes ?object ?args)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_invokespecial"]]]]
["lux;Cons" [["lux;Meta" [_ ["lux;TextS" ?class]]]
@@ -239,29 +240,29 @@
["lux;Cons" [?object
["lux;Cons" [["lux;Meta" [_ ["lux;TupleS" ?args]]]
["lux;Nil" _]]]]]]]]]]]]]]]
- (&&host/analyse-jvm-invokespecial analyse ?class ?method ?classes ?object ?args)
-
+ (&&host/analyse-jvm-invokespecial analyse exo-type ?class ?method ?classes ?object ?args)
+
;; Exceptions
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_try"]]]]
["lux;Cons" [?body
?handlers]]]]]]
- (&&host/analyse-jvm-try analyse ?body (&/fold parse-handler [(list) nil] ?handlers))
+ (&&host/analyse-jvm-try analyse exo-type ?body (&/fold parse-handler (&/T (&/|list) (&/V "lux;None" nil)) ?handlers))
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_throw"]]]]
["lux;Cons" [?ex
["lux;Nil" _]]]]]]]
- (&&host/analyse-jvm-throw analyse ?ex)
+ (&&host/analyse-jvm-throw analyse exo-type ?ex)
;; Syncronization/monitos
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_monitorenter"]]]]
["lux;Cons" [?monitor
["lux;Nil" _]]]]]]]
- (&&host/analyse-jvm-monitorenter analyse ?monitor)
+ (&&host/analyse-jvm-monitorenter analyse exo-type ?monitor)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_monitorexit"]]]]
["lux;Cons" [?monitor
["lux;Nil" _]]]]]]]
- (&&host/analyse-jvm-monitorexit analyse ?monitor)
+ (&&host/analyse-jvm-monitorexit analyse exo-type ?monitor)
[_]
(aba6 analyse eval! compile-module exo-type token)))
@@ -270,53 +271,53 @@
(matchv ::M/objects [token]
;; Float arithmetic
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_fadd"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-fadd analyse ?x ?y)
+ (&&host/analyse-jvm-fadd analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_fsub"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-fsub analyse ?x ?y)
+ (&&host/analyse-jvm-fsub analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_fmul"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-fmul analyse ?x ?y)
+ (&&host/analyse-jvm-fmul analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_fdiv"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-fdiv analyse ?x ?y)
+ (&&host/analyse-jvm-fdiv analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_frem"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-frem analyse ?x ?y)
+ (&&host/analyse-jvm-frem analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_feq"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-feq analyse ?x ?y)
+ (&&host/analyse-jvm-feq analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_flt"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-flt analyse ?x ?y)
+ (&&host/analyse-jvm-flt analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_fgt"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-fgt analyse ?x ?y)
+ (&&host/analyse-jvm-fgt analyse exo-type ?x ?y)
;; Double arithmetic
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_dadd"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-dadd analyse ?x ?y)
+ (&&host/analyse-jvm-dadd analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_dsub"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-dsub analyse ?x ?y)
+ (&&host/analyse-jvm-dsub analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_dmul"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-dmul analyse ?x ?y)
+ (&&host/analyse-jvm-dmul analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_ddiv"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-ddiv analyse ?x ?y)
+ (&&host/analyse-jvm-ddiv analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_drem"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-drem analyse ?x ?y)
+ (&&host/analyse-jvm-drem analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_deq"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-deq analyse ?x ?y)
+ (&&host/analyse-jvm-deq analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_dlt"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-dlt analyse ?x ?y)
+ (&&host/analyse-jvm-dlt analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_dgt"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-dgt analyse ?x ?y)
+ (&&host/analyse-jvm-dgt analyse exo-type ?x ?y)
[_]
(aba5 analyse eval! compile-module exo-type token)))
@@ -326,63 +327,63 @@
;; Host special forms
;; Characters
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_ceq"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-ceq analyse ?x ?y)
+ (&&host/analyse-jvm-ceq analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_clt"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-clt analyse ?x ?y)
+ (&&host/analyse-jvm-clt analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_cgt"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-cgt analyse ?x ?y)
+ (&&host/analyse-jvm-cgt analyse exo-type ?x ?y)
;; Integer arithmetic
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_iadd"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-iadd analyse ?x ?y)
+ (&&host/analyse-jvm-iadd analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_isub"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-isub analyse ?x ?y)
+ (&&host/analyse-jvm-isub analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_imul"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-imul analyse ?x ?y)
+ (&&host/analyse-jvm-imul analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_idiv"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-idiv analyse ?x ?y)
+ (&&host/analyse-jvm-idiv analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_irem"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-irem analyse ?x ?y)
+ (&&host/analyse-jvm-irem analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_ieq"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-ieq analyse ?x ?y)
+ (&&host/analyse-jvm-ieq analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_ilt"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-ilt analyse ?x ?y)
+ (&&host/analyse-jvm-ilt analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_igt"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-igt analyse ?x ?y)
+ (&&host/analyse-jvm-igt analyse exo-type ?x ?y)
;; Long arithmetic
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_ladd"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-ladd analyse ?x ?y)
+ (&&host/analyse-jvm-ladd analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_lsub"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-lsub analyse ?x ?y)
+ (&&host/analyse-jvm-lsub analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_lmul"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-lmul analyse ?x ?y)
+ (&&host/analyse-jvm-lmul analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_ldiv"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-ldiv analyse ?x ?y)
+ (&&host/analyse-jvm-ldiv analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_lrem"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-lrem analyse ?x ?y)
+ (&&host/analyse-jvm-lrem analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_leq"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-leq analyse ?x ?y)
+ (&&host/analyse-jvm-leq analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_llt"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-llt analyse ?x ?y)
+ (&&host/analyse-jvm-llt analyse exo-type ?x ?y)
[["lux;FormS" ["lux;Cons" [["lux;Meta" [_ ["lux;SymbolS" [_ "_jvm_lgt"]]]] ["lux;Cons" [?y ["lux;Cons" [?x ["lux;Nil" _]]]]]]]]]
- (&&host/analyse-jvm-lgt analyse ?x ?y)
+ (&&host/analyse-jvm-lgt analyse exo-type ?x ?y)
[_]
(aba4 analyse eval! compile-module exo-type token)))
@@ -445,7 +446,7 @@
[_]
(aba3 analyse eval! compile-module exo-type token)))
-(let [unit (&/V "lux;Meta" (&/T (&/T "" -1 -1) (&/V "lux;TupleS" (|list))))]
+(let [unit (&/V "lux;Meta" (&/T (&/T "" -1 -1) (&/V "lux;TupleS" (&/|list))))]
(defn ^:private aba1 [analyse eval! compile-module exo-type token]
(matchv ::M/objects [token]
;; Standard special forms
@@ -479,7 +480,7 @@
(&&lux/analyse-variant analyse exo-type ?ident unit)
[["lux;SymbolS" [_ "_jvm_null"]]]
- (return (&/|list (&/T (&/V "jvm-null" nil) (&/V "lux;DataT" "null"))))
+ (&&host/analyse-jvm-null analyse exo-type)
[_]
(aba2 analyse eval! compile-module exo-type token)
@@ -505,7 +506,11 @@
[["lux;Left" msg]]
(fail* (add-loc meta msg))
- ))))
+ ))
+
+ ;; [_]
+ ;; (assert false (aget token 0))
+ ))
(defn ^:private just-analyse [analyse-ast eval! compile-module syntax]
(&type/with-var