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 /stdlib/source/lux/data | |
parent | 7e44ee8a2cfb14e35f6283a9eb8d6a2ddc8bd99a (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.lux | 28 | ||||
-rw-r--r-- | stdlib/source/lux/data/number.lux | 12 |
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) |