diff options
Diffstat (limited to '')
| -rw-r--r-- | luxc/src/lux/analyser.clj | 6 | ||||
| -rw-r--r-- | luxc/src/lux/analyser/base.clj | 2 | ||||
| -rw-r--r-- | luxc/src/lux/analyser/case.clj | 30 | ||||
| -rw-r--r-- | luxc/src/lux/analyser/module.clj | 12 | ||||
| -rw-r--r-- | luxc/src/lux/analyser/parser.clj | 22 | ||||
| -rw-r--r-- | luxc/src/lux/analyser/proc/common.clj | 16 | ||||
| -rw-r--r-- | luxc/src/lux/analyser/proc/jvm.clj | 34 | ||||
| -rw-r--r-- | luxc/src/lux/base.clj | 14 | ||||
| -rw-r--r-- | luxc/src/lux/compiler/cache.clj | 14 | ||||
| -rw-r--r-- | luxc/src/lux/compiler/cache/ann.clj | 6 | ||||
| -rw-r--r-- | luxc/src/lux/compiler/jvm.clj | 4 | ||||
| -rw-r--r-- | luxc/src/lux/compiler/jvm/base.clj | 5 | ||||
| -rw-r--r-- | luxc/src/lux/compiler/jvm/case.clj | 2 | ||||
| -rw-r--r-- | luxc/src/lux/compiler/jvm/lux.clj | 4 | ||||
| -rw-r--r-- | luxc/src/lux/lexer.clj | 6 | ||||
| -rw-r--r-- | luxc/src/lux/optimizer.clj | 28 | ||||
| -rw-r--r-- | luxc/src/lux/parser.clj | 4 | ||||
| -rw-r--r-- | luxc/src/lux/type.clj | 8 | ||||
| -rw-r--r-- | luxc/src/lux/type/host.clj | 2 | 
19 files changed, 112 insertions, 107 deletions
| diff --git a/luxc/src/lux/analyser.clj b/luxc/src/lux/analyser.clj index 9052e6f8f..6e2d8f7aa 100644 --- a/luxc/src/lux/analyser.clj +++ b/luxc/src/lux/analyser.clj @@ -65,9 +65,9 @@           macro-caller (aget compilers 2)]      (|case token        ;; Standard special forms -      (&/$Bool ?value) -      (|do [_ (&type/check exo-type &type/Bool)] -        (return (&/|list (&&/|meta exo-type cursor (&&/$bool ?value))))) +      (&/$Bit ?value) +      (|do [_ (&type/check exo-type &type/Bit)] +        (return (&/|list (&&/|meta exo-type cursor (&&/$bit ?value)))))        (&/$Nat ?value)        (|do [_ (&type/check exo-type &type/Nat)] diff --git a/luxc/src/lux/analyser/base.clj b/luxc/src/lux/analyser/base.clj index 25b73ba1a..7874b0bd2 100644 --- a/luxc/src/lux/analyser/base.clj +++ b/luxc/src/lux/analyser/base.clj @@ -6,7 +6,7 @@  ;; [Tags]  (defvariant -  ("bool" 1) +  ("bit" 1)    ("nat" 1)    ("int" 1)    ("rev" 1) diff --git a/luxc/src/lux/analyser/case.clj b/luxc/src/lux/analyser/case.clj index 86752d336..73b4c8df2 100644 --- a/luxc/src/lux/analyser/case.clj +++ b/luxc/src/lux/analyser/case.clj @@ -12,7 +12,7 @@  ;; [Tags]  (defvariant    ("DefaultTotal" 1) -  ("BoolTotal" 2) +  ("BitTotal" 2)    ("NatTotal" 2)    ("IntTotal" 2)    ("RevTotal" 2) @@ -24,7 +24,7 @@  (defvariant    ("NoTestAC" 0)    ("StoreTestAC" 1) -  ("BoolTestAC" 1) +  ("BitTestAC" 1)    ("NatTestAC" 1)    ("IntTestAC" 1)    ("RevTestAC" 1) @@ -268,10 +268,10 @@        (&/$Symbol ident)        (&/fail-with-loc (str "[Pattern-matching Error] Symbols must be unqualified: " (&/ident->text ident))) -      (&/$Bool ?value) -      (|do [_ (&type/check value-type &type/Bool) +      (&/$Bit ?value) +      (|do [_ (&type/check value-type &type/Bit)              =kont kont] -        (return (&/T [($BoolTestAC ?value) =kont]))) +        (return (&/T [($BitTestAC ?value) =kont])))        (&/$Nat ?value)        (|do [_ (&type/check value-type &type/Nat) @@ -405,8 +405,8 @@        [($DefaultTotal total?) ($NoTestAC)]        (return ($DefaultTotal true)) -      [($BoolTotal total? ?values) ($NoTestAC)] -      (return ($BoolTotal true ?values)) +      [($BitTotal total? ?values) ($NoTestAC)] +      (return ($BitTotal true ?values))        [($NatTotal total? ?values) ($NoTestAC)]        (return ($NatTotal true ?values)) @@ -432,8 +432,8 @@        [($DefaultTotal total?) ($StoreTestAC ?idx)]        (return ($DefaultTotal true)) -      [($BoolTotal total? ?values) ($StoreTestAC ?idx)] -      (return ($BoolTotal true ?values)) +      [($BitTotal total? ?values) ($StoreTestAC ?idx)] +      (return ($BitTotal true ?values))        [($NatTotal total? ?values) ($StoreTestAC ?idx)]        (return ($NatTotal true ?values)) @@ -456,11 +456,11 @@        [($VariantTotal total? ?values) ($StoreTestAC ?idx)]        (return ($VariantTotal true ?values)) -      [($DefaultTotal total?) ($BoolTestAC ?value)] -      (return ($BoolTotal total? (&/|list ?value))) +      [($DefaultTotal total?) ($BitTestAC ?value)] +      (return ($BitTotal total? (&/|list ?value))) -      [($BoolTotal total? ?values) ($BoolTestAC ?value)] -      (return ($BoolTotal total? (&/$Cons ?value ?values))) +      [($BitTotal total? ?values) ($BitTestAC ?value)] +      (return ($BitTotal total? (&/$Cons ?value ?values)))        [($DefaultTotal total?) ($NatTestAC ?value)]        (return ($NatTotal total? (&/|list ?value))) @@ -550,8 +550,8 @@      ($DefaultTotal ?total)      (return ?total) -    ($BoolTotal ?total ?values) -    (|do [_ (&type/check value-type &type/Bool)] +    ($BitTotal ?total ?values) +    (|do [_ (&type/check value-type &type/Bit)]        (return (or ?total                    (= #{true false} (set (&/->seq ?values)))))) diff --git a/luxc/src/lux/analyser/module.clj b/luxc/src/lux/analyser/module.clj index 130004701..4174932ca 100644 --- a/luxc/src/lux/analyser/module.clj +++ b/luxc/src/lux/analyser/module.clj @@ -61,7 +61,7 @@                                    state)]              (&/$Right (&/T [state* &/unit-tag])))))      (defn <asker> -      "(-> Text (Lux Bool))" +      "(-> Text (Lux Bit))"        [module-name]        (fn [state]          (if-let [=module (->> state (&/get$ &/$modules) (&/|get module-name))] @@ -141,7 +141,7 @@         state))))  (defn type-def -  "(-> Text Text (Lux [Bool Type]))" +  "(-> Text Text (Lux [Bit Type]))"    [module name]    (fn [state]      (if-let [$module (->> state (&/get$ &/$modules) (&/|get module))] @@ -167,7 +167,7 @@         state))))  (defn exists? -  "(-> Text (Lux Bool))" +  "(-> Text (Lux Bit))"    [name]    (fn [state]      (return* state @@ -269,7 +269,7 @@                    _                    (return* state (&/T [(&/T [module name]) $def])))                  (|case (&meta/meta-get &meta/export?-tag ?meta) -                  (&/$Some [_ (&/$Bool true)]) +                  (&/$Some [_ (&/$Bit true)])                    (return* state (&/T [(&/T [module name]) $def]))                    _ @@ -354,7 +354,7 @@      (return nil)))  (defn declare-tags -  "(-> Text (List Text) Bool Type (Lux Null))" +  "(-> Text (List Text) Bit Type (Lux Null))"    [module tag-names was-exported? type]    (|do [_ (ensure-undeclared-tags module tag-names)          type-name (&type/type-name type) @@ -437,7 +437,7 @@  (do-template [<name> <type> <tag> <desc>]    (defn <name> [module name meta type]      (|case (&meta/meta-get <tag> meta) -      (&/$Some [_ (&/$Bool true)]) +      (&/$Some [_ (&/$Bit true)])        (&/try-all% (&/|list (&type/check <type> type)                             (&/fail-with-loc (str "[Analyser Error] Cannot tag as lux;" <desc> "? if it's not a " <desc> ": " (str module &/+name-separator+ name))))) diff --git a/luxc/src/lux/analyser/parser.clj b/luxc/src/lux/analyser/parser.clj index c5cd84eab..6a46bab3c 100644 --- a/luxc/src/lux/analyser/parser.clj +++ b/luxc/src/lux/analyser/parser.clj @@ -133,7 +133,7 @@  (def ^:private parse-ann-param    (|do [param-name parse-name          _ (&reader/read-text "=") -        param-value (&/try-all% (&/|list (|do [[_ (&lexer/$Bool param-value*)] &lexer/lex-bool] +        param-value (&/try-all% (&/|list (|do [[_ (&lexer/$Bit param-value*)] &lexer/lex-bit]                                             (return (boolean param-value*)))                                           (|do [[_ (&lexer/$Int param-value*)] &lexer/lex-int] @@ -243,8 +243,8 @@    (|do [_ (&reader/read-text "init")          =privacy-modifier (with-pre-space                              parse-privacy-modifier) -        [_ (&lexer/$Bool =strict*)] (with-pre-space -                                      &lexer/lex-bool) +        [_ (&lexer/$Bit =strict*)] (with-pre-space +                                     &lexer/lex-bit)          :let [=strict (Boolean/parseBoolean =strict*)]          =anns (with-pre-space                  (with-brackets @@ -271,11 +271,11 @@                  parse-name)          =privacy-modifier (with-pre-space                              parse-privacy-modifier) -        [_ (&lexer/$Bool =final?*)] (with-pre-space -                                      &lexer/lex-bool) +        [_ (&lexer/$Bit =final?*)] (with-pre-space +                                     &lexer/lex-bit)          :let [=final? (Boolean/parseBoolean =final?*)] -        [_ (&lexer/$Bool =strict*)] (with-pre-space -                                      &lexer/lex-bool) +        [_ (&lexer/$Bit =strict*)] (with-pre-space +                                     &lexer/lex-bit)          :let [=strict (Boolean/parseBoolean =strict*)]          =anns (with-pre-space                  (with-brackets @@ -301,8 +301,8 @@                        parse-gclass-decl)          =name (with-pre-space                  parse-name) -        [_ (&lexer/$Bool =strict*)] (with-pre-space -                                      &lexer/lex-bool) +        [_ (&lexer/$Bit =strict*)] (with-pre-space +                                     &lexer/lex-bit)          :let [=strict (Boolean/parseBoolean =strict*)]          =anns (with-pre-space                  (with-brackets @@ -328,8 +328,8 @@                  parse-name)          =privacy-modifier (with-pre-space                              parse-privacy-modifier) -        [_ (&lexer/$Bool =strict*)] (with-pre-space -                                      &lexer/lex-bool) +        [_ (&lexer/$Bit =strict*)] (with-pre-space +                                     &lexer/lex-bit)          :let [=strict (Boolean/parseBoolean =strict*)]          =anns (with-pre-space                  (with-brackets diff --git a/luxc/src/lux/analyser/proc/common.clj b/luxc/src/lux/analyser/proc/common.clj index 359fcb314..7b6bc6a3f 100644 --- a/luxc/src/lux/analyser/proc/common.clj +++ b/luxc/src/lux/analyser/proc/common.clj @@ -12,7 +12,7 @@        (|do [:let [(&/$Cons left (&/$Cons right (&/$Nil))) ?values]              =left (&&/analyse-1 analyse $var left)              =right (&&/analyse-1 analyse $var right) -            _ (&type/check exo-type &type/Bool) +            _ (&type/check exo-type &type/Bit)              _cursor &/cursor]          (return (&/|list (&&/|meta exo-type _cursor                                     (&&/$proc (&/T ["lux" "is"]) (&/|list =left =right) (&/|list))))))))) @@ -39,8 +39,8 @@        (return (&/|list (&&/|meta exo-type _cursor                                   (&&/$proc (&/T <proc>) (&/|list =x =y) (&/|list))))))) -  ^:private analyse-text-eq     ["text" "="]      &type/Text &type/Bool -  ^:private analyse-text-lt     ["text" "<"]      &type/Text &type/Bool +  ^:private analyse-text-eq     ["text" "="]      &type/Text &type/Bit +  ^:private analyse-text-lt     ["text" "<"]      &type/Text &type/Bit    ^:private analyse-text-concat ["text" "concat"] &type/Text &type/Text    ) @@ -143,7 +143,7 @@          (return (&/|list (&&/|meta exo-type _cursor                                     (&&/$proc (&/T <proc>) (&/|list subjectA paramA) (&/|list)))))))) -  ^:private analyse-i64-eq   ["i64" "="]  (&/$Apply &type/Any &type/I64)  &type/Bool +  ^:private analyse-i64-eq   ["i64" "="]  (&/$Apply &type/Any &type/I64)  &type/Bit    ^:private analyse-i64-add  ["i64" "+"]  (&/$Apply &type/Any &type/I64)  &type/I64    ^:private analyse-i64-sub  ["i64" "-"]  (&/$Apply &type/Any &type/I64)  &type/I64    ) @@ -163,15 +163,15 @@    ^:private analyse-int-mul  ["int" "*"]  &type/Int  &type/Int    ^:private analyse-int-div  ["int" "/"]  &type/Int  &type/Int    ^:private analyse-int-rem  ["int" "%"]  &type/Int  &type/Int -  ^:private analyse-int-lt   ["int" "<"]  &type/Int  &type/Bool +  ^:private analyse-int-lt   ["int" "<"]  &type/Int  &type/Bit    ^:private analyse-frac-add ["frac" "+"] &type/Frac &type/Frac    ^:private analyse-frac-sub ["frac" "-"] &type/Frac &type/Frac    ^:private analyse-frac-mul ["frac" "*"] &type/Frac &type/Frac    ^:private analyse-frac-div ["frac" "/"] &type/Frac &type/Frac    ^:private analyse-frac-rem ["frac" "%"] &type/Frac &type/Frac -  ^:private analyse-frac-eq  ["frac" "="] &type/Frac &type/Bool -  ^:private analyse-frac-lt  ["frac" "<"] &type/Frac &type/Bool +  ^:private analyse-frac-eq  ["frac" "="] &type/Frac &type/Bit +  ^:private analyse-frac-lt  ["frac" "<"] &type/Frac &type/Bit    )  (do-template [<encode> <encode-op> <decode> <decode-op> <type>] @@ -348,7 +348,7 @@              =atom (&&/analyse-1 analyse (&type/Atom $var) ?atom)              =old (&&/analyse-1 analyse $var ?old)              =new (&&/analyse-1 analyse $var ?new) -            _ (&type/check exo-type &type/Bool) +            _ (&type/check exo-type &type/Bit)              _cursor &/cursor]          (return (&/|list (&&/|meta exo-type _cursor                                     (&&/$proc (&/T ["atom" "compare-and-swap"]) (&/|list =atom =old =new) (&/|list))))))))) diff --git a/luxc/src/lux/analyser/proc/jvm.clj b/luxc/src/lux/analyser/proc/jvm.clj index b6d291073..98c2435e9 100644 --- a/luxc/src/lux/analyser/proc/jvm.clj +++ b/luxc/src/lux/analyser/proc/jvm.clj @@ -464,40 +464,40 @@    ^:private analyse-jvm-imul "imul" "java.lang.Integer" "java.lang.Integer"    ^:private analyse-jvm-idiv "idiv" "java.lang.Integer" "java.lang.Integer"    ^:private analyse-jvm-irem "irem" "java.lang.Integer" "java.lang.Integer" -  ^:private analyse-jvm-ieq  "ieq"  "java.lang.Integer" "java.lang.Boolean" -  ^:private analyse-jvm-ilt  "ilt"  "java.lang.Integer" "java.lang.Boolean" -  ^:private analyse-jvm-igt  "igt"  "java.lang.Integer" "java.lang.Boolean" +  ^:private analyse-jvm-ieq  "ieq"  "java.lang.Integer" "#Bit" +  ^:private analyse-jvm-ilt  "ilt"  "java.lang.Integer" "#Bit" +  ^:private analyse-jvm-igt  "igt"  "java.lang.Integer" "#Bit" -  ^:private analyse-jvm-ceq  "ceq"  "java.lang.Character" "java.lang.Boolean" -  ^:private analyse-jvm-clt  "clt"  "java.lang.Character" "java.lang.Boolean" -  ^:private analyse-jvm-cgt  "cgt"  "java.lang.Character" "java.lang.Boolean" +  ^:private analyse-jvm-ceq  "ceq"  "java.lang.Character" "#Bit" +  ^:private analyse-jvm-clt  "clt"  "java.lang.Character" "#Bit" +  ^:private analyse-jvm-cgt  "cgt"  "java.lang.Character" "#Bit"    ^:private analyse-jvm-ladd "ladd" "java.lang.Long"    "java.lang.Long"    ^:private analyse-jvm-lsub "lsub" "java.lang.Long"    "java.lang.Long"    ^:private analyse-jvm-lmul "lmul" "java.lang.Long"    "java.lang.Long"    ^:private analyse-jvm-ldiv "ldiv" "java.lang.Long"    "java.lang.Long"    ^:private analyse-jvm-lrem "lrem" "java.lang.Long"    "java.lang.Long" -  ^:private analyse-jvm-leq  "leq"  "java.lang.Long"    "java.lang.Boolean" -  ^:private analyse-jvm-llt  "llt"  "java.lang.Long"    "java.lang.Boolean" -  ^:private analyse-jvm-lgt  "lgt"  "java.lang.Long"    "java.lang.Boolean" +  ^:private analyse-jvm-leq  "leq"  "java.lang.Long"    "#Bit" +  ^:private analyse-jvm-llt  "llt"  "java.lang.Long"    "#Bit" +  ^:private analyse-jvm-lgt  "lgt"  "java.lang.Long"    "#Bit"    ^:private analyse-jvm-fadd "fadd" "java.lang.Float"   "java.lang.Float"    ^:private analyse-jvm-fsub "fsub" "java.lang.Float"   "java.lang.Float"    ^:private analyse-jvm-fmul "fmul" "java.lang.Float"   "java.lang.Float"    ^:private analyse-jvm-fdiv "fdiv" "java.lang.Float"   "java.lang.Float"    ^:private analyse-jvm-frem "frem" "java.lang.Float"   "java.lang.Float" -  ^:private analyse-jvm-feq  "feq"  "java.lang.Float"   "java.lang.Boolean" -  ^:private analyse-jvm-flt  "flt"  "java.lang.Float"   "java.lang.Boolean" -  ^:private analyse-jvm-fgt  "fgt"  "java.lang.Float"   "java.lang.Boolean" +  ^:private analyse-jvm-feq  "feq"  "java.lang.Float"   "#Bit" +  ^:private analyse-jvm-flt  "flt"  "java.lang.Float"   "#Bit" +  ^:private analyse-jvm-fgt  "fgt"  "java.lang.Float"   "#Bit"    ^:private analyse-jvm-dadd "dadd" "java.lang.Double"  "java.lang.Double"    ^:private analyse-jvm-dsub "dsub" "java.lang.Double"  "java.lang.Double"    ^:private analyse-jvm-dmul "dmul" "java.lang.Double"  "java.lang.Double"    ^:private analyse-jvm-ddiv "ddiv" "java.lang.Double"  "java.lang.Double"    ^:private analyse-jvm-drem "drem" "java.lang.Double"  "java.lang.Double" -  ^:private analyse-jvm-deq  "deq"  "java.lang.Double"  "java.lang.Boolean" -  ^:private analyse-jvm-dlt  "dlt"  "java.lang.Double"  "java.lang.Boolean" -  ^:private analyse-jvm-dgt  "dgt"  "java.lang.Double"  "java.lang.Boolean" +  ^:private analyse-jvm-deq  "deq"  "java.lang.Double"  "#Bit" +  ^:private analyse-jvm-dlt  "dlt"  "java.lang.Double"  "#Bit" +  ^:private analyse-jvm-dgt  "dgt"  "java.lang.Double"  "#Bit"    )  (let [length-type &type/Nat @@ -606,7 +606,7 @@    (|do [:let [(&/$Cons object (&/$Nil)) ?values]          =object (&&/analyse-1+ analyse object)          _ (ensure-object (&&/expr-type* =object)) -        :let [output-type &type/Bool] +        :let [output-type &type/Bit]          _ (&type/check exo-type output-type)          _cursor &/cursor]      (return (&/|list (&&/|meta exo-type _cursor @@ -805,7 +805,7 @@    (|do [:let [(&/$Cons object (&/$Nil)) ?values]          =object (&&/analyse-1+ analyse object)          _ (ensure-object (&&/expr-type* =object)) -        :let [output-type &type/Bool] +        :let [output-type &type/Bit]          _ (&type/check exo-type output-type)          _cursor &/cursor]      (return (&/|list (&&/|meta output-type _cursor diff --git a/luxc/src/lux/base.clj b/luxc/src/lux/base.clj index 37db2a480..464b7b585 100644 --- a/luxc/src/lux/base.clj +++ b/luxc/src/lux/base.clj @@ -71,7 +71,7 @@  ;; Code  (defvariant -  ("Bool" 1) +  ("Bit" 1)    ("Nat" 1)    ("Int" 1)    ("Rev" 1) @@ -410,7 +410,7 @@      (assert false (prn-str '|map f (adt->text xs)))))  (defn |empty? -  "(All [a] (-> (List a) Bool))" +  "(All [a] (-> (List a) Bit))"    [xs]    (|case xs      ($Nil) @@ -420,7 +420,7 @@      false))  (defn |filter -  "(All [a] (-> (-> a Bool) (List a) (List a)))" +  "(All [a] (-> (-> a Bit) (List a) (List a)))"    [p xs]    (|case xs      ($Nil) @@ -856,7 +856,7 @@  (do-template [<name> <tag>]    (defn <name> -    "(-> CompilerMode Bool)" +    "(-> CompilerMode Bit)"      [mode]      (|case mode        (<tag>) true @@ -1204,7 +1204,7 @@  (defn show-ast [ast]    (|case ast -    [_ ($Bool ?value)] +    [_ ($Bit ?value)]      (pr-str ?value)      [_ ($Nat ?value)] @@ -1325,7 +1325,7 @@      (return* state (|keys (get$ $modules state)))))  (defn when% -  "(-> Bool (Meta Any) (Meta Any))" +  "(-> Bit (Meta Any) (Meta Any))"    [test body]    (if test      body @@ -1377,7 +1377,7 @@  (do-template [<name> <default> <op>]    (defn <name> -    "(All [a] (-> (-> a Bool) (List a) Bool))" +    "(All [a] (-> (-> a Bit) (List a) Bit))"      [p xs]      (|case xs        ($Nil) diff --git a/luxc/src/lux/compiler/cache.clj b/luxc/src/lux/compiler/cache.clj index 04ef34e52..0b8739463 100644 --- a/luxc/src/lux/compiler/cache.clj +++ b/luxc/src/lux/compiler/cache.clj @@ -28,12 +28,14 @@         java.io.File/separator         (.replace ^String (&host/->module-class module) "/" java.io.File/separator))) -(defn cached? [module] -  "(-> Text Bool)" +(defn cached? +  "(-> Text Bit)" +  [module]    (.exists (new File (str (module-path module) java.io.File/separator &&core/lux-module-descriptor-name)))) -(defn delete [module] +(defn delete    "(-> Text (Lux Null))" +  [module]    (fn [state]      (do (delete-all-module-files (new File (module-path module)))        (return* state nil)))) @@ -48,8 +50,9 @@         (apply concat)         (list* module))) -(defn clean [state] +(defn clean    "(-> Lux Null)" +  [state]    (let [needed-modules (->> state (&/get$ &/$modules) &/|keys &/->seq set)          output-dir-prefix (str (.getAbsolutePath (new File ^String @&&core/!output-dir)) java.io.File/separator)          outdated? #(->> % (contains? needed-modules) not) @@ -237,8 +240,9 @@                          compiler)               nil))) -(defn load [module-name] +(defn load    "(-> Text (Lux Null))" +  [module-name]    (if-let [module-struct (get @!pre-loaded-cache module-name)]      (|do [_ (inject-module module-name module-struct)]        (return nil)) diff --git a/luxc/src/lux/compiler/cache/ann.clj b/luxc/src/lux/compiler/cache/ann.clj index 458146992..bab3d20c7 100644 --- a/luxc/src/lux/compiler/cache/ann.clj +++ b/luxc/src/lux/compiler/cache/ann.clj @@ -24,7 +24,7 @@    "(-> Code Text)"    [ann]    (|case ann -    [_ (&/$Bool value)] +    [_ (&/$Bit value)]      (str "B" value stop)      [_ (&/$Nat value)] @@ -76,7 +76,7 @@        (let [[value* ^String input*] (.split (.substring input 1) stop 2)]          [(&/T [dummy-cursor (<ctor> (<parser> value*))]) input*]))) -  ^:private deserialize-bool "B" &/$Bool Boolean/parseBoolean +  ^:private deserialize-bit  "B" &/$Bit  Boolean/parseBoolean    ^:private deserialize-nat  "N" &/$Nat  Long/parseLong    ^:private deserialize-int  "I" &/$Int  Long/parseLong    ^:private deserialize-rev  "D" &/$Rev  Long/parseLong @@ -124,7 +124,7 @@  (defn deserialize    "(-> Text V[Code Text])"    [input] -  (or (deserialize-bool input) +  (or (deserialize-bit input)        (deserialize-nat input)        (deserialize-int input)        (deserialize-rev input) diff --git a/luxc/src/lux/compiler/jvm.clj b/luxc/src/lux/compiler/jvm.clj index a13427bc3..60a2c7d2e 100644 --- a/luxc/src/lux/compiler/jvm.clj +++ b/luxc/src/lux/compiler/jvm.clj @@ -47,8 +47,8 @@                        (.visitLineNumber (int _line) debug-label))                      (swap! !source->last-line assoc _file-name _line))]]        (|case ?form -        (&o/$bool ?value) -        (&&lux/compile-bool ?value) +        (&o/$bit ?value) +        (&&lux/compile-bit ?value)          (&o/$nat ?value)          (&&lux/compile-nat ?value) diff --git a/luxc/src/lux/compiler/jvm/base.clj b/luxc/src/lux/compiler/jvm/base.clj index 99e0f08e9..b5e520de5 100644 --- a/luxc/src/lux/compiler/jvm/base.clj +++ b/luxc/src/lux/compiler/jvm/base.clj @@ -43,8 +43,9 @@      (.mkdirs (File. module-dir))      (&&/write-file (str module-dir java.io.File/separator name ".class") data))) -(defn class-exists? [^String module ^String class-name] -  "(-> Text Text (IO Bool))" +(defn class-exists? +  "(-> Text Text (IO Bit))" +  [^String module ^String class-name]    (|do [_ (return nil)          :let [full-path (str @&&/!output-dir java.io.File/separator module java.io.File/separator class-name ".class")                exists? (.exists (File. full-path))]] diff --git a/luxc/src/lux/compiler/jvm/case.clj b/luxc/src/lux/compiler/jvm/case.clj index 79e6c559c..4c195ba36 100644 --- a/luxc/src/lux/compiler/jvm/case.clj +++ b/luxc/src/lux/compiler/jvm/case.clj @@ -63,7 +63,7 @@        (.visitVarInsn Opcodes/ASTORE _var-id)        (.visitMethodInsn Opcodes/INVOKESTATIC "lux/LuxRT" "pm_stack_pop" "([Ljava/lang/Object;)[Ljava/lang/Object;")) -    (&o/$BoolPM _value) +    (&o/$BitPM _value)      (doto writer        stack-peek        &&/unwrap-boolean diff --git a/luxc/src/lux/compiler/jvm/lux.clj b/luxc/src/lux/compiler/jvm/lux.clj index 6a85e1075..d9b9f00d0 100644 --- a/luxc/src/lux/compiler/jvm/lux.clj +++ b/luxc/src/lux/compiler/jvm/lux.clj @@ -24,7 +24,7 @@             java.lang.reflect.Field))  ;; [Exports] -(defn compile-bool [?value] +(defn compile-bit [?value]    (|do [^MethodVisitor *writer* &/get-writer          :let [_ (.visitFieldInsn *writer* Opcodes/GETSTATIC "java/lang/Boolean" (if ?value "TRUE" "FALSE") "Ljava/lang/Boolean;")]]      (return nil))) @@ -253,7 +253,7 @@          :let [def-class (&&/load-class! class-loader (&host-generics/->class-name current-class))                def-type (&a/expr-type* ?body)                is-type? (|case (&a-meta/meta-get &a-meta/type?-tag ?meta) -                         (&/$Some [_ (&/$Bool true)]) +                         (&/$Some [_ (&/$Bit true)])                           true                           _ diff --git a/luxc/src/lux/lexer.clj b/luxc/src/lux/lexer.clj index d56a901ff..be8f8b69a 100644 --- a/luxc/src/lux/lexer.clj +++ b/luxc/src/lux/lexer.clj @@ -9,7 +9,7 @@  (defvariant    ("White_Space" 1)    ("Comment" 1) -  ("Bool" 1) +  ("Bit" 1)    ("Nat" 1)    ("Int" 1)    ("Rev" 1) @@ -130,7 +130,7 @@      (|do [[meta _ token] (&reader/read-regex <regex>)]        (return (&/T [meta (<tag> token)])))) -  lex-bool $Bool #"^(true|false)" +  lex-bit $Bit #"^(true|false)"    )  (do-template [<name> <tag> <regex>] @@ -205,7 +205,7 @@    (&/try-all-% "[Reader Error]"                 (&/|list lex-white-space                          lex-comment -                        lex-bool +                        lex-bit                          lex-nat                          lex-frac                          lex-rev diff --git a/luxc/src/lux/optimizer.clj b/luxc/src/lux/optimizer.clj index 8f331cc95..e1187594c 100644 --- a/luxc/src/lux/optimizer.clj +++ b/luxc/src/lux/optimizer.clj @@ -6,7 +6,7 @@  ;; [Tags]  (defvariant    ;; These tags just have a one-to-one correspondence with Analysis data-structures. -  ("bool" 1) +  ("bit" 1)    ("nat" 1)    ("int" 1)    ("rev" 1) @@ -65,8 +65,8 @@    ("PopPM" 0)    ;; Store the CDN in a register.    ("BindPM" 1) -  ;; Compare the CDN with a boolean value. -  ("BoolPM" 1) +  ;; Compare the CDN with a bit value. +  ("BitPM" 1)    ;; Compare the CDN with a natural value.    ("NatPM" 1)    ;; Compare the CDN with an integer value. @@ -174,8 +174,8 @@      (&a-case/$StoreTestAC _register)      (&/|list ($BindPM _register)) -    (&a-case/$BoolTestAC _value) -    (&/|list ($BoolPM _value) +    (&a-case/$BitTestAC _value) +    (&/|list ($BitPM _value)               $PopPM)      (&a-case/$NatTestAC _value) @@ -275,9 +275,9 @@        ($BindPM _pre-var-id)        ($AltPM pre post)) -    [($BoolPM _pre-value) ($BoolPM _post-value)] +    [($BitPM _pre-value) ($BitPM _post-value)]      (if (= _pre-value _post-value) -      ($BoolPM _pre-value) +      ($BitPM _pre-value)        ($AltPM pre post))      [($NatPM _pre-value) ($NatPM _post-value)] @@ -632,7 +632,7 @@  ;; Shifts the body of a function after a folding is performed.  (defn shift-function-body -  "(-> Scope Scope Bool Optimized Optimized)" +  "(-> Scope Scope Bit Optimized Optimized)"    [old-scope new-scope own-body? body]    (|let [[meta body-] body]      (|case body- @@ -818,7 +818,7 @@        )))  (defn ^:private contains-self-reference? -  "(-> Optimized Bool)" +  "(-> Optimized Bit)"    [body]    (|let [[meta body-] body           stepwise-test (fn [base arg] (or base (contains-self-reference? arg)))] @@ -997,12 +997,12 @@                                       (&/T [_name (optimize _analysis)])))                                   closure))]    (defn ^:private pass-0 -    "(-> Bool Analysis Optimized)" +    "(-> Bit Analysis Optimized)"      [top-level-func? analysis]      (|let [[meta analysis-] analysis]        (|case analysis- -        (&a/$bool value) -        (&/T [meta ($bool value)]) +        (&a/$bit value) +        (&/T [meta ($bit value)])          (&a/$nat value)          (&/T [meta ($nat value)]) @@ -1052,8 +1052,8 @@              (&/$Cons [(&a-case/$StoreTestAC _register) _body] (&/$Nil))              (&/T [meta ($let (pass-0 top-level-func? value) _register (pass-0 top-level-func? _body))]) -            (&/$Cons [(&a-case/$BoolTestAC false) _else] -                     (&/$Cons [(&a-case/$BoolTestAC true) _then] +            (&/$Cons [(&a-case/$BitTestAC false) _else] +                     (&/$Cons [(&a-case/$BitTestAC true) _then]                                (&/$Nil)))              (&/T [meta ($if (pass-0 top-level-func? value) (pass-0 top-level-func? _then) (pass-0 top-level-func? _else))]) diff --git a/luxc/src/lux/parser.clj b/luxc/src/lux/parser.clj index 130a794ac..92a23da81 100644 --- a/luxc/src/lux/parser.clj +++ b/luxc/src/lux/parser.clj @@ -64,8 +64,8 @@        (&lexer/$Comment _)        (return &/$Nil) -      (&lexer/$Bool ?value) -      (return (&/|list (&/T [meta (&/$Bool (Boolean/parseBoolean ?value))]))) +      (&lexer/$Bit ?value) +      (return (&/|list (&/T [meta (&/$Bit (Boolean/parseBoolean ?value))])))        (&lexer/$Nat ?value)        (return (&/|list (&/T [meta (&/$Nat (Long/parseUnsignedLong ?value))]))) diff --git a/luxc/src/lux/type.clj b/luxc/src/lux/type.clj index 6cc33688e..8a498463e 100644 --- a/luxc/src/lux/type.clj +++ b/luxc/src/lux/type.clj @@ -32,7 +32,7 @@  (def Rev* (&/$Primitive &&host/rev-data-tag &/$Nil))  (def Int* (&/$Primitive &&host/int-data-tag &/$Nil)) -(def Bool (&/$Named (&/T ["lux" "Bool"]) (&/$Primitive "#Bool" &/$Nil))) +(def Bit (&/$Named (&/T ["lux" "Bit"]) (&/$Primitive "#Bit" &/$Nil)))  (def Nat (&/$Named (&/T ["lux" "Nat"]) (&/$Apply Nat* I64)))  (def Rev (&/$Named (&/T ["lux" "Rev"]) (&/$Apply Rev* I64)))  (def Int (&/$Named (&/T ["lux" "Int"]) (&/$Apply Int* I64))) @@ -150,8 +150,8 @@                                   (&/$Parameter 1))                    Code-List (&/$Apply Code List)]                (&/$UnivQ empty-env -                        (&/$Sum ;; "lux;Bool" -                         Bool +                        (&/$Sum ;; "lux;Bit" +                         Bit                           (&/$Sum ;; "lux;Nat"                            Nat                            (&/$Sum ;; "lux;Int" @@ -886,7 +886,7 @@      ))  (defn unknown? [type] -  "(-> Type (Lux Bool))" +  "(-> Type (Lux Bit))"    (|case type      (&/$Var id)      (|do [? (bound? id)] diff --git a/luxc/src/lux/type/host.clj b/luxc/src/lux/type/host.clj index 474153316..e0eafdd73 100644 --- a/luxc/src/lux/type/host.clj +++ b/luxc/src/lux/type/host.clj @@ -310,7 +310,7 @@      (contains? primitive-types type-name)))  (def ^:private lux-jvm-type-combos -  #{#{"java.lang.Boolean" "#Bool"} +  #{#{"java.lang.Boolean" "#Bit"}      #{"java.lang.Long" i64-data-tag}      #{"java.lang.Double" "#Frac"}      #{"java.lang.String" "#Text"}}) | 
