aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/data
diff options
context:
space:
mode:
authorEduardo Julian2018-07-31 22:23:07 -0400
committerEduardo Julian2018-07-31 22:23:07 -0400
commit97ab1f076ac08992d6b64cd77bc0bef97b3fc50a (patch)
tree6ea01c3e9f5be6a1387c1a7621681d1642176329 /stdlib/source/lux/data
parent7e44ee8a2cfb14e35f6283a9eb8d6a2ddc8bd99a (diff)
Now implementing array functionality in stdlib instead of the compiler.
Diffstat (limited to 'stdlib/source/lux/data')
-rw-r--r--stdlib/source/lux/data/collection/array.lux28
-rw-r--r--stdlib/source/lux/data/number.lux12
2 files changed, 28 insertions, 12 deletions
diff --git a/stdlib/source/lux/data/collection/array.lux b/stdlib/source/lux/data/collection/array.lux
index 1d64511a9..09fe50412 100644
--- a/stdlib/source/lux/data/collection/array.lux
+++ b/stdlib/source/lux/data/collection/array.lux
@@ -7,32 +7,46 @@
fold
[predicate (#+ Predicate)]]
[data
+ ["." product]
[collection
- ["." list ("list/." Fold<List>)]]
- ["." product]]])
+ ["." list ("list/." Fold<List>)]]]
+ [compiler
+ ["." host]]])
(def: #export (new size)
(All [a] (-> Nat (Array a)))
- ("lux array new" size))
+ (`` (for {(~~ (static host.jvm))
+ (:assume ("jvm anewarray" "(java.lang.Object )" size))})))
(def: #export (size xs)
(All [a] (-> (Array a) Nat))
- ("lux array size" xs))
+ (`` (for {(~~ (static host.jvm))
+ ("jvm arraylength" xs)})))
(def: #export (read i xs)
(All [a]
(-> Nat (Array a) (Maybe a)))
- ("lux array get" xs i))
+ (if (n/< (size xs) i)
+ (`` (for {(~~ (static host.jvm))
+ (let [value ("jvm aaload" xs i)]
+ (if ("jvm object null?" value)
+ #.None
+ (#.Some value)))}))
+ #.None))
(def: #export (write i x xs)
(All [a]
(-> Nat a (Array a) (Array a)))
- ("lux array put" xs i x))
+ (`` (for {(~~ (static host.jvm))
+ ("jvm aastore" xs i x)})))
(def: #export (delete i xs)
(All [a]
(-> Nat (Array a) (Array a)))
- ("lux array remove" xs i))
+ (if (n/< (size xs) i)
+ (`` (for {(~~ (static host.jvm))
+ (write i (:assume ("jvm object null")) xs)}))
+ xs))
(def: #export (copy length src-start src-array dest-start dest-array)
(All [a]
diff --git a/stdlib/source/lux/data/number.lux b/stdlib/source/lux/data/number.lux
index 583a03b1f..2fc52ae41 100644
--- a/stdlib/source/lux/data/number.lux
+++ b/stdlib/source/lux/data/number.lux
@@ -12,7 +12,9 @@
[data
["." error (#+ Error)]
["." maybe]
- ["." text]]
+ ["." text]
+ [collection
+ ["." array]]]
["." math]]
[/
["." i64]])
@@ -750,15 +752,15 @@
(def: (make-digits _)
(-> Any Digits)
- ("lux array new" i64.width))
+ (array.new i64.width))
(def: (digits-get idx digits)
(-> Nat Digits Nat)
- (maybe.default 0 ("lux array get" digits idx)))
+ (|> digits (array.read idx) (maybe.default 0)))
-(def: (digits-put idx digit digits)
+(def: digits-put
(-> Nat Nat Digits Digits)
- ("lux array put" digits idx digit))
+ array.write)
(def: (prepend left right)
(-> Text Text Text)