diff options
-rw-r--r-- | luxc/src/lux/analyser/proc/jvm.clj | 128 | ||||
-rw-r--r-- | luxc/src/lux/compiler/jvm/proc/host.clj | 118 | ||||
-rw-r--r-- | stdlib/source/lux.lux | 16 | ||||
-rw-r--r-- | stdlib/source/lux/control/applicative.lux | 20 | ||||
-rw-r--r-- | stdlib/source/lux/data/coll/array.lux | 57 | ||||
-rw-r--r-- | stdlib/source/lux/data/coll/dict.lux | 42 | ||||
-rw-r--r-- | stdlib/source/lux/data/coll/sequence.lux | 70 | ||||
-rw-r--r-- | stdlib/source/lux/host.jvm.lux | 94 | ||||
-rw-r--r-- | stdlib/source/lux/world/blob.jvm.lux | 32 | ||||
-rw-r--r-- | stdlib/test/test/lux/host.jvm.lux | 12 |
10 files changed, 259 insertions, 330 deletions
diff --git a/luxc/src/lux/analyser/proc/jvm.clj b/luxc/src/lux/analyser/proc/jvm.clj index 760d0cbfd..69d734177 100644 --- a/luxc/src/lux/analyser/proc/jvm.clj +++ b/luxc/src/lux/analyser/proc/jvm.clj @@ -391,35 +391,35 @@ _cursor &/cursor] (return (&/|list (&&/|meta output-type _cursor (&&/$proc (&/T ["jvm" <proc>]) (&/|list =value) (&/|list)))))))) - ^:private analyse-jvm-d2f "d2f" "java.lang.Double" "java.lang.Float" - ^:private analyse-jvm-d2i "d2i" "java.lang.Double" "java.lang.Integer" - ^:private analyse-jvm-d2l "d2l" "java.lang.Double" "java.lang.Long" - - ^:private analyse-jvm-f2d "f2d" "java.lang.Float" "java.lang.Double" - ^:private analyse-jvm-f2i "f2i" "java.lang.Float" "java.lang.Integer" - ^:private analyse-jvm-f2l "f2l" "java.lang.Float" "java.lang.Long" - - ^:private analyse-jvm-i2b "i2b" "java.lang.Integer" "java.lang.Byte" - ^:private analyse-jvm-i2c "i2c" "java.lang.Integer" "java.lang.Character" - ^:private analyse-jvm-i2d "i2d" "java.lang.Integer" "java.lang.Double" - ^:private analyse-jvm-i2f "i2f" "java.lang.Integer" "java.lang.Float" - ^:private analyse-jvm-i2l "i2l" "java.lang.Integer" "java.lang.Long" - ^:private analyse-jvm-i2s "i2s" "java.lang.Integer" "java.lang.Short" - - ^:private analyse-jvm-l2d "l2d" "java.lang.Long" "java.lang.Double" - ^:private analyse-jvm-l2f "l2f" "java.lang.Long" "java.lang.Float" - ^:private analyse-jvm-l2i "l2i" "java.lang.Long" "java.lang.Integer" - ^:private analyse-jvm-l2s "l2s" "java.lang.Long" "java.lang.Short" - ^:private analyse-jvm-l2b "l2b" "java.lang.Long" "java.lang.Byte" - - ^:private analyse-jvm-c2b "c2b" "java.lang.Character" "java.lang.Byte" - ^:private analyse-jvm-c2s "c2s" "java.lang.Character" "java.lang.Short" - ^:private analyse-jvm-c2i "c2i" "java.lang.Character" "java.lang.Integer" - ^:private analyse-jvm-c2l "c2l" "java.lang.Character" "java.lang.Long" - - ^:private analyse-jvm-s2l "s2l" "java.lang.Short" "java.lang.Long" - - ^:private analyse-jvm-b2l "b2l" "java.lang.Byte" "java.lang.Long" + ^:private analyse-jvm-double-to-float "double-to-float" "java.lang.Double" "java.lang.Float" + ^:private analyse-jvm-double-to-int "double-to-int" "java.lang.Double" "java.lang.Integer" + ^:private analyse-jvm-double-to-long "double-to-long" "java.lang.Double" "java.lang.Long" + + ^:private analyse-jvm-float-to-double "float-to-double" "java.lang.Float" "java.lang.Double" + ^:private analyse-jvm-float-to-int "float-to-int" "java.lang.Float" "java.lang.Integer" + ^:private analyse-jvm-float-to-long "float-to-long" "java.lang.Float" "java.lang.Long" + + ^:private analyse-jvm-int-to-byte "int-to-byte" "java.lang.Integer" "java.lang.Byte" + ^:private analyse-jvm-int-to-char "int-to-char" "java.lang.Integer" "java.lang.Character" + ^:private analyse-jvm-int-to-double "int-to-double" "java.lang.Integer" "java.lang.Double" + ^:private analyse-jvm-int-to-float "int-to-float" "java.lang.Integer" "java.lang.Float" + ^:private analyse-jvm-int-to-long "int-to-long" "java.lang.Integer" "java.lang.Long" + ^:private analyse-jvm-int-to-short "int-to-short" "java.lang.Integer" "java.lang.Short" + + ^:private analyse-jvm-long-to-double "long-to-double" "java.lang.Long" "java.lang.Double" + ^:private analyse-jvm-long-to-float "long-to-float" "java.lang.Long" "java.lang.Float" + ^:private analyse-jvm-long-to-int "long-to-int" "java.lang.Long" "java.lang.Integer" + ^:private analyse-jvm-long-to-short "long-to-short" "java.lang.Long" "java.lang.Short" + ^:private analyse-jvm-long-to-byte "long-to-byte" "java.lang.Long" "java.lang.Byte" + + ^:private analyse-jvm-char-to-byte "char-to-byte" "java.lang.Character" "java.lang.Byte" + ^:private analyse-jvm-char-to-short "char-to-short" "java.lang.Character" "java.lang.Short" + ^:private analyse-jvm-char-to-int "char-to-int" "java.lang.Character" "java.lang.Integer" + ^:private analyse-jvm-char-to-long "char-to-long" "java.lang.Character" "java.lang.Long" + + ^:private analyse-jvm-short-to-long "short-to-long" "java.lang.Short" "java.lang.Long" + + ^:private analyse-jvm-byte-to-long "byte-to-long" "java.lang.Byte" "java.lang.Long" ) (do-template [<name> <proc> <v1-class> <v2-class> <to-class>] @@ -602,7 +602,7 @@ (&&/$proc (&/T ["jvm" "arraylength"]) (&/|list =array) (&/|list)) ))))) -(defn ^:private analyse-jvm-null? [analyse exo-type ?values] +(defn ^:private analyse-jvm-object-null? [analyse exo-type ?values] (|do [:let [(&/$Cons object (&/$Nil)) ?values] =object (&&/analyse-1+ analyse object) _ (ensure-object (&&/expr-type* =object)) @@ -610,24 +610,24 @@ _ (&type/check exo-type output-type) _cursor &/cursor] (return (&/|list (&&/|meta exo-type _cursor - (&&/$proc (&/T ["jvm" "null?"]) (&/|list =object) (&/|list))))))) + (&&/$proc (&/T ["jvm" "object null?"]) (&/|list =object) (&/|list))))))) -(defn ^:private analyse-jvm-null [analyse exo-type ?values] +(defn ^:private analyse-jvm-object-null [analyse exo-type ?values] (|do [:let [(&/$Nil) ?values] :let [output-type (&/$Primitive &host-type/null-data-tag &/$Nil)] _ (&type/check exo-type output-type) _cursor &/cursor] (return (&/|list (&&/|meta exo-type _cursor - (&&/$proc (&/T ["jvm" "null"]) (&/|list) (&/|list))))))) + (&&/$proc (&/T ["jvm" "object null"]) (&/|list) (&/|list))))))) -(defn analyse-jvm-synchronized [analyse exo-type ?values] +(defn analyse-jvm-object-synchronized [analyse exo-type ?values] (|do [:let [(&/$Cons ?monitor (&/$Cons ?expr (&/$Nil))) ?values] =monitor (&&/analyse-1+ analyse ?monitor) _ (ensure-object (&&/expr-type* =monitor)) =expr (&&/analyse-1 analyse exo-type ?expr) _cursor &/cursor] (return (&/|list (&&/|meta exo-type _cursor - (&&/$proc (&/T ["jvm" "synchronized"]) (&/|list =monitor =expr) (&/|list))))))) + (&&/$proc (&/T ["jvm" "object synchronized"]) (&/|list =monitor =expr) (&/|list))))))) (defn ^:private analyse-jvm-throw [analyse exo-type ?values] (|do [:let [(&/$Cons ?ex (&/$Nil)) ?values] @@ -804,7 +804,7 @@ (return (&/|list (&&/|meta output-type _cursor (&&/$proc (&/T ["jvm" "instanceof"]) (&/|list =object) (&/|list class))))))) -(defn ^:private analyse-jvm-load-class [analyse exo-type ?values] +(defn ^:private analyse-jvm-object-class [analyse exo-type ?values] (|do [:let [(&/$Cons [_ (&/$Text _class-name)] (&/$Nil)) ?values] ^ClassLoader class-loader &/loader _ (try (do (.loadClass class-loader _class-name) @@ -815,7 +815,7 @@ _ (&type/check exo-type output-type) _cursor &/cursor] (return (&/|list (&&/|meta output-type _cursor - (&&/$proc (&/T ["jvm" "load-class"]) (&/|list) (&/|list _class-name output-type))))))) + (&&/$proc (&/T ["jvm" "object class"]) (&/|list) (&/|list _class-name output-type))))))) (defn ^:private analyse-jvm-interface [analyse compile-interface interface-decl supers =anns =methods] (|do [module &/get-module-name @@ -900,11 +900,11 @@ (defn analyse-host [analyse exo-type compilers proc ?values] (|let [[_ _ _ compile-class compile-interface] compilers] (try (case proc - "jvm synchronized" (analyse-jvm-synchronized analyse exo-type ?values) - "jvm load-class" (analyse-jvm-load-class analyse exo-type ?values) + "jvm object synchronized" (analyse-jvm-object-synchronized analyse exo-type ?values) + "jvm object class" (analyse-jvm-object-class analyse exo-type ?values) "jvm throw" (analyse-jvm-throw analyse exo-type ?values) - "jvm null?" (analyse-jvm-null? analyse exo-type ?values) - "jvm null" (analyse-jvm-null analyse exo-type ?values) + "jvm object null?" (analyse-jvm-object-null? analyse exo-type ?values) + "jvm object null" (analyse-jvm-object-null analyse exo-type ?values) "jvm anewarray" (analyse-jvm-anewarray analyse exo-type ?values) "jvm aaload" (analyse-jvm-aaload analyse exo-type ?values) "jvm aastore" (analyse-jvm-aastore analyse exo-type ?values) @@ -980,29 +980,29 @@ "jvm lshl" (analyse-jvm-lshl analyse exo-type ?values) "jvm lshr" (analyse-jvm-lshr analyse exo-type ?values) "jvm lushr" (analyse-jvm-lushr analyse exo-type ?values) - "jvm d2f" (analyse-jvm-d2f analyse exo-type ?values) - "jvm d2i" (analyse-jvm-d2i analyse exo-type ?values) - "jvm d2l" (analyse-jvm-d2l analyse exo-type ?values) - "jvm f2d" (analyse-jvm-f2d analyse exo-type ?values) - "jvm f2i" (analyse-jvm-f2i analyse exo-type ?values) - "jvm f2l" (analyse-jvm-f2l analyse exo-type ?values) - "jvm i2b" (analyse-jvm-i2b analyse exo-type ?values) - "jvm i2c" (analyse-jvm-i2c analyse exo-type ?values) - "jvm i2d" (analyse-jvm-i2d analyse exo-type ?values) - "jvm i2f" (analyse-jvm-i2f analyse exo-type ?values) - "jvm i2l" (analyse-jvm-i2l analyse exo-type ?values) - "jvm i2s" (analyse-jvm-i2s analyse exo-type ?values) - "jvm l2d" (analyse-jvm-l2d analyse exo-type ?values) - "jvm l2f" (analyse-jvm-l2f analyse exo-type ?values) - "jvm l2i" (analyse-jvm-l2i analyse exo-type ?values) - "jvm l2s" (analyse-jvm-l2s analyse exo-type ?values) - "jvm l2b" (analyse-jvm-l2b analyse exo-type ?values) - "jvm c2b" (analyse-jvm-c2b analyse exo-type ?values) - "jvm c2s" (analyse-jvm-c2s analyse exo-type ?values) - "jvm c2i" (analyse-jvm-c2i analyse exo-type ?values) - "jvm c2l" (analyse-jvm-c2l analyse exo-type ?values) - "jvm b2l" (analyse-jvm-b2l analyse exo-type ?values) - "jvm s2l" (analyse-jvm-s2l analyse exo-type ?values) + "jvm convert double-to-float" (analyse-jvm-double-to-float analyse exo-type ?values) + "jvm convert double-to-int" (analyse-jvm-double-to-int analyse exo-type ?values) + "jvm convert double-to-long" (analyse-jvm-double-to-long analyse exo-type ?values) + "jvm convert float-to-double" (analyse-jvm-float-to-double analyse exo-type ?values) + "jvm convert float-to-int" (analyse-jvm-float-to-int analyse exo-type ?values) + "jvm convert float-to-long" (analyse-jvm-float-to-long analyse exo-type ?values) + "jvm convert int-to-byte" (analyse-jvm-int-to-byte analyse exo-type ?values) + "jvm convert int-to-char" (analyse-jvm-int-to-char analyse exo-type ?values) + "jvm convert int-to-double" (analyse-jvm-int-to-double analyse exo-type ?values) + "jvm convert int-to-float" (analyse-jvm-int-to-float analyse exo-type ?values) + "jvm convert int-to-long" (analyse-jvm-int-to-long analyse exo-type ?values) + "jvm convert int-to-short" (analyse-jvm-int-to-short analyse exo-type ?values) + "jvm convert long-to-double" (analyse-jvm-long-to-double analyse exo-type ?values) + "jvm convert long-to-float" (analyse-jvm-long-to-float analyse exo-type ?values) + "jvm convert long-to-int" (analyse-jvm-long-to-int analyse exo-type ?values) + "jvm convert long-to-short" (analyse-jvm-long-to-short analyse exo-type ?values) + "jvm convert long-to-byte" (analyse-jvm-long-to-byte analyse exo-type ?values) + "jvm convert char-to-byte" (analyse-jvm-char-to-byte analyse exo-type ?values) + "jvm convert char-to-short" (analyse-jvm-char-to-short analyse exo-type ?values) + "jvm convert char-to-int" (analyse-jvm-char-to-int analyse exo-type ?values) + "jvm convert char-to-long" (analyse-jvm-char-to-long analyse exo-type ?values) + "jvm convert byte-to-long" (analyse-jvm-byte-to-long analyse exo-type ?values) + "jvm convert short-to-long" (analyse-jvm-short-to-long analyse exo-type ?values) ;; else (->> (&/fail-with-loc (str "[Analyser Error] Unknown host procedure: " ["jvm" proc])) (if-let [[_ _def-code] (re-find #"^jvm interface:(.*)$" proc)] diff --git a/luxc/src/lux/compiler/jvm/proc/host.clj b/luxc/src/lux/compiler/jvm/proc/host.clj index 3d68bda68..041e72819 100644 --- a/luxc/src/lux/compiler/jvm/proc/host.clj +++ b/luxc/src/lux/compiler/jvm/proc/host.clj @@ -518,33 +518,33 @@ <wrap>)]] (return nil))) - ^:private compile-jvm-d2f Opcodes/D2F &&/unwrap-double &&/wrap-float - ^:private compile-jvm-d2i Opcodes/D2I &&/unwrap-double &&/wrap-int - ^:private compile-jvm-d2l Opcodes/D2L &&/unwrap-double &&/wrap-long - - ^:private compile-jvm-f2d Opcodes/F2D &&/unwrap-float &&/wrap-double - ^:private compile-jvm-f2i Opcodes/F2I &&/unwrap-float &&/wrap-int - ^:private compile-jvm-f2l Opcodes/F2L &&/unwrap-float &&/wrap-long - - ^:private compile-jvm-i2b Opcodes/I2B &&/unwrap-int &&/wrap-byte - ^:private compile-jvm-i2c Opcodes/I2C &&/unwrap-int &&/wrap-char - ^:private compile-jvm-i2d Opcodes/I2D &&/unwrap-int &&/wrap-double - ^:private compile-jvm-i2f Opcodes/I2F &&/unwrap-int &&/wrap-float - ^:private compile-jvm-i2l Opcodes/I2L &&/unwrap-int &&/wrap-long - ^:private compile-jvm-i2s Opcodes/I2S &&/unwrap-int &&/wrap-short - - ^:private compile-jvm-l2d Opcodes/L2D &&/unwrap-long &&/wrap-double - ^:private compile-jvm-l2f Opcodes/L2F &&/unwrap-long &&/wrap-float - ^:private compile-jvm-l2i Opcodes/L2I &&/unwrap-long &&/wrap-int - - ^:private compile-jvm-c2b Opcodes/I2B &&/unwrap-char &&/wrap-byte - ^:private compile-jvm-c2s Opcodes/I2S &&/unwrap-char &&/wrap-short - ^:private compile-jvm-c2i Opcodes/NOP &&/unwrap-char &&/wrap-int - ^:private compile-jvm-c2l Opcodes/I2L &&/unwrap-char &&/wrap-long - - ^:private compile-jvm-s2l Opcodes/I2L &&/unwrap-short &&/wrap-long + ^:private compile-jvm-double-to-float Opcodes/D2F &&/unwrap-double &&/wrap-float + ^:private compile-jvm-double-to-int Opcodes/D2I &&/unwrap-double &&/wrap-int + ^:private compile-jvm-double-to-long Opcodes/D2L &&/unwrap-double &&/wrap-long + + ^:private compile-jvm-float-to-double Opcodes/F2D &&/unwrap-float &&/wrap-double + ^:private compile-jvm-float-to-int Opcodes/F2I &&/unwrap-float &&/wrap-int + ^:private compile-jvm-float-to-long Opcodes/F2L &&/unwrap-float &&/wrap-long + + ^:private compile-jvm-int-to-byte Opcodes/I2B &&/unwrap-int &&/wrap-byte + ^:private compile-jvm-int-to-char Opcodes/I2C &&/unwrap-int &&/wrap-char + ^:private compile-jvm-int-to-double Opcodes/I2D &&/unwrap-int &&/wrap-double + ^:private compile-jvm-int-to-float Opcodes/I2F &&/unwrap-int &&/wrap-float + ^:private compile-jvm-int-to-long Opcodes/I2L &&/unwrap-int &&/wrap-long + ^:private compile-jvm-int-to-short Opcodes/I2S &&/unwrap-int &&/wrap-short + + ^:private compile-jvm-long-to-double Opcodes/L2D &&/unwrap-long &&/wrap-double + ^:private compile-jvm-long-to-float Opcodes/L2F &&/unwrap-long &&/wrap-float + ^:private compile-jvm-long-to-int Opcodes/L2I &&/unwrap-long &&/wrap-int + + ^:private compile-jvm-char-to-byte Opcodes/I2B &&/unwrap-char &&/wrap-byte + ^:private compile-jvm-char-to-short Opcodes/I2S &&/unwrap-char &&/wrap-short + ^:private compile-jvm-char-to-int Opcodes/NOP &&/unwrap-char &&/wrap-int + ^:private compile-jvm-char-to-long Opcodes/I2L &&/unwrap-char &&/wrap-long + + ^:private compile-jvm-short-to-long Opcodes/I2L &&/unwrap-short &&/wrap-long - ^:private compile-jvm-b2l Opcodes/I2L &&/unwrap-byte &&/wrap-long + ^:private compile-jvm-byte-to-long Opcodes/I2L &&/unwrap-byte &&/wrap-long ) (do-template [<name> <op> <wrap>] @@ -559,8 +559,8 @@ <wrap>)]] (return nil))) - ^:private compile-jvm-l2s Opcodes/I2S &&/wrap-short - ^:private compile-jvm-l2b Opcodes/I2B &&/wrap-byte + ^:private compile-jvm-long-to-short Opcodes/I2S &&/wrap-short + ^:private compile-jvm-long-to-byte Opcodes/I2B &&/wrap-byte ) (do-template [<name> <op> <unwrap-left> <unwrap-right> <wrap>] @@ -814,14 +814,14 @@ &&/wrap-long)]] (return nil))) -(defn ^:private compile-jvm-null [compile ?values special-args] +(defn ^:private compile-jvm-object-null [compile ?values special-args] (|do [:let [;; (&/$Nil) ?values (&/$Nil) special-args] ^MethodVisitor *writer* &/get-writer :let [_ (.visitInsn *writer* Opcodes/ACONST_NULL)]] (return nil))) -(defn ^:private compile-jvm-null? [compile ?values special-args] +(defn ^:private compile-jvm-object-null? [compile ?values special-args] (|do [:let [(&/$Cons ?object (&/$Nil)) ?values ;; (&/$Nil) special-args ] @@ -838,7 +838,7 @@ (.visitLabel $end))]] (return nil))) -(defn compile-jvm-synchronized [compile ?values special-args] +(defn compile-jvm-object-synchronized [compile ?values special-args] (|do [:let [(&/$Cons ?monitor (&/$Cons ?expr (&/$Nil))) ?values ;; (&/$Nil) special-args ] @@ -971,7 +971,7 @@ (.visitMethodInsn Opcodes/INVOKESPECIAL class* "<init>" init-sig))]] (return nil))) -(defn ^:private compile-jvm-load-class [compile ?values special-args] +(defn ^:private compile-jvm-object-class [compile ?values special-args] (|do [:let [(&/$Cons _class-name (&/$Cons ?output-type (&/$Nil))) special-args] ^MethodVisitor *writer* &/get-writer :let [_ (doto *writer* @@ -993,8 +993,8 @@ (defn compile-proc [compile proc-name ?values special-args] (case proc-name - "synchronized" (compile-jvm-synchronized compile ?values special-args) - "load-class" (compile-jvm-load-class compile ?values special-args) + "object synchronized" (compile-jvm-object-synchronized compile ?values special-args) + "object class" (compile-jvm-object-class compile ?values special-args) "instanceof" (compile-jvm-instanceof compile ?values special-args) "new" (compile-jvm-new compile ?values special-args) "invokestatic" (compile-jvm-invokestatic compile ?values special-args) @@ -1006,8 +1006,8 @@ "putstatic" (compile-jvm-putstatic compile ?values special-args) "putfield" (compile-jvm-putfield compile ?values special-args) "throw" (compile-jvm-throw compile ?values special-args) - "null?" (compile-jvm-null? compile ?values special-args) - "null" (compile-jvm-null compile ?values special-args) + "object null?" (compile-jvm-object-null? compile ?values special-args) + "object null" (compile-jvm-object-null compile ?values special-args) "anewarray" (compile-jvm-anewarray compile ?values special-args) "aaload" (compile-jvm-aaload compile ?values special-args) "aastore" (compile-jvm-aastore compile ?values special-args) @@ -1083,28 +1083,28 @@ "lshl" (compile-jvm-lshl compile ?values special-args) "lshr" (compile-jvm-lshr compile ?values special-args) "lushr" (compile-jvm-lushr compile ?values special-args) - "d2f" (compile-jvm-d2f compile ?values special-args) - "d2i" (compile-jvm-d2i compile ?values special-args) - "d2l" (compile-jvm-d2l compile ?values special-args) - "f2d" (compile-jvm-f2d compile ?values special-args) - "f2i" (compile-jvm-f2i compile ?values special-args) - "f2l" (compile-jvm-f2l compile ?values special-args) - "i2b" (compile-jvm-i2b compile ?values special-args) - "i2c" (compile-jvm-i2c compile ?values special-args) - "i2d" (compile-jvm-i2d compile ?values special-args) - "i2f" (compile-jvm-i2f compile ?values special-args) - "i2l" (compile-jvm-i2l compile ?values special-args) - "i2s" (compile-jvm-i2s compile ?values special-args) - "l2d" (compile-jvm-l2d compile ?values special-args) - "l2f" (compile-jvm-l2f compile ?values special-args) - "l2i" (compile-jvm-l2i compile ?values special-args) - "l2s" (compile-jvm-l2s compile ?values special-args) - "l2b" (compile-jvm-l2b compile ?values special-args) - "c2b" (compile-jvm-c2b compile ?values special-args) - "c2s" (compile-jvm-c2s compile ?values special-args) - "c2i" (compile-jvm-c2i compile ?values special-args) - "c2l" (compile-jvm-c2l compile ?values special-args) - "s2l" (compile-jvm-s2l compile ?values special-args) - "b2l" (compile-jvm-b2l compile ?values special-args) + "double-to-float" (compile-jvm-double-to-float compile ?values special-args) + "double-to-int" (compile-jvm-double-to-int compile ?values special-args) + "double-to-long" (compile-jvm-double-to-long compile ?values special-args) + "float-to-double" (compile-jvm-float-to-double compile ?values special-args) + "float-to-int" (compile-jvm-float-to-int compile ?values special-args) + "float-to-long" (compile-jvm-float-to-long compile ?values special-args) + "int-to-byte" (compile-jvm-int-to-byte compile ?values special-args) + "int-to-char" (compile-jvm-int-to-char compile ?values special-args) + "int-to-double" (compile-jvm-int-to-double compile ?values special-args) + "int-to-float" (compile-jvm-int-to-float compile ?values special-args) + "int-to-long" (compile-jvm-int-to-long compile ?values special-args) + "int-to-short" (compile-jvm-int-to-short compile ?values special-args) + "long-to-double" (compile-jvm-long-to-double compile ?values special-args) + "long-to-float" (compile-jvm-long-to-float compile ?values special-args) + "long-to-int" (compile-jvm-long-to-int compile ?values special-args) + "long-to-short" (compile-jvm-long-to-short compile ?values special-args) + "long-to-byte" (compile-jvm-long-to-byte compile ?values special-args) + "char-to-byte" (compile-jvm-char-to-byte compile ?values special-args) + "char-to-short" (compile-jvm-char-to-short compile ?values special-args) + "char-to-int" (compile-jvm-char-to-int compile ?values special-args) + "char-to-long" (compile-jvm-char-to-long compile ?values special-args) + "short-to-long" (compile-jvm-short-to-long compile ?values special-args) + "byte-to-long" (compile-jvm-byte-to-long compile ?values special-args) ;; else (&/fail-with-loc (str "[Compiler Error] Unknown host procedure: " ["jvm" proc-name])))) diff --git a/stdlib/source/lux.lux b/stdlib/source/lux.lux index 99cefa854..cf5707996 100644 --- a/stdlib/source/lux.lux +++ b/stdlib/source/lux.lux @@ -593,14 +593,14 @@ default-def-meta-exported))) ## (type: Module -## {#module-hash Nat -## #module-aliases (List [Text Text]) -## #definitions (List [Text Definition]) -## #imports (List Text) -## #tags (List [Text [Nat (List Ident) Bool Type]]) -## #types (List [Text [(List Ident) Bool Type]]) -## #module-anns (Maybe Code) -## #module-state Module-State}) +## {#module-hash Nat +## #module-aliases (List [Text Text]) +## #definitions (List [Text Definition]) +## #imports (List Text) +## #tags (List [Text [Nat (List Ident) Bool Type]]) +## #types (List [Text [(List Ident) Bool Type]]) +## #module-annotations (Maybe Code) +## #module-state Module-State}) ("lux def" Module (#Named ["lux" "Module"] (#Product ## "lux.module-hash" diff --git a/stdlib/source/lux/control/applicative.lux b/stdlib/source/lux/control/applicative.lux index a2326cd84..54cef5c45 100644 --- a/stdlib/source/lux/control/applicative.lux +++ b/stdlib/source/lux/control/applicative.lux @@ -22,14 +22,14 @@ (def: wrap (|>> (:: Applicative<G> wrap) (:: Applicative<F> wrap))) (def: (apply fgf fgx) - ## (let [fgf' (:: Applicative<F> apply - ## (:: Applicative<F> wrap (:: Applicative<G> apply)) - ## fgf)] - ## (:: Applicative<F> apply fgf' fgx)) - (let [applyF (:: Applicative<F> apply) - applyG (:: Applicative<G> apply)] - ($_ applyF - (:: Applicative<F> wrap applyG) - fgf - fgx)) + (let [fgf' (:: Applicative<F> apply + (:: Applicative<F> wrap (:: Applicative<G> apply)) + fgf)] + (:: Applicative<F> apply fgf' fgx)) + ## (let [applyF (:: Applicative<F> apply) + ## applyG (:: Applicative<G> apply)] + ## ($_ applyF + ## (:: Applicative<F> wrap applyG) + ## fgf + ## fgx)) )) diff --git a/stdlib/source/lux/data/coll/array.lux b/stdlib/source/lux/data/coll/array.lux index b45cab136..0e4afb4a5 100644 --- a/stdlib/source/lux/data/coll/array.lux +++ b/stdlib/source/lux/data/coll/array.lux @@ -67,30 +67,17 @@ (def: #export (filter p xs) (All [a] (-> (-> a Bool) (Array a) (Array a))) - (list/fold (: (-> Nat (Array ($ +0)) (Array ($ +0))) - (function [idx xs'] - (case (read idx xs) - #.None - xs' - - (#.Some x) - (if (p x) - xs' - (delete idx xs'))))) + (list/fold (function [idx xs'] + (case (read idx xs) + #.None + xs' + + (#.Some x) + (if (p x) + xs' + (delete idx xs')))) xs - (list.indices (size xs))) - ## (list/fold (function [idx xs'] - ## (case (read idx xs) - ## #.None - ## xs' - - ## (#.Some x) - ## (if (p x) - ## xs' - ## (delete idx xs')))) - ## xs - ## (list.indices (size xs))) - ) + (list.indices (size xs)))) (def: #export (find p xs) (All [a] @@ -198,25 +185,15 @@ (let [arr-size (size ma)] (if (n/= +0 arr-size) (new arr-size) - (list/fold (: (-> Nat (Array ($ +1)) (Array ($ +1))) - (function [idx mb] - (case (read idx ma) - #.None - mb - - (#.Some x) - (write idx (f x) mb)))) + (list/fold (function [idx mb] + (case (read idx ma) + #.None + mb + + (#.Some x) + (write idx (f x) mb))) (new arr-size) (list.n/range +0 (n/dec arr-size))) - ## (list/fold (function [idx mb] - ## (case (read idx ma) - ## #.None - ## mb - - ## (#.Some x) - ## (write idx (f x) mb))) - ## (new arr-size) - ## (list.n/range +0 (n/dec arr-size))) )))) (struct: #export _ (Fold Array) diff --git a/stdlib/source/lux/data/coll/dict.lux b/stdlib/source/lux/data/coll/dict.lux index 5b61830d5..e00cbb17f 100644 --- a/stdlib/source/lux/data/coll/dict.lux +++ b/stdlib/source/lux/data/coll/dict.lux @@ -120,9 +120,7 @@ (def: (insert! idx value old-array) (All [a] (-> Index a (Array a) (Array a))) (let [old-size (array.size old-array)] - (|> ## (array.new (n/inc old-size)) - (: (Array ($ +0)) - (array.new (n/inc old-size))) + (|> (array.new (n/inc old-size)) (array.copy idx +0 old-array +0) (array.write idx value) (array.copy (n/- idx old-size) idx old-array (n/inc idx))))) @@ -234,10 +232,7 @@ (array.write insertion-idx (#.Left sub-node) base)]]) ))) [+0 [clean-bitmap - ## (array.new (n/dec h-size)) - (: (Base ($ +0) ($ +1)) - (array.new (n/dec h-size))) - ]] + (array.new (n/dec h-size))]] (list.indices (array.size h-array))))) ## When #Base nodes grow too large, they're promoted to #Hierarchy to @@ -267,10 +262,7 @@ (undefined))] default)) [+0 - ## (array.new hierarchy-nodes-size) - (: (Array (Node ($ +0) ($ +1))) - (array.new hierarchy-nodes-size)) - ] + (array.new hierarchy-nodes-size)] hierarchy-indices))) ## All empty nodes look the same (a #Base node with clean bitmap is @@ -292,20 +284,12 @@ ## a sub-node. If impossible, I introduced a new singleton sub-node. (#Hierarchy _size hierarchy) (let [idx (level-index level hash) - ## [_size' sub-node] (case (array.read idx hierarchy) - ## (#.Some sub-node) - ## [_size sub-node] - - ## _ - ## [(n/inc _size) empty]) - [_size' sub-node] (: [Nat (Node ($ +0) ($ +1))] - (case (array.read idx hierarchy) - (#.Some sub-node) - [_size sub-node] - - _ - [(n/inc _size) empty])) - ] + [_size' sub-node] (case (array.read idx hierarchy) + (#.Some sub-node) + [_size sub-node] + + _ + [(n/inc _size) empty])] (#Hierarchy _size' (update! idx (put' (level-up level) hash key val Hash<k> sub-node) hierarchy))) @@ -339,9 +323,7 @@ ## the same, a new ## #Collisions node ## is added. - (#Collisions hash (|> ## (array.new +2) - (: (Array [($ +0) ($ +1)]) - (array.new +2)) + (#Collisions hash (|> (array.new +2) (array.write +0 [key' val']) (array.write +1 [key val]))) ## Otherwise, I can @@ -386,9 +368,7 @@ ## If the hashes are not equal, I create a new #Base node that ## contains the old #Collisions node, plus the new KV-pair. (|> (#Base (bit-position level _hash) - (|> ## (array.new +1) - (: (Base ($ +0) ($ +1)) - (array.new +1)) + (|> (array.new +1) (array.write +0 (#.Left node)))) (put' level hash key val Hash<k>))) )) diff --git a/stdlib/source/lux/data/coll/sequence.lux b/stdlib/source/lux/data/coll/sequence.lux index bc9787adf..b65ea1252 100644 --- a/stdlib/source/lux/data/coll/sequence.lux +++ b/stdlib/source/lux/data/coll/sequence.lux @@ -74,17 +74,13 @@ (All [a] (-> Level (Base a) (Node a))) (if (n/= +0 level) (#Base tail) - (|> ## (new-hierarchy []) - (: (Hierarchy ($ +0)) - (new-hierarchy [])) + (|> (new-hierarchy []) (array.write +0 (new-path (level-down level) tail)) #Hierarchy))) (def: (new-tail singleton) (All [a] (-> a (Base a))) - (|> ## (array.new +1) - (: (Base ($ +0)) - (array.new +1)) + (|> (array.new +1) (array.write +0 singleton))) (def: (push-tail size level tail parent) @@ -112,9 +108,9 @@ (def: (expand-tail val tail) (All [a] (-> a (Base a) (Base a))) (let [tail-size (array.size tail)] - (|> ## (array.new (n/inc tail-size)) - (: (Base ($ +0)) - (array.new (n/inc tail-size))) + (|> (array.new (n/inc tail-size)) + ## (: (Base ($ +0)) + ## (array.new (n/inc tail-size))) (array.copy tail-size +0 tail +0) (array.write tail-size val) ))) @@ -300,43 +296,21 @@ (maybe.assume (do maybe.Monad<Maybe> [new-tail (base-for (n/- +2 vec-size) vec) - #let [## [level' root'] (let [init-level (get@ #level vec)] - ## (loop [level init-level - ## root (maybe.default (new-hierarchy []) - ## (pop-tail vec-size init-level (get@ #root vec))) - ## ## root (: (Hierarchy ($ +0)) - ## ## (maybe.default (new-hierarchy []) - ## ## (pop-tail vec-size init-level (get@ #root vec)))) - ## ] - ## (if (n/> branching-exponent level) - ## (case [(array.read +1 root) (array.read +0 root)] - ## [#.None (#.Some (#Hierarchy sub-node))] - ## (recur (level-down level) sub-node) - - ## ## [#.None (#.Some (#Base _))] - ## ## (undefined) - - ## _ - ## [level root]) - ## [level root]))) - [level' root'] (: [Level (Hierarchy ($ +0))] - (let [init-level (get@ #level vec)] - (loop [level init-level - root (: (Hierarchy ($ +0)) - (maybe.default (new-hierarchy []) - (pop-tail vec-size init-level (get@ #root vec))))] - (if (n/> branching-exponent level) - (case [(array.read +1 root) (array.read +0 root)] - [#.None (#.Some (#Hierarchy sub-node))] - (recur (level-down level) sub-node) - - [#.None (#.Some (#Base _))] - (undefined) - - _ - [level root]) - [level root])))) - ]] + #let [[level' root'] (let [init-level (get@ #level vec)] + (loop [level init-level + root (maybe.default (new-hierarchy []) + (pop-tail vec-size init-level (get@ #root vec)))] + (if (n/> branching-exponent level) + (case [(array.read +1 root) (array.read +0 root)] + [#.None (#.Some (#Hierarchy sub-node))] + (recur (level-down level) sub-node) + + ## [#.None (#.Some (#Base _))] + ## (undefined) + + _ + [level root]) + [level root])))]] (wrap (|> vec (update@ #size n/dec) (set@ #level level') @@ -352,9 +326,7 @@ (def: #export (from-list list) (All [a] (-> (List a) (Sequence a))) (list/fold add - ## empty - (: (Sequence ($ +0)) - empty) + empty list)) (def: #export (member? a/Eq vec val) diff --git a/stdlib/source/lux/host.jvm.lux b/stdlib/source/lux/host.jvm.lux index ba556458a..954e55416 100644 --- a/stdlib/source/lux/host.jvm.lux +++ b/stdlib/source/lux/host.jvm.lux @@ -28,35 +28,35 @@ (-> (primitive <from>) (primitive <to>)) (<op> value))] - [b2l "jvm b2l" "java.lang.Byte" "java.lang.Long"] + [byte-to-long "jvm convert byte-to-long" "java.lang.Byte" "java.lang.Long"] - [s2l "jvm s2l" "java.lang.Short" "java.lang.Long"] + [short-to-long "jvm convert short-to-long" "java.lang.Short" "java.lang.Long"] - [d2i "jvm d2i" "java.lang.Double" "java.lang.Integer"] - [d2l "jvm d2l" "java.lang.Double" "java.lang.Long"] - [d2f "jvm d2f" "java.lang.Double" "java.lang.Float"] + [double-to-int "jvm convert double-to-int" "java.lang.Double" "java.lang.Integer"] + [double-to-long "jvm convert double-to-long" "java.lang.Double" "java.lang.Long"] + [double-to-float "jvm convert double-to-float" "java.lang.Double" "java.lang.Float"] - [f2i "jvm f2i" "java.lang.Float" "java.lang.Integer"] - [f2l "jvm f2l" "java.lang.Float" "java.lang.Long"] - [f2d "jvm f2d" "java.lang.Float" "java.lang.Double"] + [float-to-int "jvm convert float-to-int" "java.lang.Float" "java.lang.Integer"] + [float-to-long "jvm convert float-to-long" "java.lang.Float" "java.lang.Long"] + [float-to-double "jvm convert float-to-double" "java.lang.Float" "java.lang.Double"] - [i2b "jvm i2b" "java.lang.Integer" "java.lang.Byte"] - [i2s "jvm i2s" "java.lang.Integer" "java.lang.Short"] - [i2l "jvm i2l" "java.lang.Integer" "java.lang.Long"] - [i2f "jvm i2f" "java.lang.Integer" "java.lang.Float"] - [i2d "jvm i2d" "java.lang.Integer" "java.lang.Double"] - [i2c "jvm i2c" "java.lang.Integer" "java.lang.Character"] - - [l2b "jvm l2b" "java.lang.Long" "java.lang.Byte"] - [l2s "jvm l2s" "java.lang.Long" "java.lang.Short"] - [l2i "jvm l2i" "java.lang.Long" "java.lang.Integer"] - [l2f "jvm l2f" "java.lang.Long" "java.lang.Float"] - [l2d "jvm l2d" "java.lang.Long" "java.lang.Double"] - - [c2b "jvm c2b" "java.lang.Character" "java.lang.Byte"] - [c2s "jvm c2s" "java.lang.Character" "java.lang.Short"] - [c2i "jvm c2i" "java.lang.Character" "java.lang.Integer"] - [c2l "jvm c2l" "java.lang.Character" "java.lang.Long"] + [int-to-byte "jvm convert int-to-byte" "java.lang.Integer" "java.lang.Byte"] + [int-to-short "jvm convert int-to-short" "java.lang.Integer" "java.lang.Short"] + [int-to-long "jvm convert int-to-long" "java.lang.Integer" "java.lang.Long"] + [int-to-float "jvm convert int-to-float" "java.lang.Integer" "java.lang.Float"] + [int-to-double "jvm convert int-to-double" "java.lang.Integer" "java.lang.Double"] + [int-to-char "jvm convert int-to-char" "java.lang.Integer" "java.lang.Character"] + + [long-to-byte "jvm convert long-to-byte" "java.lang.Long" "java.lang.Byte"] + [long-to-short "jvm convert long-to-short" "java.lang.Long" "java.lang.Short"] + [long-to-int "jvm convert long-to-int" "java.lang.Long" "java.lang.Integer"] + [long-to-float "jvm convert long-to-float" "java.lang.Long" "java.lang.Float"] + [long-to-double "jvm convert long-to-double" "java.lang.Long" "java.lang.Double"] + + [char-to-byte "jvm convert char-to-byte" "java.lang.Character" "java.lang.Byte"] + [char-to-short "jvm convert char-to-short" "java.lang.Character" "java.lang.Short"] + [char-to-int "jvm convert char-to-int" "java.lang.Character" "java.lang.Integer"] + [char-to-long "jvm convert char-to-long" "java.lang.Character" "java.lang.Long"] ) ## [Utils] @@ -1380,7 +1380,7 @@ (syntax: #export (null) {#.doc (doc "Null object reference." (null))} - (wrap (list (` ("jvm null"))))) + (wrap (list (` ("jvm object null"))))) (def: #export (null? obj) {#.doc (doc "Test for null object reference." @@ -1391,7 +1391,7 @@ "=>" false)} (-> (primitive "java.lang.Object") Bool) - ("jvm null?" obj)) + ("jvm object null?" obj)) (syntax: #export (??? expr) {#.doc (doc "Takes a (potentially null) ObjectType reference and creates a (Maybe ObjectType) for it." @@ -1403,7 +1403,7 @@ (#.Some "YOLO"))} (with-gensyms [g!temp] (wrap (list (` (let [(~ g!temp) (~ expr)] - (if ("jvm null?" (~ g!temp)) + (if ("jvm object null?" (~ g!temp)) #.None (#.Some (~ g!temp))))))))) @@ -1422,7 +1422,7 @@ (~ g!value) #.None - ("jvm null")})))))) + ("jvm object null")})))))) (syntax: #export (try expr) {#.doc (doc "Covers the expression in a try-catch block." @@ -1456,7 +1456,7 @@ (exec (do-something ___) (do-something-else ___) (finish-the-computation ___))))} - (wrap (list (` ("jvm synchronized" (~ lock) (~ body)))))) + (wrap (list (` ("jvm object synchronized" (~ lock) (~ body)))))) (syntax: #export (do-to obj [methods (p.some partial-call^)]) {#.doc (doc "Call a variety of methods on an object. Then, return the object." @@ -1595,16 +1595,16 @@ #AutoPrM (case output-type (#GenericClass ["byte" _]) - (` (b2l (~ body))) + (` (byte-to-long (~ body))) (#GenericClass ["short" _]) - (` (s2l (~ body))) + (` (short-to-long (~ body))) (#GenericClass ["int" _]) - (` (i2l (~ body))) + (` (int-to-long (~ body))) (#GenericClass ["float" _]) - (` (f2d (~ body))) + (` (float-to-double (~ body))) _ body))) @@ -1621,10 +1621,10 @@ (def: (auto-conv [class var]) (-> [Text Code] (List Code)) (case class - "byte" (list var (` (l2b (~ var)))) - "short" (list var (` (l2s (~ var)))) - "int" (list var (` (l2i (~ var)))) - "float" (list var (` (d2f (~ var)))) + "byte" (list var (` (long-to-byte (~ var)))) + "short" (list var (` (long-to-short (~ var)))) + "int" (list var (` (long-to-int (~ var)))) + "float" (list var (` (double-to-float (~ var)))) _ (list))) (def: (with-mode-inputs mode inputs body) @@ -1647,10 +1647,10 @@ #AutoPrM (case (simple-class$ (list) class) - "byte" (` (b2l (~ output))) - "short" (` (s2l (~ output))) - "int" (` (i2l (~ output))) - "float" (` (f2d (~ output))) + "byte" (` (byte-to-long (~ output))) + "short" (` (short-to-long (~ output))) + "int" (` (int-to-long (~ output))) + "float" (` (float-to-double (~ output))) _ output))) (def: (with-mode-field-set mode class g!input) @@ -1661,10 +1661,10 @@ #AutoPrM (case (simple-class$ (list) class) - "byte" (` (l2b (~ g!input))) - "short" (` (l2s (~ g!input))) - "int" (` (l2i (~ g!input))) - "float" (` (d2f (~ g!input))) + "byte" (` (long-to-byte (~ g!input))) + "short" (` (long-to-short (~ g!input))) + "int" (` (long-to-int (~ g!input))) + "float" (` (double-to-float (~ g!input))) _ g!input))) (def: (member-def-interop type-params kind class [arg-function-inputs arg-method-inputs arg-classes arg-types] member method-prefix) @@ -2042,7 +2042,7 @@ [type (generic-type^ imports (list))]) {#.doc (doc "Loads the class as a java.lang.Class object." (class-for java/lang/String))} - (wrap (list (` ("jvm load-class" (~ (code.text (simple-class$ (list) type)))))))) + (wrap (list (` ("jvm object class" (~ (code.text (simple-class$ (list) type)))))))) (def: get-compiler (Meta Compiler) diff --git a/stdlib/source/lux/world/blob.jvm.lux b/stdlib/source/lux/world/blob.jvm.lux index e4b130546..6b04948e3 100644 --- a/stdlib/source/lux/world/blob.jvm.lux +++ b/stdlib/source/lux/world/blob.jvm.lux @@ -24,7 +24,7 @@ (def: byte-to-nat (-> (primitive "java.lang.Byte") Nat) - (|>> host.b2l (:! Nat) (bit.and byte-mask))) + (|>> host.byte-to-long (:! Nat) (bit.and byte-mask))) (def: #export (create size) (-> Nat Blob) @@ -72,7 +72,7 @@ (-> Nat Nat Blob (e.Error Unit)) (if (n/< (host.array-length blob) idx) (exec (|> blob - (host.array-write idx (host.l2b (:! Int value)))) + (host.array-write idx (host.long-to-byte (:! Int value)))) (#e.Success [])) (ex.throw Index-Out-Of-Bounds (%n idx)))) @@ -80,8 +80,8 @@ (-> Nat Nat Blob (e.Error Unit)) (if (n/< (host.array-length blob) (n/+ +1 idx)) (exec (|> blob - (host.array-write idx (host.l2b (:! Int (bit.shift-right +8 value)))) - (host.array-write (n/+ +1 idx) (host.l2b (:! Int value)))) + (host.array-write idx (host.long-to-byte (:! Int (bit.shift-right +8 value)))) + (host.array-write (n/+ +1 idx) (host.long-to-byte (:! Int value)))) (#e.Success [])) (ex.throw Index-Out-Of-Bounds (%n idx)))) @@ -89,10 +89,10 @@ (-> Nat Nat Blob (e.Error Unit)) (if (n/< (host.array-length blob) (n/+ +3 idx)) (exec (|> blob - (host.array-write idx (host.l2b (:! Int (bit.shift-right +24 value)))) - (host.array-write (n/+ +1 idx) (host.l2b (:! Int (bit.shift-right +16 value)))) - (host.array-write (n/+ +2 idx) (host.l2b (:! Int (bit.shift-right +8 value)))) - (host.array-write (n/+ +3 idx) (host.l2b (:! Int value)))) + (host.array-write idx (host.long-to-byte (:! Int (bit.shift-right +24 value)))) + (host.array-write (n/+ +1 idx) (host.long-to-byte (:! Int (bit.shift-right +16 value)))) + (host.array-write (n/+ +2 idx) (host.long-to-byte (:! Int (bit.shift-right +8 value)))) + (host.array-write (n/+ +3 idx) (host.long-to-byte (:! Int value)))) (#e.Success [])) (ex.throw Index-Out-Of-Bounds (%n idx)))) @@ -100,14 +100,14 @@ (-> Nat Nat Blob (e.Error Unit)) (if (n/< (host.array-length blob) (n/+ +7 idx)) (exec (|> blob - (host.array-write idx (host.l2b (:! Int (bit.shift-right +56 value)))) - (host.array-write (n/+ +1 idx) (host.l2b (:! Int (bit.shift-right +48 value)))) - (host.array-write (n/+ +2 idx) (host.l2b (:! Int (bit.shift-right +40 value)))) - (host.array-write (n/+ +3 idx) (host.l2b (:! Int (bit.shift-right +32 value)))) - (host.array-write (n/+ +4 idx) (host.l2b (:! Int (bit.shift-right +24 value)))) - (host.array-write (n/+ +5 idx) (host.l2b (:! Int (bit.shift-right +16 value)))) - (host.array-write (n/+ +6 idx) (host.l2b (:! Int (bit.shift-right +8 value)))) - (host.array-write (n/+ +7 idx) (host.l2b (:! Int value)))) + (host.array-write idx (host.long-to-byte (:! Int (bit.shift-right +56 value)))) + (host.array-write (n/+ +1 idx) (host.long-to-byte (:! Int (bit.shift-right +48 value)))) + (host.array-write (n/+ +2 idx) (host.long-to-byte (:! Int (bit.shift-right +40 value)))) + (host.array-write (n/+ +3 idx) (host.long-to-byte (:! Int (bit.shift-right +32 value)))) + (host.array-write (n/+ +4 idx) (host.long-to-byte (:! Int (bit.shift-right +24 value)))) + (host.array-write (n/+ +5 idx) (host.long-to-byte (:! Int (bit.shift-right +16 value)))) + (host.array-write (n/+ +6 idx) (host.long-to-byte (:! Int (bit.shift-right +8 value)))) + (host.array-write (n/+ +7 idx) (host.long-to-byte (:! Int value)))) (#e.Success [])) (ex.throw Index-Out-Of-Bounds (%n idx)))) diff --git a/stdlib/test/test/lux/host.jvm.lux b/stdlib/test/test/lux/host.jvm.lux index 4ed187c36..a0b44ec62 100644 --- a/stdlib/test/test/lux/host.jvm.lux +++ b/stdlib/test/test/lux/host.jvm.lux @@ -70,12 +70,12 @@ (let [capped-sample (|> sample <to> <from>)] (|> capped-sample <to> <from> (i/= capped-sample)))))] - [&.l2b &.b2l "Can succesfully convert to/from byte."] - [&.l2s &.s2l "Can succesfully convert to/from short."] - [&.l2i &.i2l "Can succesfully convert to/from int."] - [&.l2f &.f2l "Can succesfully convert to/from float."] - [&.l2d &.d2l "Can succesfully convert to/from double."] - [(<| &.i2c &.l2i) (<| &.i2l &.c2i) "Can succesfully convert to/from char."] + [&.long-to-byte &.byte-to-long "Can succesfully convert to/from byte."] + [&.long-to-short &.short-to-long "Can succesfully convert to/from short."] + [&.long-to-int &.int-to-long "Can succesfully convert to/from int."] + [&.long-to-float &.float-to-long "Can succesfully convert to/from float."] + [&.long-to-double &.double-to-long "Can succesfully convert to/from double."] + [(<| &.int-to-char &.long-to-int) (<| &.int-to-long &.char-to-int) "Can succesfully convert to/from char."] )] ($_ seq <int-convs> |