diff options
author | Eduardo Julian | 2018-07-31 22:23:07 -0400 |
---|---|---|
committer | Eduardo Julian | 2018-07-31 22:23:07 -0400 |
commit | 97ab1f076ac08992d6b64cd77bc0bef97b3fc50a (patch) | |
tree | 6ea01c3e9f5be6a1387c1a7621681d1642176329 /luxc | |
parent | 7e44ee8a2cfb14e35f6283a9eb8d6a2ddc8bd99a (diff) |
Now implementing array functionality in stdlib instead of the compiler.
Diffstat (limited to 'luxc')
-rw-r--r-- | luxc/src/lux/analyser/proc/common.clj | 60 | ||||
-rw-r--r-- | luxc/src/lux/compiler/jvm/proc/common.clj | 98 |
2 files changed, 0 insertions, 158 deletions
diff --git a/luxc/src/lux/analyser/proc/common.clj b/luxc/src/lux/analyser/proc/common.clj index df6fb0051..ca0447548 100644 --- a/luxc/src/lux/analyser/proc/common.clj +++ b/luxc/src/lux/analyser/proc/common.clj @@ -233,60 +233,6 @@ (return (&/|list (&&/|meta exo-type _cursor (&&/$proc (&/T ["io" "current-time"]) (&/|list) (&/|list))))))) -(defn ^:private analyse-array-new [analyse exo-type ?values] - (|do [:let [(&/$Cons length (&/$Nil)) ?values] - =length (&&/analyse-1 analyse &type/Nat length) - _ (&type/check exo-type (&/$UnivQ (&/|list) (&type/Array (&/$Parameter 1)))) - _cursor &/cursor] - (return (&/|list (&&/|meta exo-type _cursor - (&&/$proc (&/T ["array" "new"]) (&/|list =length) (&/|list))))))) - -(defn ^:private analyse-array-get [analyse exo-type ?values] - (&type/with-var - (fn [$var] - (|do [:let [(&/$Cons array (&/$Cons idx (&/$Nil))) ?values] - =array (&&/analyse-1 analyse (&type/Array $var) array) - =idx (&&/analyse-1 analyse &type/Nat idx) - _ (&type/check exo-type (&/$Apply $var &type/Maybe)) - _cursor &/cursor] - (return (&/|list (&&/|meta exo-type _cursor - (&&/$proc (&/T ["array" "get"]) (&/|list =array =idx) (&/|list))))))))) - -(defn ^:private analyse-array-put [analyse exo-type ?values] - (&type/with-var - (fn [$var] - (|do [:let [(&/$Cons array (&/$Cons idx (&/$Cons elem (&/$Nil)))) ?values] - :let [array-type (&type/Array $var)] - =array (&&/analyse-1 analyse array-type array) - =idx (&&/analyse-1 analyse &type/Nat idx) - =elem (&&/analyse-1 analyse $var elem) - _ (&type/check exo-type array-type) - _cursor &/cursor] - (return (&/|list (&&/|meta exo-type _cursor - (&&/$proc (&/T ["array" "put"]) (&/|list =array =idx =elem) (&/|list))))))))) - -(defn ^:private analyse-array-remove [analyse exo-type ?values] - (&type/with-var - (fn [$var] - (|do [:let [(&/$Cons array (&/$Cons idx (&/$Nil))) ?values] - :let [array-type (&type/Array $var)] - =array (&&/analyse-1 analyse array-type array) - =idx (&&/analyse-1 analyse &type/Nat idx) - _ (&type/check exo-type array-type) - _cursor &/cursor] - (return (&/|list (&&/|meta exo-type _cursor - (&&/$proc (&/T ["array" "remove"]) (&/|list =array =idx) (&/|list))))))))) - -(defn ^:private analyse-array-size [analyse exo-type ?values] - (&type/with-var - (fn [$var] - (|do [:let [(&/$Cons array (&/$Nil)) ?values] - =array (&&/analyse-1 analyse (&type/Array $var) array) - _ (&type/check exo-type &type/Nat) - _cursor &/cursor] - (return (&/|list (&&/|meta exo-type _cursor - (&&/$proc (&/T ["array" "size"]) (&/|list =array) (&/|list))))))))) - (defn ^:private analyse-box-new [analyse exo-type ?values] (&type/with-var (fn [$var] @@ -344,12 +290,6 @@ "lux text size" (analyse-text-size analyse exo-type ?values) "lux text char" (analyse-text-char analyse exo-type ?values) - "lux array new" (analyse-array-new analyse exo-type ?values) - "lux array get" (analyse-array-get analyse exo-type ?values) - "lux array put" (analyse-array-put analyse exo-type ?values) - "lux array remove" (analyse-array-remove analyse exo-type ?values) - "lux array size" (analyse-array-size analyse exo-type ?values) - "lux i64 and" (analyse-i64-and analyse exo-type ?values) "lux i64 or" (analyse-i64-or analyse exo-type ?values) "lux i64 xor" (analyse-i64-xor analyse exo-type ?values) diff --git a/luxc/src/lux/compiler/jvm/proc/common.clj b/luxc/src/lux/compiler/jvm/proc/common.clj index 6e89155bc..3f10bade1 100644 --- a/luxc/src/lux/compiler/jvm/proc/common.clj +++ b/luxc/src/lux/compiler/jvm/proc/common.clj @@ -22,96 +22,6 @@ AnnotationVisitor))) ;; [Resources] -(defn ^:private compile-array-new [compile ?values special-args] - (|do [:let [(&/$Cons ?length (&/$Nil)) ?values] - ^MethodVisitor *writer* &/get-writer - _ (compile ?length) - :let [_ (doto *writer* - &&/unwrap-long - (.visitInsn Opcodes/L2I))] - :let [_ (.visitTypeInsn *writer* Opcodes/ANEWARRAY "java/lang/Object")]] - (return nil))) - -(defn ^:private compile-array-get [compile ?values special-args] - (|do [:let [(&/$Cons ?array (&/$Cons ?idx (&/$Nil))) ?values - ;; (&/$Nil) special-args - ] - ^MethodVisitor *writer* &/get-writer - _ (compile ?array) - :let [_ (.visitTypeInsn *writer* Opcodes/CHECKCAST "[Ljava/lang/Object;")] - _ (compile ?idx) - :let [_ (doto *writer* - &&/unwrap-long - (.visitInsn Opcodes/L2I))] - :let [_ (.visitInsn *writer* Opcodes/AALOAD)] - :let [$is-null (new Label) - $end (new Label) - _ (doto *writer* - (.visitInsn Opcodes/DUP) - (.visitJumpInsn Opcodes/IFNULL $is-null) - (.visitLdcInsn (int 1)) - (.visitLdcInsn "") - (.visitInsn Opcodes/DUP2_X1) ;; I?2I? - (.visitInsn Opcodes/POP2) ;; I?2 - (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "sum_make" "(ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;") - (.visitJumpInsn Opcodes/GOTO $end) - (.visitLabel $is-null) - (.visitInsn Opcodes/POP) - (.visitLdcInsn (int 0)) - (.visitInsn Opcodes/ACONST_NULL) - (.visitLdcInsn &/unit-tag) - (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "sum_make" "(ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object;") - (.visitLabel $end))]] - (return nil))) - -(defn ^:private compile-array-put [compile ?values special-args] - (|do [:let [(&/$Cons ?array (&/$Cons ?idx (&/$Cons ?elem (&/$Nil)))) ?values - ;; (&/$Nil) special-args - ] - ^MethodVisitor *writer* &/get-writer - _ (compile ?array) - :let [_ (doto *writer* - (.visitTypeInsn Opcodes/CHECKCAST "[Ljava/lang/Object;") - (.visitInsn Opcodes/DUP))] - _ (compile ?idx) - :let [_ (doto *writer* - &&/unwrap-long - (.visitInsn Opcodes/L2I))] - _ (compile ?elem) - :let [_ (.visitInsn *writer* Opcodes/AASTORE)]] - (return nil))) - -(defn ^:private compile-array-remove [compile ?values special-args] - (|do [:let [(&/$Cons ?array (&/$Cons ?idx (&/$Nil))) ?values - ;; (&/$Nil) special-args - ] - ^MethodVisitor *writer* &/get-writer - _ (compile ?array) - :let [_ (doto *writer* - (.visitTypeInsn Opcodes/CHECKCAST "[Ljava/lang/Object;") - (.visitInsn Opcodes/DUP))] - _ (compile ?idx) - :let [_ (doto *writer* - &&/unwrap-long - (.visitInsn Opcodes/L2I))] - :let [_ (doto *writer* - (.visitInsn Opcodes/ACONST_NULL) - (.visitInsn Opcodes/AASTORE))]] - (return nil))) - -(defn ^:private compile-array-size [compile ?values special-args] - (|do [:let [(&/$Cons ?array (&/$Nil)) ?values - ;; (&/$Nil) special-args - ] - ^MethodVisitor *writer* &/get-writer - _ (compile ?array) - :let [_ (.visitTypeInsn *writer* Opcodes/CHECKCAST "[Ljava/lang/Object;")] - :let [_ (doto *writer* - (.visitInsn Opcodes/ARRAYLENGTH) - (.visitInsn Opcodes/I2L) - &&/wrap-long)]] - (return nil))) - (do-template [<name> <op>] (defn <name> [compile ?values special-args] (|do [:let [(&/$Cons ?input (&/$Cons ?mask (&/$Nil))) ?values] @@ -543,14 +453,6 @@ "+" (compile-i64-add compile ?values special-args) "-" (compile-i64-sub compile ?values special-args)) - "array" - (case proc - "new" (compile-array-new compile ?values special-args) - "get" (compile-array-get compile ?values special-args) - "put" (compile-array-put compile ?values special-args) - "remove" (compile-array-remove compile ?values special-args) - "size" (compile-array-size compile ?values special-args)) - "int" (case proc "*" (compile-int-mul compile ?values special-args) |