From a7f2679f1372f222c1610ed4d1226b1b893fcc1a Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Mon, 16 Jan 2023 03:14:45 -0400 Subject: Can now compile the JVM back-end using itself. --- stdlib/source/library/lux.lux | 264 +++++++++++++++++++++--------------------- 1 file changed, 132 insertions(+), 132 deletions(-) (limited to 'stdlib/source/library/lux.lux') diff --git a/stdlib/source/library/lux.lux b/stdlib/source/library/lux.lux index e2ac5790e..bf922ec17 100644 --- a/stdlib/source/library/lux.lux +++ b/stdlib/source/library/lux.lux @@ -5,14 +5,6 @@ ["" 0 0] #0) -(.def# double_quote - (.int_char# +34) - #0) - -(.def# \n - (.int_char# +10) - #0) - (.def# prelude "library/lux" #1) @@ -981,18 +973,23 @@ ([_ full_name] ({[module name] ({"" name - _ (text#composite module (text#composite ..symbol_separator name))} + _ (.text_composite# module ..symbol_separator name)} module)} full_name))) #0) +(.def# \'' + (.is# Text + (.int_char# +34)) + #0) + ... TODO: Allow asking the compiler for the name of the definition ... currently being defined. That name can then be fed into ... 'wrong_syntax_error' for easier maintenance of the error_messages. (.def# wrong_syntax_error (.is# {#Function Symbol Text} ([_ it] - (text#composite "Wrong syntax for " (symbol#encoded it)))) + (.text_composite# "Wrong syntax for " \'' (symbol#encoded it) \'' "."))) #0) (.def# let'' @@ -1225,7 +1222,7 @@ syntax} syntax)) -(def' .private (n/* param subject) +(def' .private (n#* param subject) {#Function Nat {#Function Nat Nat}} (.as# Nat (.int_*# (.as# Int param) @@ -1262,9 +1259,7 @@ (def' .private quantification_level Text - (.text_composite# double_quote - "quantification_level" - double_quote)) + (.text_composite# \'' "quantification_level" \'')) (def' .private quantified {#Function Code Code} @@ -1879,15 +1874,15 @@ {#Right [state real_name]} {#Default _} - {#Left (all text#composite "Unknown definition: " (symbol#encoded full_name))}} + {#Left (.text_composite# "Unknown definition: " (symbol#encoded full_name))}} constant) {#None} - {#Left (all text#composite "Unknown definition: " (symbol#encoded full_name))}} + {#Left (.text_composite# "Unknown definition: " (symbol#encoded full_name))}} (property#value name definitions)) {#None} - {#Left (all text#composite "Unknown module: " module " @ " (symbol#encoded full_name))}} + {#Left (.text_composite# "Unknown module: " module " @ " (symbol#encoded full_name))}} (property#value module modules)))) (def' .private (|List| expression) @@ -1992,7 +1987,7 @@ ..#scope_type_vars scope_type_vars ..#eval _eval] state] ({{#None} - {#Left (text#composite "Unknown definition: " (symbol#encoded name))} + {#Left (.text_composite# "Unknown definition: " (symbol#encoded name))} {#Some [..#definitions definitions ..#module_hash _ @@ -2000,7 +1995,7 @@ ..#imports _ ..#module_state _]} ({{#None} - {#Left (text#composite "Unknown definition: " (symbol#encoded name))} + {#Left (.text_composite# "Unknown definition: " (symbol#encoded name))} {#Some [exported? definition]} ({{#Alias real_name} @@ -2009,10 +2004,10 @@ {#Definition [def_type def_value]} (if (available? expected_module current_module exported?) {#Right [state [def_type def_value]]} - {#Left (text#composite "Unavailable definition: " (symbol#encoded name))}) + {#Left (.text_composite# "Unavailable definition: " (symbol#encoded name))}) {#Default _} - {#Left (text#composite "Unknown definition: " (symbol#encoded name))}} + {#Left (.text_composite# "Unknown definition: " (symbol#encoded name))}} definition)} (property#value expected_short definitions))} (property#value expected_module modules)))) @@ -2029,7 +2024,7 @@ (definition_value global lux) {#Some _} - {#Left (text#composite "Not a global value: " (symbol#encoded global))}} + {#Left (.text_composite# "Not a global value: " (symbol#encoded global))}} (in_env short lux)) _ @@ -2551,7 +2546,7 @@ (-> ($ I64 Any) I64) (.i64_and# low_mask value)) -(def' .private (n/< reference sample) +(def' .private (n#< reference sample) (-> Nat Nat Bit) (let' [referenceH (high_bits reference) sampleH (high_bits sample)] @@ -2602,10 +2597,10 @@ (failure (..wrong_syntax_error (symbol ..with_template)))} tokens))) -(def' .private (n// param subject) +(def' .private (n#/ param subject) (-> Nat Nat Nat) (if (.int_<# +0 (.as# Int param)) - (if (n/< param subject) + (if (n#< param subject) 0 1) (let' [quotient (|> subject @@ -2615,19 +2610,19 @@ flat (.int_*# (.as# Int param) (.as# Int quotient)) remainder (.i64_-# flat subject)] - (if (n/< param remainder) + (if (n#< param remainder) quotient (.i64_+# 1 quotient))))) -(def' .private (n/% param subject) +(def' .private (n#% param subject) (-> Nat Nat Nat) (let' [flat (.int_*# (.as# Int param) - (.as# Int (n// param subject)))] + (.as# Int (n#/ param subject)))] (.i64_-# flat subject))) -(def' .private (n/min left right) +(def' .private (n#min left right) (-> Nat Nat Nat) - (if (n/< right left) + (if (n#< right left) left right)) @@ -2651,9 +2646,9 @@ (function' again [input output] (if (.i64_=# 0 input) output - (again (n// 10 input) - (text#composite (|> input (n/% 10) digit::format) - output)))))] + (again (n#/ 10 input) + (.text_composite# (|> input (n#% 10) digit::format) + output)))))] (loop value ""))} value)) @@ -2673,10 +2668,10 @@ ((.is# (-> Int Text Text) (function' again [input output] (if (.i64_=# +0 input) - (text#composite sign output) + (.text_composite# sign output) (again (.int_/# +10 input) - (text#composite (|> input (.int_%# +10) (.as# Nat) digit::format) - output))))) + (.text_composite# (|> input (.int_%# +10) (.as# Nat) digit::format) + output))))) (|> value (.int_/# +10) int#abs) (|> value (.int_%# +10) int#abs (.as# Nat) digit::format))))) @@ -2758,7 +2753,7 @@ (def' .private (text#encoded original) (-> Text Text) - (all text#composite ..double_quote original ..double_quote)) + (.text_composite# \'' original \'')) (def' .private (code#encoded code) (-> Code Text) @@ -2784,25 +2779,34 @@ (symbol#encoded [module name]) [_ {#Form xs}] - (all text#composite "(" (|> xs - (list#each code#encoded) - (list#interposed " ") - list#reversed - (list#mix text#composite "")) ")") + (.text_composite# + "(" + (|> xs + (list#each code#encoded) + (list#interposed " ") + list#reversed + (list#mix text#composite "")) + ")") [_ {#Tuple xs}] - (all text#composite "[" (|> xs - (list#each code#encoded) - (list#interposed " ") - list#reversed - (list#mix text#composite "")) "]") + (.text_composite# + "[" + (|> xs + (list#each code#encoded) + (list#interposed " ") + list#reversed + (list#mix text#composite "")) + "]") [_ {#Variant xs}] - (all text#composite "{" (|> xs - (list#each code#encoded) - (list#interposed " ") - list#reversed - (list#mix text#composite "")) "}")} + (.text_composite# + "{" + (|> xs + (list#each code#encoded) + (list#interposed " ") + list#reversed + (list#mix text#composite "")) + "}")} code)) (def' .private (single_expansion token) @@ -3135,7 +3139,7 @@ ..#seed (.i64_+# 1 seed) ..#expected expected ..#location location ..#extensions extensions ..#scope_type_vars scope_type_vars ..#eval _eval] - (local$ (all text#composite "__gensym__" prefix (nat#encoded seed)))}} + (local$ (.text_composite# "__gensym__" prefix (nat#encoded seed)))}} state)) (with_template [ ] @@ -3166,44 +3170,44 @@ (def' .private (type#encoded type) (-> Type Text) ({{#Nominal name params} - (all text#composite - "(Nominal " (text#encoded name) - (|> params - (list#each (function' [it] (|> it type#encoded (text#composite " ")))) - list#reversed - (list#mix text#composite "")) - ")") + (.text_composite# + "(Nominal " (text#encoded name) + (|> params + (list#each (function' [it] (|> it type#encoded (.text_composite# " ")))) + list#reversed + (list#mix text#composite "")) + ")") {#Sum _} - (all text#composite "{" (|> (flat_variant type) (list#each type#encoded) (list#interposed " ") list#reversed (list#mix text#composite "")) "}") + (.text_composite# "{" (|> (flat_variant type) (list#each type#encoded) (list#interposed " ") list#reversed (list#mix text#composite "")) "}") {#Product _} - (all text#composite "[" (|> (flat_tuple type) (list#each type#encoded) (list#interposed " ") list#reversed (list#mix text#composite "")) "]") + (.text_composite# "[" (|> (flat_tuple type) (list#each type#encoded) (list#interposed " ") list#reversed (list#mix text#composite "")) "]") {#Function _} - (all text#composite "(-> " (|> (flat_lambda type) (list#each type#encoded) (list#interposed " ") list#reversed (list#mix text#composite "")) ")") + (.text_composite# "(-> " (|> (flat_lambda type) (list#each type#encoded) (list#interposed " ") list#reversed (list#mix text#composite "")) ")") {#Parameter id} (nat#encoded id) {#Var id} - (all text#composite "-" (nat#encoded id)) + (.text_composite# "-" (nat#encoded id)) {#Ex id} - (all text#composite "+" (nat#encoded id)) + (.text_composite# "+" (nat#encoded id)) {#UnivQ env body} - (all text#composite "(All " (type#encoded body) ")") + (.text_composite# "(All " (type#encoded body) ")") {#ExQ env body} - (all text#composite "(Ex " (type#encoded body) ")") + (.text_composite# "(Ex " (type#encoded body) ")") {#Apply _} (let' [[func args] (flat_application type)] - (all text#composite - "(" (type#encoded func) " " - (|> args (list#each type#encoded) (list#interposed " ") list#reversed (list#mix text#composite "")) - ")")) + (.text_composite# + "(" (type#encoded func) " " + (|> args (list#each type#encoded) (list#interposed " ") list#reversed (list#mix text#composite "")) + ")")) {#Named name _} (symbol#encoded name)} @@ -3263,9 +3267,8 @@ (in (symbol$ name)) _ - (failure (all text#composite - "Invalid static value: " (symbol#encoded name) - " : " (type#encoded type)))} + (failure (.text_composite# "Invalid static value: " (symbol#encoded name) + " : " (type#encoded type)))} (anonymous_type type))} type+value))))] (function' literal [only_global? token] @@ -3361,11 +3364,12 @@ (meta#in (list)) _ - (failure (all text#composite "'when' expects an even number of tokens: " (|> branches - (list#each code#encoded) - (list#interposed " ") - list#reversed - (list#mix text#composite ""))))} + (failure (.text_composite# "'when' expects an even number of tokens: " + (|> branches + (list#each code#encoded) + (list#interposed " ") + list#reversed + (list#mix text#composite ""))))} branches)) (def' .public when @@ -3939,7 +3943,7 @@ {#Right state module} _ - {#Left (all text#composite "Unknown module: " name)})))) + {#Left (.text_composite# "Unknown module: " name)})))) (def (type_slot [module name]) (-> Symbol (Meta [Bit Label])) @@ -3955,7 +3959,7 @@ (meta#in [exported (as Label value)]) _ - (failure (text#composite "Unknown slot: " (symbol#encoded [module name])))))) + (failure (.text_composite# "Unknown slot: " (symbol#encoded [module name])))))) (def (slot_family expected_module expected_record) (-> Text Type (Meta (Maybe (List Symbol)))) @@ -4060,9 +4064,8 @@ (meta#in tags) _ - (failure (all text#composite - "No tags available for type: " - (type#encoded implementation_type))))) + (failure (.text_composite# "No tags available for type: " + (type#encoded implementation_type))))) .let [tag_mappings (is (List [Text Code]) (list#each (function (_ tag) [(product#right tag) @@ -4077,7 +4080,7 @@ (in (list tag value)) _ - (failure (text#composite "Unknown implementation member: " slot_name))) + (failure (.text_composite# "Unknown implementation member: " slot_name))) _ (failure "Invalid implementation member.")))) @@ -4092,7 +4095,7 @@ {#Item head tail} (list#mix (function (_ right left) - (all text#composite left separator right)) + (.text_composite# left separator right)) head tail))) @@ -4391,7 +4394,7 @@ _ (when root "" hierarchy - _ (all text#composite root ..module_separator hierarchy)))) + _ (.text_composite# root ..module_separator hierarchy)))) (def (normal_parallel_path hierarchy root) (-> Text Text (Maybe Text)) @@ -4423,6 +4426,10 @@ [_ {#Item _ tail}] (list#after (.i64_-# 1 amount) tail))) +(def \n + Text + (.int_char# +10)) + (def (absolute_module_name nested? relative_root module) (-> Bit Text Text (Meta Text)) (when (relative_ups 0 module) @@ -4434,7 +4441,7 @@ relatives (let [parts (text#all_split_by ..module_separator relative_root) jumps (.i64_-# 1 relatives)] - (if (n/< (list#size parts) jumps) + (if (n#< (list#size parts) jumps) (let [prefix (|> parts list#reversed (list#after jumps) @@ -4443,7 +4450,7 @@ clean (.text_clip# relatives (|> module .text_size# (.i64_-# relatives)) module) output (when (.text_size# clean) 0 prefix - _ (all text#composite prefix ..module_separator clean))] + _ (.text_composite# prefix ..module_separator clean))] (meta#in output)) (failure (.text_composite# "Cannot climb the module hierarchy..." \n "Importing module: " module \n @@ -4513,9 +4520,8 @@ _ (do meta#monad [current_module current_module_name] - (failure (all text#composite - "Wrong syntax for import @ " current_module - \n (code#encoded token))))))) + (failure (.text_composite# "Wrong syntax for import @ " current_module + \n (code#encoded token))))))) imports)] (in (list#conjoint imports')))) @@ -4550,19 +4556,18 @@ {#Right state (list#conjoint to_alias)}) {#None} - {#Left (all text#composite - "Unknown module: " (text#encoded module) \n - "Current module: " (when current_module - {#Some current_module} - (text#encoded current_module) - - {#None} - "???") \n - "Known modules: " (|> modules - (list#each (function (_ [name module]) - (text$ name))) - tuple$ - code#encoded))}) + {#Left (.text_composite# "Unknown module: " (text#encoded module) \n + "Current module: " (when current_module + {#Some current_module} + (text#encoded current_module) + + {#None} + "???") \n + "Known modules: " (|> modules + (list#each (function (_ [name module]) + (text$ name))) + tuple$ + code#encoded))}) )) (def (list#only p xs) @@ -4592,7 +4597,7 @@ (function (_ _def) (if (is_member? all_defs _def) (meta#in []) - (failure (all text#composite _def " is not defined in module " imported_module " @ " current_module))))) + (failure (.text_composite# _def " is not defined in module " imported_module " @ " current_module))))) referred_defs)) (def (alias_definition imported_module def) @@ -4761,13 +4766,13 @@ {#Right [compiler implementation_type]} _ - {#Left (all text#composite "Unknown var: " (symbol#encoded full_name))})) + {#Left (.text_composite# "Unknown var: " (symbol#encoded full_name))})) (when (definition_type full_name compiler) {#Some implementation_type} {#Right [compiler implementation_type]} _ - {#Left (all text#composite "Unknown var: " (symbol#encoded full_name))})))] + {#Left (.text_composite# "Unknown var: " (symbol#encoded full_name))})))] (when temp {#Right [compiler temp]} (let [[..#info _ ..#source _ ..#current_module _ ..#modules _ @@ -4861,7 +4866,7 @@ implementation_evidence (record_slots init_type)] (when implementation_evidence {#None} - (failure (text#composite "Can only 'open' implementations: " (type#encoded init_type))) + (failure (.text_composite# "Can only 'open' implementations: " (type#encoded init_type))) {#Some tags,members} (do meta#monad @@ -5007,9 +5012,8 @@ (in (list#conjoint declarations))) _ - (failure (all text#composite - "Can only 'use' implementations: " (symbol#encoded implementation) - " : " (type#encoded interface)))))) + (failure (.text_composite# "Can only 'use' implementations: " (symbol#encoded implementation) + " : " (type#encoded interface)))))) (def (localized module global) (-> Text Symbol Symbol) @@ -5101,13 +5105,12 @@ (in referral) _ - (failure (all text#composite - (..wrong_syntax_error (symbol ..refer)) - \n "@ " current_module - \n (|> extra - (list#each code#encoded) - (list#interposed " ") - (list#mix text#composite ""))))))) + (failure (.text_composite# (..wrong_syntax_error (symbol ..refer)) + \n "@ " current_module + \n (|> extra + (list#each code#encoded) + (list#interposed " ") + (list#mix text#composite ""))))))) (def .public refer (macro (_ tokens) @@ -5475,10 +5478,9 @@ (single_expansion expr) _ - (failure (all text#composite - "Incorrect expansion in with_expansions" - " | Binding: " (text#encoded var_name) - " | Expression: " (code#encoded expr))))] + (failure (.text_composite# "Incorrect expansion in with_expansions" + " | Binding: " (text#encoded var_name) + " | Expression: " (code#encoded expr))))] (again &rest (property#with var_name expansion map))) {#End} @@ -5627,21 +5629,19 @@ (in (as ..Text value)) _ - (failure (all text#composite - "Invalid target platform (must be a value of type Text): " (symbol#encoded symbol) - " : " (..code#encoded (..type_code type)))))) + (failure (.text_composite# "Invalid target platform (must be a value of type Text): " (symbol#encoded symbol) + " : " (..code#encoded (..type_code type)))))) _ - (failure (all text#composite - "Invalid target platform syntax: " (..code#encoded choice) - \n "Must be either a text literal or a symbol."))))) + (failure (.text_composite# "Invalid target platform syntax: " (..code#encoded choice) + \n "Must be either a text literal or a symbol."))))) target_pick (is (-> Text (List [Code Code]) (Maybe Code) (Meta (List Code))) (function (target_pick target options default) (when options {#End} (when default {#None} - (failure (all text#composite "No code for target platform: " target)) + (failure (.text_composite# "No code for target platform: " target)) {#Some default} (meta#in (list default))) @@ -5685,7 +5685,7 @@ (in (list (` {.#Ex (, (nat$ var_id))}))) {#None} - (failure (text#composite "Indexed-type does not exist: " (nat#encoded idx))))) + (failure (.text_composite# "Indexed-type does not exist: " (nat#encoded idx))))) _ (failure (..wrong_syntax_error (symbol ..$))))))) @@ -5874,7 +5874,7 @@ Type (let [[_ short] (symbol )] {#Named [..prelude short] - {.#Nominal (text#composite "#Extension/" short) (list)}}))] + {.#Nominal (.text_composite# "#Extension/" short) (list)}}))] [Analysis] [Synthesis] -- cgit v1.2.3