aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lux/analyser.clj314
-rw-r--r--src/lux/analyser/case.clj8
-rw-r--r--src/lux/analyser/host.clj56
-rw-r--r--src/lux/analyser/lux.clj6
-rw-r--r--src/lux/analyser/record.clj4
-rw-r--r--src/lux/base.clj24
-rw-r--r--src/lux/lexer.clj18
-rw-r--r--src/lux/parser.clj26
-rw-r--r--src/lux/type.clj10
9 files changed, 229 insertions, 237 deletions
diff --git a/src/lux/analyser.clj b/src/lux/analyser.clj
index 7e5024c40..3ff214ee0 100644
--- a/src/lux/analyser.clj
+++ b/src/lux/analyser.clj
@@ -20,16 +20,16 @@
;; [Utils]
(defn ^:private parse-handler [[catch+ finally+] token]
(|case token
- (&/$Meta meta (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_catch"))
- (&/$Cons (&/$Meta _ (&/$TextS ?ex-class))
- (&/$Cons (&/$Meta _ (&/$SymbolS "" ?ex-arg))
- (&/$Cons ?catch-body
- (&/$Nil)))))))
+ [meta (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_catch")]
+ (&/$Cons [_ (&/$TextS ?ex-class)]
+ (&/$Cons [_ (&/$SymbolS "" ?ex-arg)]
+ (&/$Cons ?catch-body
+ (&/$Nil))))))]
(return (&/T (&/|++ catch+ (&/|list (&/T ?ex-class ?ex-arg ?catch-body))) finally+))
- (&/$Meta meta (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_finally"))
- (&/$Cons ?finally-body
- (&/$Nil)))))
+ [meta (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_finally")]
+ (&/$Cons ?finally-body
+ (&/$Nil))))]
(return (&/T catch+ (&/V &/$Some ?finally-body)))
_
@@ -37,7 +37,7 @@
(defn ^:private parse-tag [ast]
(|case ast
- (&/$Meta _ (&/$TagS "" name))
+ [_ (&/$TagS "" name)]
(return name)
_
@@ -46,44 +46,44 @@
(defn ^:private aba7 [analyse eval! compile-module compile-token exo-type token]
(|case token
;; Arrays
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_new-array"))
- (&/$Cons (&/$Meta _ (&/$SymbolS _ ?class))
- (&/$Cons (&/$Meta _ (&/$IntS ?length))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_new-array")]
+ (&/$Cons [_ (&/$SymbolS _ ?class)]
+ (&/$Cons [_ (&/$IntS ?length)]
(&/$Nil)))))
(&&host/analyse-jvm-new-array analyse ?class ?length)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_aastore"))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_aastore")]
(&/$Cons ?array
- (&/$Cons (&/$Meta _ (&/$IntS ?idx))
+ (&/$Cons [_ (&/$IntS ?idx)]
(&/$Cons ?elem
(&/$Nil))))))
(&&host/analyse-jvm-aastore analyse ?array ?idx ?elem)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_aaload"))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_aaload")]
(&/$Cons ?array
- (&/$Cons (&/$Meta _ (&/$IntS ?idx))
+ (&/$Cons [_ (&/$IntS ?idx)]
(&/$Nil)))))
(&&host/analyse-jvm-aaload analyse ?array ?idx)
;; Classes & interfaces
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_class"))
- (&/$Cons (&/$Meta _ (&/$TextS ?name))
- (&/$Cons (&/$Meta _ (&/$TextS ?super-class))
- (&/$Cons (&/$Meta _ (&/$TupleS ?interfaces))
- (&/$Cons (&/$Meta _ (&/$TupleS ?fields))
- (&/$Cons (&/$Meta _ (&/$TupleS ?methods))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_class")]
+ (&/$Cons [_ (&/$TextS ?name)]
+ (&/$Cons [_ (&/$TextS ?super-class)]
+ (&/$Cons [_ (&/$TupleS ?interfaces)]
+ (&/$Cons [_ (&/$TupleS ?fields)]
+ (&/$Cons [_ (&/$TupleS ?methods)]
(&/$Nil))))))))
(&&host/analyse-jvm-class analyse compile-token ?name ?super-class ?interfaces ?fields ?methods)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_interface"))
- (&/$Cons (&/$Meta _ (&/$TextS ?name))
- (&/$Cons (&/$Meta _ (&/$TupleS ?supers))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_interface")]
+ (&/$Cons [_ (&/$TextS ?name)]
+ (&/$Cons [_ (&/$TupleS ?supers)]
?methods))))
(&&host/analyse-jvm-interface analyse compile-token ?name ?supers ?methods)
;; Programs
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_program"))
- (&/$Cons (&/$Meta _ (&/$SymbolS "" ?args))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_program")]
+ (&/$Cons [_ (&/$SymbolS "" ?args)]
(&/$Cons ?body
(&/$Nil)))))
(&&host/analyse-jvm-program analyse compile-token ?args ?body)
@@ -94,86 +94,86 @@
(defn ^:private aba6 [analyse eval! compile-module compile-token exo-type token]
(|case token
;; Primitive conversions
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_d2f")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_d2f")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-d2f analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_d2i")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_d2i")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-d2i analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_d2l")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_d2l")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-d2l analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_f2d")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_f2d")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-f2d analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_f2i")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_f2i")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-f2i analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_f2l")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_f2l")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-f2l analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_i2b")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_i2b")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-i2b analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_i2c")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_i2c")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-i2c analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_i2d")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_i2d")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-i2d analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_i2f")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_i2f")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-i2f analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_i2l")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_i2l")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-i2l analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_i2s")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_i2s")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-i2s analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_l2d")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_l2d")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-l2d analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_l2f")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_l2f")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-l2f analyse exo-type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_l2i")) (&/$Cons ?value (&/$Nil))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_l2i")] (&/$Cons ?value (&/$Nil))))
(&&host/analyse-jvm-l2i analyse exo-type ?value)
;; Bitwise operators
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_iand")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_iand")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-iand analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_ior")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_ior")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-ior analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_ixor")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_ixor")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-ixor analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_ishl")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_ishl")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-ishl analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_ishr")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_ishr")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-ishr analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_iushr")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_iushr")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-iushr analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_land")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_land")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-land analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_lor")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_lor")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-lor analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_lxor")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_lxor")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-lxor analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_lshl")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_lshl")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-lshl analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_lshr")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_lshr")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-lshr analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_lushr")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_lushr")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-lushr analyse exo-type ?x ?y)
_
@@ -182,106 +182,106 @@
(defn ^:private aba5 [analyse eval! compile-module compile-token exo-type token]
(|case token
;; Objects
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_null?"))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_null?")]
(&/$Cons ?object
(&/$Nil))))
(&&host/analyse-jvm-null? analyse exo-type ?object)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_instanceof"))
- (&/$Cons (&/$Meta _ (&/$TextS ?class))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_instanceof")]
+ (&/$Cons [_ (&/$TextS ?class)]
(&/$Cons ?object
(&/$Nil)))))
(&&host/analyse-jvm-instanceof analyse exo-type ?class ?object)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_new"))
- (&/$Cons (&/$Meta _ (&/$TextS ?class))
- (&/$Cons (&/$Meta _ (&/$TupleS ?classes))
- (&/$Cons (&/$Meta _ (&/$TupleS ?args))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_new")]
+ (&/$Cons [_ (&/$TextS ?class)]
+ (&/$Cons [_ (&/$TupleS ?classes)]
+ (&/$Cons [_ (&/$TupleS ?args)]
(&/$Nil))))))
(&&host/analyse-jvm-new analyse exo-type ?class ?classes ?args)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_getstatic"))
- (&/$Cons (&/$Meta _ (&/$TextS ?class))
- (&/$Cons (&/$Meta _ (&/$TextS ?field))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_getstatic")]
+ (&/$Cons [_ (&/$TextS ?class)]
+ (&/$Cons [_ (&/$TextS ?field)]
(&/$Nil)))))
(&&host/analyse-jvm-getstatic analyse exo-type ?class ?field)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_getfield"))
- (&/$Cons (&/$Meta _ (&/$TextS ?class))
- (&/$Cons (&/$Meta _ (&/$TextS ?field))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_getfield")]
+ (&/$Cons [_ (&/$TextS ?class)]
+ (&/$Cons [_ (&/$TextS ?field)]
(&/$Cons ?object
(&/$Nil))))))
(&&host/analyse-jvm-getfield analyse exo-type ?class ?field ?object)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_putstatic"))
- (&/$Cons (&/$Meta _ (&/$TextS ?class))
- (&/$Cons (&/$Meta _ (&/$TextS ?field))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_putstatic")]
+ (&/$Cons [_ (&/$TextS ?class)]
+ (&/$Cons [_ (&/$TextS ?field)]
(&/$Cons ?value
(&/$Nil))))))
(&&host/analyse-jvm-putstatic analyse exo-type ?class ?field ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_putfield"))
- (&/$Cons (&/$Meta _ (&/$TextS ?class))
- (&/$Cons (&/$Meta _ (&/$TextS ?field))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_putfield")]
+ (&/$Cons [_ (&/$TextS ?class)]
+ (&/$Cons [_ (&/$TextS ?field)]
(&/$Cons ?object
(&/$Cons ?value
(&/$Nil)))))))
(&&host/analyse-jvm-putfield analyse exo-type ?class ?field ?object ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_invokestatic"))
- (&/$Cons (&/$Meta _ (&/$TextS ?class))
- (&/$Cons (&/$Meta _ (&/$TextS ?method))
- (&/$Cons (&/$Meta _ (&/$TupleS ?classes))
- (&/$Cons (&/$Meta _ (&/$TupleS ?args))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_invokestatic")]
+ (&/$Cons [_ (&/$TextS ?class)]
+ (&/$Cons [_ (&/$TextS ?method)]
+ (&/$Cons [_ (&/$TupleS ?classes)]
+ (&/$Cons [_ (&/$TupleS ?args)]
(&/$Nil)))))))
(&&host/analyse-jvm-invokestatic analyse exo-type ?class ?method ?classes ?args)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_invokevirtual"))
- (&/$Cons (&/$Meta _ (&/$TextS ?class))
- (&/$Cons (&/$Meta _ (&/$TextS ?method))
- (&/$Cons (&/$Meta _ (&/$TupleS ?classes))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_invokevirtual")]
+ (&/$Cons [_ (&/$TextS ?class)]
+ (&/$Cons [_ (&/$TextS ?method)]
+ (&/$Cons [_ (&/$TupleS ?classes)]
(&/$Cons ?object
- (&/$Cons (&/$Meta _ (&/$TupleS ?args))
+ (&/$Cons [_ (&/$TupleS ?args)]
(&/$Nil))))))))
(&&host/analyse-jvm-invokevirtual analyse exo-type ?class ?method ?classes ?object ?args)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_invokeinterface"))
- (&/$Cons (&/$Meta _ (&/$TextS ?class))
- (&/$Cons (&/$Meta _ (&/$TextS ?method))
- (&/$Cons (&/$Meta _ (&/$TupleS ?classes))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_invokeinterface")]
+ (&/$Cons [_ (&/$TextS ?class)]
+ (&/$Cons [_ (&/$TextS ?method)]
+ (&/$Cons [_ (&/$TupleS ?classes)]
(&/$Cons ?object
- (&/$Cons (&/$Meta _ (&/$TupleS ?args))
+ (&/$Cons [_ (&/$TupleS ?args)]
(&/$Nil))))))))
(&&host/analyse-jvm-invokeinterface analyse exo-type ?class ?method ?classes ?object ?args)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_invokespecial"))
- (&/$Cons (&/$Meta _ (&/$TextS ?class))
- (&/$Cons (&/$Meta _ (&/$TextS ?method))
- (&/$Cons (&/$Meta _ (&/$TupleS ?classes))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_invokespecial")]
+ (&/$Cons [_ (&/$TextS ?class)]
+ (&/$Cons [_ (&/$TextS ?method)]
+ (&/$Cons [_ (&/$TupleS ?classes)]
(&/$Cons ?object
- (&/$Cons (&/$Meta _ (&/$TupleS ?args))
+ (&/$Cons [_ (&/$TupleS ?args)]
(&/$Nil))))))))
(&&host/analyse-jvm-invokespecial analyse exo-type ?class ?method ?classes ?object ?args)
;; Exceptions
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_try"))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_try")]
(&/$Cons ?body
?handlers)))
(|do [catches+finally (&/fold% parse-handler (&/T (&/|list) (&/V &/$None nil)) ?handlers)]
(&&host/analyse-jvm-try analyse exo-type ?body catches+finally))
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_throw"))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_throw")]
(&/$Cons ?ex
(&/$Nil))))
(&&host/analyse-jvm-throw analyse exo-type ?ex)
;; Syncronization/monitos
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_monitorenter"))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_monitorenter")]
(&/$Cons ?monitor
(&/$Nil))))
(&&host/analyse-jvm-monitorenter analyse exo-type ?monitor)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_monitorexit"))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_monitorexit")]
(&/$Cons ?monitor
(&/$Nil))))
(&&host/analyse-jvm-monitorexit analyse exo-type ?monitor)
@@ -292,53 +292,53 @@
(defn ^:private aba4 [analyse eval! compile-module compile-token exo-type token]
(|case token
;; Float arithmetic
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_fadd")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_fadd")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-fadd analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_fsub")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_fsub")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-fsub analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_fmul")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_fmul")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-fmul analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_fdiv")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_fdiv")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-fdiv analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_frem")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_frem")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-frem analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_feq")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_feq")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-feq analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_flt")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_flt")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-flt analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_fgt")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_fgt")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-fgt analyse exo-type ?x ?y)
;; Double arithmetic
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_dadd")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_dadd")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-dadd analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_dsub")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_dsub")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-dsub analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_dmul")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_dmul")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-dmul analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_ddiv")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_ddiv")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-ddiv analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_drem")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_drem")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-drem analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_deq")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_deq")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-deq analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_dlt")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_dlt")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-dlt analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_dgt")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_dgt")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-dgt analyse exo-type ?x ?y)
_
@@ -348,63 +348,63 @@
(|case token
;; Host special forms
;; Characters
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_ceq")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_ceq")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-ceq analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_clt")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_clt")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-clt analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_cgt")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_cgt")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-cgt analyse exo-type ?x ?y)
;; Integer arithmetic
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_iadd")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_iadd")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-iadd analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_isub")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_isub")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-isub analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_imul")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_imul")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-imul analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_idiv")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_idiv")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-idiv analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_irem")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_irem")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-irem analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_ieq")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_ieq")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-ieq analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_ilt")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_ilt")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-ilt analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_igt")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_igt")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-igt analyse exo-type ?x ?y)
;; Long arithmetic
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_ladd")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_ladd")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-ladd analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_lsub")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_lsub")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-lsub analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_lmul")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_lmul")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-lmul analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_ldiv")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_ldiv")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-ldiv analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_lrem")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_lrem")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-lrem analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_leq")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_leq")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-leq analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_llt")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_llt")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-llt analyse exo-type ?x ?y)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_jvm_lgt")) (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_jvm_lgt")] (&/$Cons ?x (&/$Cons ?y (&/$Nil)))))
(&&host/analyse-jvm-lgt analyse exo-type ?x ?y)
_
@@ -415,60 +415,60 @@
(&/$SymbolS ?ident)
(&&lux/analyse-symbol analyse exo-type ?ident)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_lux_case"))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_lux_case")]
(&/$Cons ?value ?branches)))
(&&lux/analyse-case analyse exo-type ?value ?branches)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_lux_lambda"))
- (&/$Cons (&/$Meta _ (&/$SymbolS "" ?self))
- (&/$Cons (&/$Meta _ (&/$SymbolS "" ?arg))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_lux_lambda")]
+ (&/$Cons [_ (&/$SymbolS "" ?self)]
+ (&/$Cons [_ (&/$SymbolS "" ?arg)]
(&/$Cons ?body
(&/$Nil))))))
(&&lux/analyse-lambda analyse exo-type ?self ?arg ?body)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_lux_def"))
- (&/$Cons (&/$Meta _ (&/$SymbolS "" ?name))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_lux_def")]
+ (&/$Cons [_ (&/$SymbolS "" ?name)]
(&/$Cons ?value
(&/$Nil)))))
(&&lux/analyse-def analyse compile-token ?name ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_lux_declare-macro"))
- (&/$Cons (&/$Meta _ (&/$SymbolS "" ?name))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_lux_declare-macro")]
+ (&/$Cons [_ (&/$SymbolS "" ?name)]
(&/$Nil))))
(&&lux/analyse-declare-macro analyse compile-token ?name)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_lux_declare-tags"))
- (&/$Cons (&/$Meta _ (&/$TupleS tags))
- (&/$Cons (&/$Meta _ (&/$SymbolS "" type-name))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_lux_declare-tags")]
+ (&/$Cons [_ (&/$TupleS tags)]
+ (&/$Cons [_ (&/$SymbolS "" type-name)]
(&/$Nil)))))
(|do [tags* (&/map% parse-tag tags)]
(&&lux/analyse-declare-tags tags* type-name))
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_lux_import"))
- (&/$Cons (&/$Meta _ (&/$TextS ?path))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_lux_import")]
+ (&/$Cons [_ (&/$TextS ?path)]
(&/$Nil))))
(&&lux/analyse-import analyse compile-module compile-token ?path)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_lux_:"))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_lux_:")]
(&/$Cons ?type
(&/$Cons ?value
(&/$Nil)))))
(&&lux/analyse-check analyse eval! exo-type ?type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_lux_:!"))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_lux_:!")]
(&/$Cons ?type
(&/$Cons ?value
(&/$Nil)))))
(&&lux/analyse-coerce analyse eval! exo-type ?type ?value)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_lux_export"))
- (&/$Cons (&/$Meta _ (&/$SymbolS "" ?ident))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_lux_export")]
+ (&/$Cons [_ (&/$SymbolS "" ?ident)]
(&/$Nil))))
(&&lux/analyse-export analyse compile-token ?ident)
- (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS _ "_lux_alias"))
- (&/$Cons (&/$Meta _ (&/$TextS ?alias))
- (&/$Cons (&/$Meta _ (&/$TextS ?module))
+ (&/$FormS (&/$Cons [_ (&/$SymbolS _ "_lux_alias")]
+ (&/$Cons [_ (&/$TextS ?alias)]
+ (&/$Cons [_ (&/$TextS ?module)]
(&/$Nil)))))
(&&lux/analyse-alias analyse compile-token ?alias ?module)
@@ -525,7 +525,7 @@
(defn ^:private analyse-basic-ast [analyse eval! compile-module compile-token exo-type token]
;; (prn 'analyse-basic-ast (&/show-ast token))
(|case token
- (&/$Meta meta ?token)
+ [meta ?token]
(fn [state]
(|case (try ((aba1 analyse eval! compile-module compile-token exo-type ?token) state)
(catch Error e
@@ -559,13 +559,13 @@
(defn ^:private analyse-ast [eval! compile-module compile-token exo-type token]
;; (prn 'analyse-ast (&/show-ast token))
- (&/with-cursor (aget token 1 0)
+ (&/with-cursor (aget token 0)
(&/with-expected-type exo-type
(|case token
- (&/$Meta meta (&/$FormS (&/$Cons (&/$Meta _ (&/$IntS idx)) ?values)))
+ [meta (&/$FormS (&/$Cons [_ (&/$IntS idx)] ?values))]
(&&lux/analyse-variant (partial analyse-ast eval! compile-module compile-token) exo-type idx ?values)
- (&/$Meta meta (&/$FormS (&/$Cons (&/$Meta _ (&/$TagS ?ident)) ?values)))
+ [meta (&/$FormS (&/$Cons [_ (&/$TagS ?ident)] ?values))]
(|do [;; :let [_ (println 'analyse-ast/_0 (&/ident->text ?ident))]
[module tag-name] (&/normalize ?ident)
;; :let [_ (println 'analyse-ast/_1 (&/ident->text (&/T module tag-name)))]
@@ -574,7 +574,7 @@
]
(&&lux/analyse-variant (partial analyse-ast eval! compile-module compile-token) exo-type idx ?values))
- (&/$Meta meta (&/$FormS (&/$Cons ?fn ?args)))
+ [meta (&/$FormS (&/$Cons ?fn ?args))]
(fn [state]
(|case ((just-analyse (partial analyse-ast eval! compile-module compile-token) ?fn) state)
(&/$Right state* =fn)
diff --git a/src/lux/analyser/case.clj b/src/lux/analyser/case.clj
index 829b5b6d8..e86d55497 100644
--- a/src/lux/analyser/case.clj
+++ b/src/lux/analyser/case.clj
@@ -39,7 +39,7 @@
;; [Utils]
(def ^:private unit
- (&/V &/$Meta (&/T (&/T "" -1 -1) (&/V &/$TupleS (&/|list)))))
+ (&/T (&/T "" -1 -1) (&/V &/$TupleS (&/|list))))
(defn ^:private resolve-type [type]
(|case type
@@ -126,7 +126,7 @@
(adjust-type* (&/|list) type))
(defn ^:private analyse-pattern [value-type pattern kont]
- (|let [(&/$Meta _ pattern*) pattern]
+ (|let [[_ pattern*] pattern]
(|case pattern*
(&/$SymbolS "" name)
(|do [=kont (&env/with-local name value-type
@@ -221,7 +221,7 @@
]
(return (&/T (&/V $VariantTestAC (&/T idx (&/|length group) =test)) =kont)))
- (&/$FormS (&/$Cons (&/$Meta _ (&/$TagS ?ident))
+ (&/$FormS (&/$Cons [_ (&/$TagS ?ident)]
?values))
(|do [;; :let [_ (println "#10" (&/ident->text ?ident))]
[=module =name] (&&/resolved-ident ?ident)
@@ -237,7 +237,7 @@
0 (analyse-pattern case-type unit kont)
1 (analyse-pattern case-type (&/|head ?values) kont)
;; 1+
- (analyse-pattern case-type (&/V &/$Meta (&/T (&/T "" -1 -1) (&/V &/$TupleS ?values))) kont))
+ (analyse-pattern case-type (&/T (&/T "" -1 -1) (&/V &/$TupleS ?values)) kont))
;; :let [_ (println "#15")]
]
(return (&/T (&/V $VariantTestAC (&/T idx (&/|length group) =test)) =kont)))
diff --git a/src/lux/analyser/host.clj b/src/lux/analyser/host.clj
index 098dc89df..796b2d147 100644
--- a/src/lux/analyser/host.clj
+++ b/src/lux/analyser/host.clj
@@ -17,7 +17,7 @@
;; [Utils]
(defn ^:private extract-text [text]
(|case text
- (&/$Meta _ (&/$TextS ?text))
+ [_ (&/$TextS ?text)]
(return ?text)
_
@@ -221,28 +221,28 @@
(defn ^:private analyse-modifiers [modifiers]
(&/fold% (fn [so-far modif]
(|case modif
- (&/$Meta _ (&/$TextS "public"))
+ [_ (&/$TextS "public")]
(return (assoc so-far :visibility "public"))
- (&/$Meta _ (&/$TextS "private"))
+ [_ (&/$TextS "private")]
(return (assoc so-far :visibility "private"))
- (&/$Meta _ (&/$TextS "protected"))
+ [_ (&/$TextS "protected")]
(return (assoc so-far :visibility "protected"))
- (&/$Meta _ (&/$TextS "static"))
+ [_ (&/$TextS "static")]
(return (assoc so-far :static? true))
- (&/$Meta _ (&/$TextS "final"))
+ [_ (&/$TextS "final")]
(return (assoc so-far :final? true))
- (&/$Meta _ (&/$TextS "abstract"))
+ [_ (&/$TextS "abstract")]
(return (assoc so-far :abstract? true))
- (&/$Meta _ (&/$TextS "synchronized"))
+ [_ (&/$TextS "synchronized")]
(return (assoc so-far :concurrency "synchronized"))
- (&/$Meta _ (&/$TextS "volatile"))
+ [_ (&/$TextS "volatile")]
(return (assoc so-far :concurrency "volatile"))
_
@@ -272,10 +272,10 @@
(|do [=interfaces (&/map% extract-text ?interfaces)
=fields (&/map% (fn [?field]
(|case ?field
- (&/$Meta _ (&/$FormS (&/$Cons (&/$Meta _ (&/$TextS ?field-name))
- (&/$Cons (&/$Meta _ (&/$TextS ?field-type))
- (&/$Cons (&/$Meta _ (&/$TupleS ?field-modifiers))
- (&/$Nil))))))
+ [_ (&/$FormS (&/$Cons [_ (&/$TextS ?field-name)]
+ (&/$Cons [_ (&/$TextS ?field-type)]
+ (&/$Cons [_ (&/$TupleS ?field-modifiers)]
+ (&/$Nil)))))]
(|do [=field-modifiers (analyse-modifiers ?field-modifiers)]
(return {:name ?field-name
:modifiers =field-modifiers
@@ -286,17 +286,17 @@
?fields)
=methods (&/map% (fn [?method]
(|case ?method
- [?idx (&/$Meta _ (&/$FormS (&/$Cons (&/$Meta _ (&/$TextS ?method-name))
- (&/$Cons (&/$Meta _ (&/$TupleS ?method-inputs))
- (&/$Cons (&/$Meta _ (&/$TextS ?method-output))
- (&/$Cons (&/$Meta _ (&/$TupleS ?method-modifiers))
- (&/$Cons ?method-body
- (&/$Nil))))))))]
+ [?idx [_ (&/$FormS (&/$Cons [_ (&/$TextS ?method-name)]
+ (&/$Cons [_ (&/$TupleS ?method-inputs)]
+ (&/$Cons [_ (&/$TextS ?method-output)]
+ (&/$Cons [_ (&/$TupleS ?method-modifiers)]
+ (&/$Cons ?method-body
+ (&/$Nil)))))))]]
(|do [=method-inputs (&/map% (fn [minput]
(|case minput
- (&/$Meta _ (&/$FormS (&/$Cons (&/$Meta _ (&/$SymbolS "" ?input-name))
- (&/$Cons (&/$Meta _ (&/$TextS ?input-type))
- (&/$Nil)))))
+ [_ (&/$FormS (&/$Cons [_ (&/$SymbolS "" ?input-name)]
+ (&/$Cons [_ (&/$TextS ?input-type)]
+ (&/$Nil))))]
(return (&/T ?input-name ?input-type))
_
@@ -331,11 +331,11 @@
(|do [=supers (&/map% extract-text ?supers)
=methods (&/map% (fn [method]
(|case method
- (&/$Meta _ (&/$FormS (&/$Cons (&/$Meta _ (&/$TextS ?method-name))
- (&/$Cons (&/$Meta _ (&/$TupleS ?inputs))
- (&/$Cons (&/$Meta _ (&/$TextS ?output))
- (&/$Cons (&/$Meta _ (&/$TupleS ?modifiers))
- (&/$Nil)))))))
+ [_ (&/$FormS (&/$Cons [_ (&/$TextS ?method-name)]
+ (&/$Cons [_ (&/$TupleS ?inputs)]
+ (&/$Cons [_ (&/$TextS ?output)]
+ (&/$Cons [_ (&/$TupleS ?modifiers)]
+ (&/$Nil))))))]
(|do [=inputs (&/map% extract-text ?inputs)
=modifiers (analyse-modifiers ?modifiers)]
(return {:name ?method-name
@@ -361,7 +361,7 @@
=finally (|case [?finally]
(&/$None) (return (&/V &/$None nil))
(&/$Some ?finally*) (|do [=finally (analyse-1+ analyse ?finally*)]
- (return (&/V &/$Some =finally))))]
+ (return (&/V &/$Some =finally))))]
(return (&/|list (&/T (&/V &&/$jvm-try (&/T =body =catches =finally)) exo-type)))))
(defn analyse-jvm-throw [analyse exo-type ?ex]
diff --git a/src/lux/analyser/lux.clj b/src/lux/analyser/lux.clj
index c3f7622b8..375c82f27 100644
--- a/src/lux/analyser/lux.clj
+++ b/src/lux/analyser/lux.clj
@@ -26,11 +26,6 @@
=type (&type/clean $var ?type)]
(return (&/T ?item =type))))))
-(defn ^:private with-cursor [cursor form]
- (|case form
- (&/$Meta _ syntax)
- (&/V &/$Meta (&/T cursor syntax))))
-
;; [Exports]
(defn analyse-tuple [analyse exo-type ?elems]
(|do [exo-type* (&type/actual-type exo-type)]
@@ -275,7 +270,6 @@
(|do [;; :let [_ (prn 'MACRO-EXPAND|PRE (&/ident->text real-name))]
macro-expansion #(-> macro (.apply ?args) (.apply %))
;; :let [_ (prn 'MACRO-EXPAND|POST (&/ident->text real-name))]
- ;; :let [macro-expansion* (&/|map (partial with-cursor form-cursor) macro-expansion)]
;; :let [_ (when (or (= "defsig" (aget real-name 1))
;; ;; (= "type" (aget real-name 1))
;; ;; (= &&/$struct r-name)
diff --git a/src/lux/analyser/record.clj b/src/lux/analyser/record.clj
index c6bfb0053..8b70bbcb4 100644
--- a/src/lux/analyser/record.clj
+++ b/src/lux/analyser/record.clj
@@ -133,7 +133,7 @@
(&/$Nil)
(return (&/|list))
- (&/$Cons [(&/$Meta _ (&/$TagS tag1)) _] _)
+ (&/$Cons [[_ (&/$TagS tag1)] _] _)
(|do [[module name] (&&/resolved-ident tag1)]
(&&module/tag-group module name))
@@ -141,7 +141,7 @@
(fail "[Analyser Error] Wrong syntax for records. Odd elements must be tags."))
=pairs (&/map% (fn [kv]
(|case kv
- [(&/$Meta _ (&/$TagS k)) v]
+ [[_ (&/$TagS k)] v]
(|do [=k (&&/resolved-ident k)]
(return (&/T (&/ident->text =k) v)))
diff --git a/src/lux/base.clj b/src/lux/base.clj
index 5444c6c81..b99437a2c 100644
--- a/src/lux/base.clj
+++ b/src/lux/base.clj
@@ -23,10 +23,6 @@
"None"
"Some")
-;; Meta
-(deftags ""
- "Meta")
-
;; Either
(deftags ""
"Left"
@@ -768,40 +764,40 @@
(defn show-ast [ast]
;; (prn 'show-ast/GOOD (aget ast 0) (aget ast 1 1 0))
(|case ast
- ($Meta _ ($BoolS ?value))
+ [_ ($BoolS ?value)]
(pr-str ?value)
- ($Meta _ ($IntS ?value))
+ [_ ($IntS ?value)]
(pr-str ?value)
- ($Meta _ ($RealS ?value))
+ [_ ($RealS ?value)]
(pr-str ?value)
- ($Meta _ ($CharS ?value))
+ [_ ($CharS ?value)]
(pr-str ?value)
- ($Meta _ ($TextS ?value))
+ [_ ($TextS ?value)]
(str "\"" ?value "\"")
- ($Meta _ ($TagS ?module ?tag))
+ [_ ($TagS ?module ?tag)]
(str "#" ?module ";" ?tag)
- ($Meta _ ($SymbolS ?module ?name))
+ [_ ($SymbolS ?module ?name)]
(if (.equals "" ?module)
?name
(str ?module ";" ?name))
- ($Meta _ ($TupleS ?elems))
+ [_ ($TupleS ?elems)]
(str "[" (->> ?elems (|map show-ast) (|interpose " ") (fold str "")) "]")
- ($Meta _ ($RecordS ?elems))
+ [_ ($RecordS ?elems)]
(str "{" (->> ?elems
(|map (fn [elem]
(|let [[k v] elem]
(str (show-ast k) " " (show-ast v)))))
(|interpose " ") (fold str "")) "}")
- ($Meta _ ($FormS ?elems))
+ [_ ($FormS ?elems)]
(str "(" (->> ?elems (|map show-ast) (|interpose " ") (fold str "")) ")")
_
diff --git a/src/lux/lexer.clj b/src/lux/lexer.clj
index 6f5f2250d..4c7741769 100644
--- a/src/lux/lexer.clj
+++ b/src/lux/lexer.clj
@@ -55,12 +55,12 @@
;; [Lexers]
(def ^:private lex-white-space
(|do [[meta white-space] (&reader/read-regex #"^(\s+)")]
- (return (&/V &/$Meta (&/T meta (&/V $White_Space white-space))))))
+ (return (&/T meta (&/V $White_Space white-space)))))
(def ^:private lex-single-line-comment
(|do [_ (&reader/read-text "##")
[meta comment] (&reader/read-regex #"^(.*)$")]
- (return (&/V &/$Meta (&/T meta (&/V $Comment comment))))))
+ (return (&/T meta (&/V $Comment comment)))))
(defn ^:private lex-multi-line-comment [_]
(|do [_ (&reader/read-text "#(")
@@ -79,7 +79,7 @@
(return (&/T meta (str pre "#(" inner ")#" post))))))
;; :let [_ (prn 'lex-multi-line-comment (str comment ")#"))]
_ (&reader/read-text ")#")]
- (return (&/V &/$Meta (&/T meta (&/V $Comment comment))))))
+ (return (&/T meta (&/V $Comment comment)))))
(def ^:private lex-comment
(&/try-all% (&/|list lex-single-line-comment
@@ -88,7 +88,7 @@
(do-template [<name> <tag> <regex>]
(def <name>
(|do [[meta token] (&reader/read-regex <regex>)]
- (return (&/V &/$Meta (&/T meta (&/V <tag> token))))))
+ (return (&/T meta (&/V <tag> token)))))
^:private lex-bool $Bool #"^(true|false)"
^:private lex-int $Int #"^(-?0|-?[1-9][0-9]*)"
@@ -102,13 +102,13 @@
(|do [[_ char] (&reader/read-regex #"^(.)")]
(return char))))
_ (&reader/read-text "\"")]
- (return (&/V &/$Meta (&/T meta (&/V $Char token))))))
+ (return (&/T meta (&/V $Char token)))))
(def ^:private lex-text
(|do [[meta _] (&reader/read-text "\"")
token (lex-text-body nil)
_ (&reader/read-text "\"")]
- (return (&/V &/$Meta (&/T meta (&/V $Text token))))))
+ (return (&/T meta (&/V $Text token)))))
(def ^:private lex-ident
(&/try-all% (&/|list (|do [[meta token] (&reader/read-regex +ident-re+)]
@@ -134,17 +134,17 @@
(def ^:private lex-symbol
(|do [[meta ident] lex-ident]
- (return (&/V &/$Meta (&/T meta (&/V $Symbol ident))))))
+ (return (&/T meta (&/V $Symbol ident)))))
(def ^:private lex-tag
(|do [[meta _] (&reader/read-text "#")
[_ ident] lex-ident]
- (return (&/V &/$Meta (&/T meta (&/V $Tag ident))))))
+ (return (&/T meta (&/V $Tag ident)))))
(do-template [<name> <text> <tag>]
(def <name>
(|do [[meta _] (&reader/read-text <text>)]
- (return (&/V &/$Meta (&/T meta (&/V <tag> nil))))))
+ (return (&/T meta (&/V <tag> nil)))))
^:private lex-open-paren "(" $Open_Paren
^:private lex-close-paren ")" $Close_Paren
diff --git a/src/lux/parser.clj b/src/lux/parser.clj
index 9436eebc3..2609bf9a5 100644
--- a/src/lux/parser.clj
+++ b/src/lux/parser.clj
@@ -35,7 +35,7 @@
(|do [elems (&/repeat% parse)
token &lexer/lex]
(|case token
- (&/$Meta meta [<close-token> _])
+ [meta [<close-token> _]]
(return (&/V <tag> (&/fold &/|++ (&/|list) elems)))
_
@@ -50,7 +50,7 @@
token &lexer/lex
:let [elems (&/fold &/|++ (&/|list) elems*)]]
(|case token
- (&/$Meta meta ($Close_Brace _))
+ [meta ($Close_Brace _)]
(if (even? (&/|length elems))
(return (&/V &/$RecordS (&/|as-pairs elems)))
(fail (str "[Parser Error] Records must have an even number of elements.")))
@@ -61,7 +61,7 @@
;; [Interface]
(def parse
(|do [token &lexer/lex
- :let [(&/$Meta meta token*) token]]
+ :let [[meta token*] token]]
(|case token*
($White_Space _)
(return (&/|list))
@@ -70,37 +70,37 @@
(return (&/|list))
($Bool ?value)
- (return (&/|list (&/V &/$Meta (&/T meta (&/V &/$BoolS (Boolean/parseBoolean ?value))))))
+ (return (&/|list (&/T meta (&/V &/$BoolS (Boolean/parseBoolean ?value)))))
($Int ?value)
- (return (&/|list (&/V &/$Meta (&/T meta (&/V &/$IntS (Long/parseLong ?value))))))
+ (return (&/|list (&/T meta (&/V &/$IntS (Long/parseLong ?value)))))
($Real ?value)
- (return (&/|list (&/V &/$Meta (&/T meta (&/V &/$RealS (Double/parseDouble ?value))))))
+ (return (&/|list (&/T meta (&/V &/$RealS (Double/parseDouble ?value)))))
($Char ^String ?value)
- (return (&/|list (&/V &/$Meta (&/T meta (&/V &/$CharS (.charAt ?value 0))))))
+ (return (&/|list (&/T meta (&/V &/$CharS (.charAt ?value 0)))))
($Text ?value)
- (return (&/|list (&/V &/$Meta (&/T meta (&/V &/$TextS ?value)))))
+ (return (&/|list (&/T meta (&/V &/$TextS ?value))))
($Symbol ?ident)
- (return (&/|list (&/V &/$Meta (&/T meta (&/V &/$SymbolS ?ident)))))
+ (return (&/|list (&/T meta (&/V &/$SymbolS ?ident))))
($Tag ?ident)
- (return (&/|list (&/V &/$Meta (&/T meta (&/V &/$TagS ?ident)))))
+ (return (&/|list (&/T meta (&/V &/$TagS ?ident))))
($Open_Paren _)
(|do [syntax (parse-form parse)]
- (return (&/|list (&/V &/$Meta (&/T meta syntax)))))
+ (return (&/|list (&/T meta syntax))))
($Open_Bracket _)
(|do [syntax (parse-tuple parse)]
- (return (&/|list (&/V &/$Meta (&/T meta syntax)))))
+ (return (&/|list (&/T meta syntax))))
($Open_Brace _)
(|do [syntax (parse-record parse)]
- (return (&/|list (&/V &/$Meta (&/T meta syntax)))))
+ (return (&/|list (&/T meta syntax))))
_
(fail "[Parser Error] Unknown lexer token.")
diff --git a/src/lux/type.clj b/src/lux/type.clj
index 2b06553c3..36590ddd2 100644
--- a/src/lux/type.clj
+++ b/src/lux/type.clj
@@ -150,10 +150,8 @@
(Named$ (&/T "lux" "Meta")
(Univ$ empty-env
(Univ$ empty-env
- (Variant$ (&/|list
- ;; &/$Meta
- (Tuple$ (&/|list (Bound$ 3)
- (Bound$ 1)))))))))
+ (Tuple$ (&/|list (Bound$ 3)
+ (Bound$ 1)))))))
(def AST*
(Named$ (&/T "lux" "AST'")
@@ -520,6 +518,10 @@
(defn type= [x y]
(or (clojure.lang.Util/identical x y)
(let [output (|case [x y]
+ [(&/$NamedT [?xmodule ?xname] ?xtype) (&/$NamedT [?ymodule ?yname] ?ytype)]
+ (and (= ?xmodule ?ymodule)
+ (= ?xname ?yname))
+
[(&/$DataT xname) (&/$DataT yname)]
(.equals ^Object xname yname)