From 28c724857d76afdc40b5b036f415cc151eb66263 Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Wed, 2 Dec 2020 20:37:13 -0400 Subject: Replaced "contains?" function with "key?" function. --- stdlib/source/lux/data/collection/dictionary.lux | 4 +- .../lux/data/collection/dictionary/ordered.lux | 6 ++- stdlib/source/lux/data/collection/set.lux | 4 +- stdlib/source/lux/data/collection/set/ordered.lux | 2 +- stdlib/source/lux/data/number/i16.lux | 7 ++-- stdlib/source/lux/data/number/i32.lux | 7 ++-- stdlib/source/lux/data/number/i64.lux | 40 ++++++++++-------- stdlib/source/lux/data/number/i8.lux | 7 ++-- stdlib/source/lux/target/jvm/loader.lux | 2 +- stdlib/source/lux/tool/compiler/version.lux | 47 +++++++++++++++++++++- stdlib/source/lux/world/file/watch.lux | 3 +- 11 files changed, 93 insertions(+), 36 deletions(-) (limited to 'stdlib/source/lux') diff --git a/stdlib/source/lux/data/collection/dictionary.lux b/stdlib/source/lux/data/collection/dictionary.lux index efb99a8b4..8ca61b453 100644 --- a/stdlib/source/lux/data/collection/dictionary.lux +++ b/stdlib/source/lux/data/collection/dictionary.lux @@ -574,8 +574,8 @@ (let [[Hash node] dict] (get' root-level (\ Hash hash key) key Hash node))) -(def: #export (contains? key dict) - (All [k v] (-> k (Dictionary k v) Bit)) +(def: #export (key? dict key) + (All [k v] (-> (Dictionary k v) k Bit)) (case (get key dict) #.None #0 (#.Some _) #1)) diff --git a/stdlib/source/lux/data/collection/dictionary/ordered.lux b/stdlib/source/lux/data/collection/dictionary/ordered.lux index b924a2e5d..c558a7669 100644 --- a/stdlib/source/lux/data/collection/dictionary/ordered.lux +++ b/stdlib/source/lux/data/collection/dictionary/ordered.lux @@ -75,8 +75,10 @@ (recur (get@ #right node)))) )))) -(def: #export (contains? key dict) - (All [k v] (-> k (Dictionary k v) Bit)) +## TODO: Doing inneficient access of Order functions due to compiler bug. +## TODO: Must improve it as soon as bug is fixed. +(def: #export (key? dict key) + (All [k v] (-> (Dictionary k v) k Bit)) (let [## (^open "_\.") (get@ #&order dict) ] (loop [node (get@ #root dict)] diff --git a/stdlib/source/lux/data/collection/set.lux b/stdlib/source/lux/data/collection/set.lux index 80cdf89a6..b47c5761d 100644 --- a/stdlib/source/lux/data/collection/set.lux +++ b/stdlib/source/lux/data/collection/set.lux @@ -35,9 +35,9 @@ (All [a] (-> a (Set a) (Set a))) //.remove) -(def: #export (member? set elem) +(def: #export member? (All [a] (-> (Set a) a Bit)) - (//.contains? elem set)) + //.key?) (def: #export to-list (All [a] (-> (Set a) (List a))) diff --git a/stdlib/source/lux/data/collection/set/ordered.lux b/stdlib/source/lux/data/collection/set/ordered.lux index d350c1e9c..7a2584227 100644 --- a/stdlib/source/lux/data/collection/set/ordered.lux +++ b/stdlib/source/lux/data/collection/set/ordered.lux @@ -20,7 +20,7 @@ (def: #export (member? set elem) (All [a] (-> (Set a) a Bit)) - (|> set :representation (/.contains? elem))) + (/.key? (:representation set) elem)) (template [ ] [(def: #export diff --git a/stdlib/source/lux/data/number/i16.lux b/stdlib/source/lux/data/number/i16.lux index 44fe0e988..4ca313730 100644 --- a/stdlib/source/lux/data/number/i16.lux +++ b/stdlib/source/lux/data/number/i16.lux @@ -15,6 +15,7 @@ ..sub} (I64 size))) -(def: #export i16 (-> I64 I16) (get@ #i64.narrow ..sub)) -(def: #export i64 (-> I16 I64) (get@ #i64.wide ..sub)) -(def: #export equivalence (Equivalence I16) (get@ #i64.equivalence ..sub)) +(def: #export equivalence (Equivalence I16) (\ ..sub &equivalence)) +(def: #export width Nat (\ ..sub width)) +(def: #export i16 (-> I64 I16) (\ ..sub narrow)) +(def: #export i64 (-> I16 I64) (\ ..sub widen)) diff --git a/stdlib/source/lux/data/number/i32.lux b/stdlib/source/lux/data/number/i32.lux index 560168f6f..35391519b 100644 --- a/stdlib/source/lux/data/number/i32.lux +++ b/stdlib/source/lux/data/number/i32.lux @@ -15,6 +15,7 @@ ..sub} (I64 size))) -(def: #export i32 (-> I64 I32) (get@ #i64.narrow ..sub)) -(def: #export i64 (-> I32 I64) (get@ #i64.wide ..sub)) -(def: #export equivalence (Equivalence I32) (get@ #i64.equivalence ..sub)) +(def: #export equivalence (Equivalence I32) (\ ..sub &equivalence)) +(def: #export width Nat (\ ..sub width)) +(def: #export i32 (-> I64 I32) (\ ..sub narrow)) +(def: #export i64 (-> I32 I64) (\ ..sub widen)) diff --git a/stdlib/source/lux/data/number/i64.lux b/stdlib/source/lux/data/number/i64.lux index 79bf7632d..249ae9046 100644 --- a/stdlib/source/lux/data/number/i64.lux +++ b/stdlib/source/lux/data/number/i64.lux @@ -143,25 +143,33 @@ [conjunction ..true ..and] ) -(type: #export (Sub size) - {#narrow (-> I64 (I64 size)) - #wide (-> (I64 size) I64) - #equivalence (Equivalence (I64 size))}) +(signature: #export (Sub size) + (: (Equivalence (I64 size)) + &equivalence) + (: Nat + width) + (: (-> I64 (I64 size)) + narrow) + (: (-> (I64 size) I64) + widen)) (def: #export (sub width) (Ex [size] (-> Nat (Maybe (Sub size)))) (if (.and (n.> 0 width) (n.< ..width width)) - (let [top (dec width) - shift (n.- width ..width) - sign (..bit top) - number (..mask (dec width))] - (#.Some {#narrow (function (narrow value) - (..or (|> value (..and ..sign) (..logic-right-shift shift)) - (|> value (..and number)))) - #wide (function (wide value) - (|> (..or (|> value (..and sign) (..left-shift shift)) - (|> value (..clear top))) - .i64)) - #equivalence ..equivalence})) + (let [sign-shift (n.- width ..width) + sign (..bit (dec width)) + mantissa (..mask (dec width)) + co-mantissa (..xor (.i64 -1) mantissa)] + (#.Some (: Sub + (structure + (def: &equivalence ..equivalence) + (def: width width) + (def: (narrow value) + (..or (|> value (..and ..sign) (..logic-right-shift sign-shift)) + (|> value (..and mantissa)))) + (def: (widen value) + (.i64 (case (.nat (..and sign value)) + 0 value + _ (..or co-mantissa value)))))))) #.None)) diff --git a/stdlib/source/lux/data/number/i8.lux b/stdlib/source/lux/data/number/i8.lux index a6475eb15..49b9cca95 100644 --- a/stdlib/source/lux/data/number/i8.lux +++ b/stdlib/source/lux/data/number/i8.lux @@ -15,6 +15,7 @@ ..sub} (I64 size))) -(def: #export i8 (-> I64 I8) (get@ #i64.narrow ..sub)) -(def: #export i64 (-> I8 I64) (get@ #i64.wide ..sub)) -(def: #export equivalence (Equivalence I8) (get@ #i64.equivalence ..sub)) +(def: #export equivalence (Equivalence I8) (\ ..sub &equivalence)) +(def: #export width Nat (\ ..sub width)) +(def: #export i8 (-> I64 I8) (\ ..sub narrow)) +(def: #export i64 (-> I8 I64) (\ ..sub widen)) diff --git a/stdlib/source/lux/target/jvm/loader.lux b/stdlib/source/lux/target/jvm/loader.lux index 74bfabc44..8f9f47e4f 100644 --- a/stdlib/source/lux/target/jvm/loader.lux +++ b/stdlib/source/lux/target/jvm/loader.lux @@ -130,7 +130,7 @@ (-> Text Binary Library (IO (Try Any))) (do {! io.monad} [library' (atom.read library)] - (if (dictionary.contains? name library') + (if (dictionary.key? library' name) (wrap (exception.throw ..already-stored name)) (do ! [_ (atom.update (dictionary.put name bytecode) library)] diff --git a/stdlib/source/lux/tool/compiler/version.lux b/stdlib/source/lux/tool/compiler/version.lux index 3965b9b28..df405e75d 100644 --- a/stdlib/source/lux/tool/compiler/version.lux +++ b/stdlib/source/lux/tool/compiler/version.lux @@ -1,5 +1,50 @@ (.module: - [lux #*]) + [lux #* + [data + [number + ["n" nat]] + [text + ["%" format]]]]) (type: #export Version Nat) + +(def: range 100) + +(def: level + (n.% ..range)) + +(def: current + (-> Nat Nat) + (|>>)) + +(def: next + (n./ ..range)) + +(def: #export patch + (-> Version Nat) + (|>> ..current ..level)) + +(def: #export minor + (-> Version Nat) + (|>> ..next ..level)) + +(def: #export major + (-> Version Nat) + (|>> ..next ..next ..level)) + +(def: separator ".") + +(def: (padded value) + (-> Nat Text) + (if (n.< 10 value) + (%.format "0" (%.nat value)) + (%.nat value))) + +(def: #export (format version) + (%.Format Version) + (%.format (..padded (..major version)) + ..separator + (..padded (..minor version)) + ..separator + (..padded (..patch version)))) diff --git a/stdlib/source/lux/world/file/watch.lux b/stdlib/source/lux/world/file/watch.lux index a1bb5a6de..5d995bbd4 100644 --- a/stdlib/source/lux/world/file/watch.lux +++ b/stdlib/source/lux/world/file/watch.lux @@ -147,8 +147,7 @@ (do {! (try.with promise.monad)} [current-files (..poll-files directory file-tracker) #let [creations (if (..creation? concern) - (list.filter (function (_ [path file last-modified]) - (not (dictionary.contains? path file-tracker))) + (list.filter (|>> product.left (dictionary.key? file-tracker) not) current-files) (list)) available (|> current-files -- cgit v1.2.3