diff options
Diffstat (limited to '')
29 files changed, 405 insertions, 391 deletions
diff --git a/stdlib/source/lux.lux b/stdlib/source/lux.lux index 2409d3f39..fa33ac0b4 100644 --- a/stdlib/source/lux.lux +++ b/stdlib/source/lux.lux @@ -1,21 +1,21 @@ -("lux def" dummy-cursor +("lux def" dummy-location ["" 0 0] [["" 0 0] (9 #1 (0 #0))] #1) ("lux def" double-quote ("lux i64 char" +34) - [dummy-cursor (9 #1 (0 #0))] + [dummy-location (9 #1 (0 #0))] #0) ("lux def" new-line ("lux i64 char" +10) - [dummy-cursor (9 #1 (0 #0))] + [dummy-location (9 #1 (0 #0))] #0) ("lux def" __paragraph ("lux text concat" new-line new-line) - [dummy-cursor (9 #1 (0 #0))] + [dummy-location (9 #1 (0 #0))] #0) ## (type: Any @@ -24,11 +24,11 @@ ("lux check type" (9 #1 ["lux" "Any"] (8 #0 (0 #0) (4 #0 1)))) - [dummy-cursor - (9 #1 (0 #1 [[dummy-cursor (7 #0 ["lux" "doc"])] - [dummy-cursor (5 #0 ("lux text concat" - ("lux text concat" "The type of things whose type is irrelevant." __paragraph) - "It can be used to write functions or data-structures that can take, or return, anything."))]] + [dummy-location + (9 #1 (0 #1 [[dummy-location (7 #0 ["lux" "doc"])] + [dummy-location (5 #0 ("lux text concat" + ("lux text concat" "The type of things whose type is irrelevant." __paragraph) + "It can be used to write functions or data-structures that can take, or return, anything."))]] (0 #0)))] #1) @@ -38,11 +38,11 @@ ("lux check type" (9 #1 ["lux" "Nothing"] (7 #0 (0 #0) (4 #0 1)))) - [dummy-cursor - (9 #1 (0 #1 [[dummy-cursor (7 #0 ["lux" "doc"])] - [dummy-cursor (5 #0 ("lux text concat" - ("lux text concat" "The type of things whose type is undefined." __paragraph) - "Useful for expressions that cause errors or other 'extraordinary' conditions."))]] + [dummy-location + (9 #1 (0 #1 [[dummy-location (7 #0 ["lux" "doc"])] + [dummy-location (5 #0 ("lux text concat" + ("lux text concat" "The type of things whose type is undefined." __paragraph) + "Useful for expressions that cause errors or other 'extraordinary' conditions."))]] (0 #0)))] #1) @@ -57,11 +57,11 @@ ## "lux.Cons" (2 #0 (4 #0 1) (9 #0 (4 #0 1) (4 #0 0)))))) - [dummy-cursor - (9 #1 (0 #1 [[dummy-cursor (7 #0 ["lux" "type-args"])] - [dummy-cursor (9 #0 (0 #1 [dummy-cursor (5 #0 "a")] (0 #0)))]] - (0 #1 [[dummy-cursor (7 #0 ["lux" "doc"])] - [dummy-cursor (5 #0 "A potentially empty list of values.")]] + [dummy-location + (9 #1 (0 #1 [[dummy-location (7 #0 ["lux" "type-args"])] + [dummy-location (9 #0 (0 #1 [dummy-location (5 #0 "a")] (0 #0)))]] + (0 #1 [[dummy-location (7 #0 ["lux" "doc"])] + [dummy-location (5 #0 "A potentially empty list of values.")]] (0 #0))))] ["Nil" "Cons"] #1) @@ -70,9 +70,9 @@ ("lux check type" (9 #1 ["lux" "Bit"] (0 #0 "#Bit" #Nil))) - [dummy-cursor - (9 #1 (#Cons [[dummy-cursor (7 #0 ["lux" "doc"])] - [dummy-cursor (5 #0 "Your standard, run-of-the-mill boolean values (as bits).")]] + [dummy-location + (9 #1 (#Cons [[dummy-location (7 #0 ["lux" "doc"])] + [dummy-location (5 #0 "Your standard, run-of-the-mill boolean values (as bits).")]] #Nil))] #1) @@ -81,9 +81,9 @@ (9 #1 ["lux" "I64"] (7 #0 (0 #0) (0 #0 "#I64" (#Cons (4 #0 1) #Nil))))) - [dummy-cursor - (9 #1 (#Cons [[dummy-cursor (7 #0 ["lux" "doc"])] - [dummy-cursor (5 #0 "64-bit integers without any semantics.")]] + [dummy-location + (9 #1 (#Cons [[dummy-location (7 #0 ["lux" "doc"])] + [dummy-location (5 #0 "64-bit integers without any semantics.")]] #Nil))] #1) @@ -91,11 +91,11 @@ ("lux check type" (9 #1 ["lux" "Nat"] (0 #0 "#I64" (#Cons (0 #0 "#Nat" #Nil) #Nil)))) - [dummy-cursor - (9 #1 (#Cons [[dummy-cursor (7 #0 ["lux" "doc"])] - [dummy-cursor (5 #0 ("lux text concat" - ("lux text concat" "Natural numbers (unsigned integers)." __paragraph) - "They start at zero (0) and extend in the positive direction."))]] + [dummy-location + (9 #1 (#Cons [[dummy-location (7 #0 ["lux" "doc"])] + [dummy-location (5 #0 ("lux text concat" + ("lux text concat" "Natural numbers (unsigned integers)." __paragraph) + "They start at zero (0) and extend in the positive direction."))]] #Nil))] #1) @@ -103,9 +103,9 @@ ("lux check type" (9 #1 ["lux" "Int"] (0 #0 "#I64" (#Cons (0 #0 "#Int" #Nil) #Nil)))) - [dummy-cursor - (9 #1 (#Cons [[dummy-cursor (7 #0 ["lux" "doc"])] - [dummy-cursor (5 #0 "Your standard, run-of-the-mill integer numbers.")]] + [dummy-location + (9 #1 (#Cons [[dummy-location (7 #0 ["lux" "doc"])] + [dummy-location (5 #0 "Your standard, run-of-the-mill integer numbers.")]] #Nil))] #1) @@ -113,11 +113,11 @@ ("lux check type" (9 #1 ["lux" "Rev"] (0 #0 "#I64" (#Cons (0 #0 "#Rev" #Nil) #Nil)))) - [dummy-cursor - (9 #1 (#Cons [[dummy-cursor (7 #0 ["lux" "doc"])] - [dummy-cursor (5 #0 ("lux text concat" - ("lux text concat" "Fractional numbers that live in the interval [0,1)." __paragraph) - "Useful for probability, and other domains that work within that interval."))]] + [dummy-location + (9 #1 (#Cons [[dummy-location (7 #0 ["lux" "doc"])] + [dummy-location (5 #0 ("lux text concat" + ("lux text concat" "Fractional numbers that live in the interval [0,1)." __paragraph) + "Useful for probability, and other domains that work within that interval."))]] #Nil))] #1) @@ -125,9 +125,9 @@ ("lux check type" (9 #1 ["lux" "Frac"] (0 #0 "#Frac" #Nil))) - [dummy-cursor - (9 #1 (#Cons [[dummy-cursor (7 #0 ["lux" "doc"])] - [dummy-cursor (5 #0 "Your standard, run-of-the-mill floating-point (fractional) numbers.")]] + [dummy-location + (9 #1 (#Cons [[dummy-location (7 #0 ["lux" "doc"])] + [dummy-location (5 #0 "Your standard, run-of-the-mill floating-point (fractional) numbers.")]] #Nil))] #1) @@ -135,9 +135,9 @@ ("lux check type" (9 #1 ["lux" "Text"] (0 #0 "#Text" #Nil))) - [dummy-cursor - (9 #1 (#Cons [[dummy-cursor (7 #0 ["lux" "doc"])] - [dummy-cursor (5 #0 "Your standard, run-of-the-mill string values.")]] + [dummy-location + (9 #1 (#Cons [[dummy-location (7 #0 ["lux" "doc"])] + [dummy-location (5 #0 "Your standard, run-of-the-mill string values.")]] #Nil))] #1) @@ -145,9 +145,9 @@ ("lux check type" (9 #1 ["lux" "Name"] (2 #0 Text Text))) - [dummy-cursor - (9 #1 (#Cons [[dummy-cursor (7 #0 ["lux" "doc"])] - [dummy-cursor (5 #0 "A name. It is used as part of Lux syntax to represent identifiers and tags.")]] + [dummy-location + (9 #1 (#Cons [[dummy-location (7 #0 ["lux" "doc"])] + [dummy-location (5 #0 "A name. It is used as part of Lux syntax to represent identifiers and tags.")]] #Nil))] #1) @@ -161,11 +161,11 @@ Any ## "lux.Some" (4 #0 1)))) - [dummy-cursor - (9 #1 (#Cons [[dummy-cursor (7 #0 ["lux" "type-args"])] - [dummy-cursor (9 #0 (#Cons [dummy-cursor (5 #0 "a")] #Nil))]] - (#Cons [[dummy-cursor (7 #0 ["lux" "doc"])] - [dummy-cursor (5 #0 "A potentially missing value.")]] + [dummy-location + (9 #1 (#Cons [[dummy-location (7 #0 ["lux" "type-args"])] + [dummy-location (9 #0 (#Cons [dummy-location (5 #0 "a")] #Nil))]] + (#Cons [[dummy-location (7 #0 ["lux" "doc"])] + [dummy-location (5 #0 "A potentially missing value.")]] #Nil)))] ["None" "Some"] #1) @@ -215,25 +215,25 @@ ("lux check type" (2 #0 Type Type)))} ("lux check type" (9 #0 Type List)))} ("lux check type" (9 #0 (4 #0 1) (4 #0 0))))) - [dummy-cursor - (9 #1 (#Cons [[dummy-cursor (7 #0 ["lux" "doc"])] - [dummy-cursor (5 #0 "This type represents the data-structures that are used to specify types themselves.")]] - (#Cons [[dummy-cursor (7 #0 ["lux" "type-rec?"])] - [dummy-cursor (0 #0 #1)]] + [dummy-location + (9 #1 (#Cons [[dummy-location (7 #0 ["lux" "doc"])] + [dummy-location (5 #0 "This type represents the data-structures that are used to specify types themselves.")]] + (#Cons [[dummy-location (7 #0 ["lux" "type-rec?"])] + [dummy-location (0 #0 #1)]] #Nil)))] ["Primitive" "Sum" "Product" "Function" "Parameter" "Var" "Ex" "UnivQ" "ExQ" "Apply" "Named"] #1) -## (type: Cursor +## (type: Location ## {#module Text ## #line Nat ## #column Nat}) -("lux def type tagged" Cursor - (#Named ["lux" "Cursor"] +("lux def type tagged" Location + (#Named ["lux" "Location"] (#Product Text (#Product Nat Nat))) - [dummy-cursor - (9 #1 (#Cons [[dummy-cursor (7 #0 ["lux" "doc"])] - [dummy-cursor (5 #0 "Cursors are for specifying the location of Code nodes in Lux files during compilation.")]] + [dummy-location + (9 #1 (#Cons [[dummy-location (7 #0 ["lux" "doc"])] + [dummy-location (5 #0 "Locations are for specifying the location of Code nodes in Lux files during compilation.")]] #Nil))] ["module" "line" "column"] #1) @@ -247,11 +247,11 @@ (#UnivQ #Nil (#Product (#Parameter 3) (#Parameter 1))))) - [dummy-cursor - (9 #1 (#Cons [[dummy-cursor (7 #0 ["lux" "doc"])] - [dummy-cursor (5 #0 "The type of things that can be annotated with meta-data of arbitrary types.")]] - (#Cons [[dummy-cursor (7 #0 ["lux" "type-args"])] - [dummy-cursor (9 #0 (#Cons [dummy-cursor (5 #0 "m")] (#Cons [dummy-cursor (5 #0 "v")] #Nil)))]] + [dummy-location + (9 #1 (#Cons [[dummy-location (7 #0 ["lux" "doc"])] + [dummy-location (5 #0 "The type of things that can be annotated with meta-data of arbitrary types.")]] + (#Cons [[dummy-location (7 #0 ["lux" "type-args"])] + [dummy-location (9 #0 (#Cons [dummy-location (5 #0 "m")] (#Cons [dummy-location (5 #0 "v")] #Nil)))]] #Nil)))] ["meta" "datum"] #1) @@ -301,111 +301,111 @@ ("lux check type" (#Apply (#Apply (#Parameter 1) (#Parameter 0)) (#Parameter 1))))) - [dummy-cursor - (9 #1 (#Cons [[dummy-cursor (7 #0 ["lux" "type-args"])] - [dummy-cursor (9 #0 (#Cons [dummy-cursor (5 #0 "w")] #Nil))]] + [dummy-location + (9 #1 (#Cons [[dummy-location (7 #0 ["lux" "type-args"])] + [dummy-location (9 #0 (#Cons [dummy-location (5 #0 "w")] #Nil))]] #Nil))] ["Bit" "Nat" "Int" "Rev" "Frac" "Text" "Identifier" "Tag" "Form" "Tuple" "Record"] #1) ## (type: Code -## (Ann Cursor (Code' (Ann Cursor)))) +## (Ann Location (Code' (Ann Location)))) ("lux def" Code (#Named ["lux" "Code"] ({w (#Apply (#Apply w Code') w)} - ("lux check type" (#Apply Cursor Ann)))) - [dummy-cursor - (#Record (#Cons [[dummy-cursor (#Tag ["lux" "doc"])] - [dummy-cursor (#Text "The type of Code nodes for Lux syntax.")]] + ("lux check type" (#Apply Location Ann)))) + [dummy-location + (#Record (#Cons [[dummy-location (#Tag ["lux" "doc"])] + [dummy-location (#Text "The type of Code nodes for Lux syntax.")]] #Nil))] #1) ("lux def" _ann - ("lux check" (#Function (#Apply (#Apply Cursor Ann) + ("lux check" (#Function (#Apply (#Apply Location Ann) Code') Code) ([_ data] - [dummy-cursor data])) - [dummy-cursor (#Record #Nil)] + [dummy-location data])) + [dummy-location (#Record #Nil)] #0) ("lux def" bit$ ("lux check" (#Function Bit Code) ([_ value] (_ann (#Bit value)))) - [dummy-cursor (#Record #Nil)] + [dummy-location (#Record #Nil)] #0) ("lux def" nat$ ("lux check" (#Function Nat Code) ([_ value] (_ann (#Nat value)))) - [dummy-cursor (#Record #Nil)] + [dummy-location (#Record #Nil)] #0) ("lux def" int$ ("lux check" (#Function Int Code) ([_ value] (_ann (#Int value)))) - [dummy-cursor (#Record #Nil)] + [dummy-location (#Record #Nil)] #0) ("lux def" rev$ ("lux check" (#Function Rev Code) ([_ value] (_ann (#Rev value)))) - [dummy-cursor (#Record #Nil)] + [dummy-location (#Record #Nil)] #0) ("lux def" frac$ ("lux check" (#Function Frac Code) ([_ value] (_ann (#Frac value)))) - [dummy-cursor (#Record #Nil)] + [dummy-location (#Record #Nil)] #0) ("lux def" text$ ("lux check" (#Function Text Code) ([_ text] (_ann (#Text text)))) - [dummy-cursor (#Record #Nil)] + [dummy-location (#Record #Nil)] #0) ("lux def" identifier$ ("lux check" (#Function Name Code) ([_ name] (_ann (#Identifier name)))) - [dummy-cursor (#Record #Nil)] + [dummy-location (#Record #Nil)] #0) ("lux def" local-identifier$ ("lux check" (#Function Text Code) ([_ name] (_ann (#Identifier ["" name])))) - [dummy-cursor (#Record #Nil)] + [dummy-location (#Record #Nil)] #0) ("lux def" tag$ ("lux check" (#Function Name Code) ([_ name] (_ann (#Tag name)))) - [dummy-cursor (#Record #Nil)] + [dummy-location (#Record #Nil)] #0) ("lux def" local-tag$ ("lux check" (#Function Text Code) ([_ name] (_ann (#Tag ["" name])))) - [dummy-cursor (#Record #Nil)] + [dummy-location (#Record #Nil)] #0) ("lux def" form$ ("lux check" (#Function (#Apply Code List) Code) ([_ tokens] (_ann (#Form tokens)))) - [dummy-cursor (#Record #Nil)] + [dummy-location (#Record #Nil)] #0) ("lux def" tuple$ ("lux check" (#Function (#Apply Code List) Code) ([_ tokens] (_ann (#Tuple tokens)))) - [dummy-cursor (#Record #Nil)] + [dummy-location (#Record #Nil)] #0) ("lux def" record$ ("lux check" (#Function (#Apply (#Product Code Code) List) Code) ([_ tokens] (_ann (#Record tokens)))) - [dummy-cursor (#Record #Nil)] + [dummy-location (#Record #Nil)] #0) ## (type: Definition @@ -518,11 +518,11 @@ #1) ## (type: Source -## [Cursor Nat Text]) +## [Location Nat Text]) ("lux def" Source ("lux check type" (#Named ["lux" "Source"] - (#Product Cursor (#Product Nat Text)))) + (#Product Location (#Product Nat Text)))) (record$ #Nil) #1) @@ -644,7 +644,7 @@ ## (type: Lux ## {#info Info ## #source Source -## #cursor Cursor +## #location Location ## #current-module (Maybe Text) ## #modules (List [Text Module]) ## #scopes (List Scope) @@ -660,8 +660,8 @@ Info (#Product ## "lux.source" Source - (#Product ## "lux.cursor" - Cursor + (#Product ## "lux.location" + Location (#Product ## "lux.current-module" (#Apply Text Maybe) (#Product ## "lux.modules" @@ -687,7 +687,7 @@ ("lux text concat" "It is provided to macros during their invocation, so they can access compiler data." __paragraph) "Caveat emptor: Avoid fiddling with it, unless you know what you're doing.")))] #Nil)) - ["info" "source" "cursor" "current-module" "modules" "scopes" "type-context" "expected" "seed" "scope-type-vars" "extensions" "host"] + ["info" "source" "location" "current-module" "modules" "scopes" "type-context" "expected" "seed" "scope-type-vars" "extensions" "host"] #1) ## (type: (Meta a) @@ -805,7 +805,7 @@ (record$ #.Nil) #0) -("lux def" cursor-code +("lux def" location-code ("lux check" Code (tuple$ (#Cons (text$ "") (#Cons (nat$ 0) (#Cons (nat$ 0) #Nil))))) (record$ #Nil) @@ -815,7 +815,7 @@ ("lux check" (#Function Name (#Function Code Code)) ([_ tag] ([_ value] - (tuple$ (#Cons cursor-code + (tuple$ (#Cons location-code (#Cons (form$ (#Cons (tag$ tag) (#Cons value #Nil))) #Nil)))))) (record$ #Nil) @@ -1723,7 +1723,7 @@ (let' [[module name] full-name {#info info #source source #current-module _ #modules modules #scopes scopes #type-context types #host host - #seed seed #expected expected #cursor cursor #extensions extensions + #seed seed #expected expected #location location #extensions extensions #scope-type-vars scope-type-vars} state] ({(#Some {#module-hash _ #module-aliases _ #definitions definitions #imports _ #tags tags #types types #module-annotations _ #module-state _}) ({(#Some constant) @@ -1907,7 +1907,7 @@ ($' Meta Text) ({{#info info #source source #current-module current-module #modules modules #scopes scopes #type-context types #host host - #seed seed #expected expected #cursor cursor #extensions extensions + #seed seed #expected expected #location location #extensions extensions #scope-type-vars scope-type-vars} ({(#Some module-name) (#Right [state module-name]) @@ -2331,7 +2331,7 @@ ({{#info info #source source #current-module _ #modules modules #scopes scopes #type-context types #host host #seed seed #expected expected - #cursor cursor #extensions extensions + #location location #extensions extensions #scope-type-vars scope-type-vars} (#Right state (find-macro' modules current-module module name))} state))))) @@ -2595,12 +2595,12 @@ ({{#info info #source source #current-module _ #modules modules #scopes scopes #type-context types #host host #seed seed #expected expected - #cursor cursor #extensions extensions + #location location #extensions extensions #scope-type-vars scope-type-vars} (#Right {#info info #source source #current-module _ #modules modules #scopes scopes #type-context types #host host #seed ("lux i64 +" 1 seed) #expected expected - #cursor cursor #extensions extensions + #location location #extensions extensions #scope-type-vars scope-type-vars} (local-identifier$ ($_ text@compose "__gensym__" prefix (nat@encode seed))))} state)) @@ -2679,7 +2679,7 @@ ?type)] (return (list (` ("lux def" (~ name) (~ body'') - [(~ cursor-code) + [(~ location-code) (#.Record #.Nil)] (~ (bit$ export?))))))) @@ -2983,10 +2983,10 @@ meta _ - (` (#.Cons [[(~ cursor-code) (#.Tag ["lux" "func-args"])] - [(~ cursor-code) (#.Tuple (.list (~+ (list@map (function (_ arg) - (` [(~ cursor-code) (#.Text (~ (text$ (code@encode arg))))])) - args))))]] + (` (#.Cons [[(~ location-code) (#.Tag ["lux" "func-args"])] + [(~ location-code) (#.Tuple (.list (~+ (list@map (function (_ arg) + (` [(~ location-code) (#.Text (~ (text$ (code@encode arg))))])) + args))))]] (~ meta))))) (def:' (with-type-args args) @@ -3067,7 +3067,7 @@ =meta (process-def-meta meta)] (return (list (` ("lux def" (~ name) (~ body) - [(~ cursor-code) + [(~ location-code) (#.Record (~ (with-func-args args =meta)))] (~ (bit$ exported?))))))) @@ -3077,8 +3077,8 @@ (def: (meta-code-add addition meta) (-> [Code Code] Code Code) (case [addition meta] - [[name value] [cursor (#Record pairs)]] - [cursor (#Record (#Cons [name value] pairs))] + [[name value] [location (#Record pairs)]] + [location (#Record (#Cons [name value] pairs))] _ meta)) @@ -3086,7 +3086,7 @@ (def: (meta-code-merge addition base) (-> Code Code Code) (case addition - [cursor (#Record pairs)] + [location (#Record pairs)] (list@fold meta-code-add base pairs) _ @@ -3135,7 +3135,7 @@ =meta (process-def-meta meta)] (return (list (` ("lux def" (~ name) (~ body) - [(~ cursor-code) + [(~ location-code) (#Record (~ =meta))] (~ (bit$ exported?))))))) @@ -3159,11 +3159,11 @@ (let [[exported? tokens'] (export^ tokens) ?parts (: (Maybe [Name (List Code) Code (List Code)]) (case tokens' - (^ (list& [_ (#Form (list& [_ (#Identifier name)] args))] [meta-rec-cursor (#Record meta-rec-parts)] sigs)) - (#Some name args [meta-rec-cursor (#Record meta-rec-parts)] sigs) + (^ (list& [_ (#Form (list& [_ (#Identifier name)] args))] [meta-rec-location (#Record meta-rec-parts)] sigs)) + (#Some name args [meta-rec-location (#Record meta-rec-parts)] sigs) - (^ (list& [_ (#Identifier name)] [meta-rec-cursor (#Record meta-rec-parts)] sigs)) - (#Some name #Nil [meta-rec-cursor (#Record meta-rec-parts)] sigs) + (^ (list& [_ (#Identifier name)] [meta-rec-location (#Record meta-rec-parts)] sigs)) + (#Some name #Nil [meta-rec-location (#Record meta-rec-parts)] sigs) (^ (list& [_ (#Form (list& [_ (#Identifier name)] args))] sigs)) (#Some name args (` {}) sigs) @@ -3260,7 +3260,7 @@ "(default +20 #.None) ## => +20"))} (case tokens (^ (list else maybe)) - (let [g!temp (: Code [dummy-cursor (#Identifier ["" ""])]) + (let [g!temp (: Code [dummy-location (#Identifier ["" ""])]) code (` (case (~ maybe) (#.Some (~ g!temp)) (~ g!temp) @@ -3418,7 +3418,7 @@ (function (_ state) (let [{#info info #source source #current-module _ #modules modules #scopes scopes #type-context types #host host - #seed seed #expected expected #cursor cursor #extensions extensions + #seed seed #expected expected #location location #extensions extensions #scope-type-vars scope-type-vars} state] (case (get name modules) (#Some module) @@ -3481,7 +3481,7 @@ (function (_ state) (let [{#info info #source source #current-module _ #modules modules #scopes scopes #type-context types #host host - #seed seed #expected expected #cursor cursor #extensions extensions + #seed seed #expected expected #location location #extensions extensions #scope-type-vars scope-type-vars} state] (case expected (#Some type) @@ -3553,11 +3553,11 @@ (let [[exported? tokens'] (export^ tokens) ?parts (: (Maybe [Code (List Code) Code Code (List Code)]) (case tokens' - (^ (list& [_ (#Form (list& name args))] [meta-rec-cursor (#Record meta-rec-parts)] type definitions)) - (#Some name args type [meta-rec-cursor (#Record meta-rec-parts)] definitions) + (^ (list& [_ (#Form (list& name args))] [meta-rec-location (#Record meta-rec-parts)] type definitions)) + (#Some name args type [meta-rec-location (#Record meta-rec-parts)] definitions) - (^ (list& name [meta-rec-cursor (#Record meta-rec-parts)] type definitions)) - (#Some name #Nil type [meta-rec-cursor (#Record meta-rec-parts)] definitions) + (^ (list& name [meta-rec-location (#Record meta-rec-parts)] type definitions)) + (#Some name #Nil type [meta-rec-location (#Record meta-rec-parts)] definitions) (^ (list& [_ (#Form (list& name args))] type definitions)) (#Some name args type (` {}) definitions) @@ -3599,19 +3599,19 @@ [#0 tokens']) parts (: (Maybe [Text (List Code) (List [Code Code]) (List Code)]) (case tokens' - (^ (list [_ (#Identifier "" name)] [meta-cursor (#Record meta-parts)] [type-cursor (#Record type-parts)])) - (#Some [name #Nil meta-parts (list [type-cursor (#Record type-parts)])]) + (^ (list [_ (#Identifier "" name)] [meta-location (#Record meta-parts)] [type-location (#Record type-parts)])) + (#Some [name #Nil meta-parts (list [type-location (#Record type-parts)])]) - (^ (list& [_ (#Identifier "" name)] [meta-cursor (#Record meta-parts)] type-code1 type-codes)) + (^ (list& [_ (#Identifier "" name)] [meta-location (#Record meta-parts)] type-code1 type-codes)) (#Some [name #Nil meta-parts (#Cons type-code1 type-codes)]) (^ (list& [_ (#Identifier "" name)] type-codes)) (#Some [name #Nil (list) type-codes]) - (^ (list [_ (#Form (#Cons [_ (#Identifier "" name)] args))] [meta-cursor (#Record meta-parts)] [type-cursor (#Record type-parts)])) - (#Some [name args meta-parts (list [type-cursor (#Record type-parts)])]) + (^ (list [_ (#Form (#Cons [_ (#Identifier "" name)] args))] [meta-location (#Record meta-parts)] [type-location (#Record type-parts)])) + (#Some [name args meta-parts (list [type-location (#Record type-parts)])]) - (^ (list& [_ (#Form (#Cons [_ (#Identifier "" name)] args))] [meta-cursor (#Record meta-parts)] type-code1 type-codes)) + (^ (list& [_ (#Form (#Cons [_ (#Identifier "" name)] args))] [meta-location (#Record meta-parts)] type-code1 type-codes)) (#Some [name args meta-parts (#Cons type-code1 type-codes)]) (^ (list& [_ (#Form (#Cons [_ (#Identifier "" name)] args))] type-codes)) @@ -3645,7 +3645,7 @@ meta (if rec? (` (#.Cons (~ (flag-meta "type-rec?")) (~ meta))) meta)] - (` [(~ cursor-code) + (` [(~ location-code) (#.Record (~ meta))]))] (case type' (#Some type'') @@ -3958,7 +3958,7 @@ (let [[current-module modules] (case state {#info info #source source #current-module current-module #modules modules #scopes scopes #type-context types #host host - #seed seed #expected expected #cursor cursor #extensions extensions + #seed seed #expected expected #location location #extensions extensions #scope-type-vars scope-type-vars} [current-module modules])] (case (get module modules) @@ -4026,7 +4026,7 @@ (case state {#info info #source source #current-module _ #modules modules #scopes scopes #type-context types #host host - #seed seed #expected expected #cursor cursor #extensions extensions + #seed seed #expected expected #location location #extensions extensions #scope-type-vars scope-type-vars} (find (: (-> Scope (Maybe Type)) (function (_ env) @@ -4049,7 +4049,7 @@ (let [[v-prefix v-name] name {#info info #source source #current-module _ #modules modules #scopes scopes #type-context types #host host - #seed seed #expected expected #cursor cursor #extensions extensions + #seed seed #expected expected #location location #extensions extensions #scope-type-vars scope-type-vars} state] (case (get v-prefix modules) #None @@ -4073,7 +4073,7 @@ (let [[v-prefix v-name] name {#info info #source source #current-module _ #modules modules #scopes scopes #type-context types #host host - #seed seed #expected expected #cursor cursor #extensions extensions + #seed seed #expected expected #location location #extensions extensions #scope-type-vars scope-type-vars} state] (case (get v-prefix modules) #None @@ -4131,7 +4131,7 @@ (#Right [compiler (#Var type-id)]) (let [{#info _ #source _ #current-module _ #modules _ #scopes _ #type-context type-context #host _ - #seed _ #expected _ #cursor _ #extensions extensions + #seed _ #expected _ #location _ #extensions extensions #scope-type-vars _} compiler {#ex-counter _ #var-counter _ #var-bindings var-bindings} type-context] (case (find-type-var type-id var-bindings) @@ -4367,7 +4367,7 @@ _ (return (list (` ("lux def" (~ (local-identifier$ (de-alias "" short alias))) (~ source+) - [(~ cursor-code) (#.Record #Nil)] + [(~ location-code) (#.Record #Nil)] #0))))))) (macro: #export (open: tokens) @@ -4406,7 +4406,7 @@ (do meta-monad [g!struct (gensym "struct")] (return (list (` ("lux def" (~ g!struct) (~ struct) - [(~ cursor-code) (#.Record #Nil)] + [(~ location-code) (#.Record #Nil)] #0)) (` (..open: (~ (text$ alias)) (~ g!struct))))))) @@ -4584,7 +4584,7 @@ (function (_ [m-name m-alias =refer]) (refer-to-code m-name m-alias =refer))) imports) - =module (` ("lux def module" [(~ cursor-code) + =module (` ("lux def module" [(~ location-code) (#.Record (~ (process-def-meta _meta)))] (~ =imports)))]] (wrap (#Cons =module =refers)))) @@ -4888,8 +4888,8 @@ (#Cons x (repeat ("lux i64 +" -1 n) x)) #Nil)) -(def: (cursor-padding baseline [_ old-line old-column] [_ new-line new-column]) - (-> Nat Cursor Cursor Text) +(def: (location-padding baseline [_ old-line old-column] [_ new-line new-column]) + (-> Nat Location Location Text) (if ("lux i64 =" old-line new-line) (text@join-with "" (repeat (.int ("lux i64 -" old-column new-column)) " ")) (let [extra-lines (text@join-with "" (repeat (.int ("lux i64 -" old-line new-line)) ..new-line)) @@ -4900,26 +4900,26 @@ (-> Text Nat) ("lux text size" x)) -(def: (update-cursor [file line column] code-text) - (-> Cursor Text Cursor) +(def: (update-location [file line column] code-text) + (-> Location Text Location) [file line ("lux i64 +" column (text@size code-text))]) -(def: (delim-update-cursor [file line column]) - (-> Cursor Cursor) +(def: (delim-update-location [file line column]) + (-> Location Location) [file line (inc column)]) (def: rejoin-all-pairs (-> (List [Code Code]) (List Code)) (|>> (list@map rejoin-pair) list@join)) -(def: (doc-example->Text prev-cursor baseline example) - (-> Cursor Nat Code [Cursor Text]) +(def: (doc-example->Text prev-location baseline example) + (-> Location Nat Code [Location Text]) (case example (^template [<tag> <encode>] - [new-cursor (<tag> value)] + [new-location (<tag> value)] (let [as-text (<encode> value)] - [(update-cursor new-cursor as-text) - (text@compose (cursor-padding baseline prev-cursor new-cursor) + [(update-location new-location as-text) + (text@compose (location-padding baseline prev-location new-location) as-text)])) ([#Bit bit@encode] [#Nat nat@encode] @@ -4930,14 +4930,14 @@ [#Tag tag@encode]) (^template [<tag> <open> <close> <prep>] - [group-cursor (<tag> parts)] - (let [[group-cursor' parts-text] (list@fold (function (_ part [last-cursor text-accum]) - (let [[part-cursor part-text] (doc-example->Text last-cursor baseline part)] - [part-cursor (text@compose text-accum part-text)])) - [(delim-update-cursor group-cursor) ""] - (<prep> parts))] - [(delim-update-cursor group-cursor') - ($_ text@compose (cursor-padding baseline prev-cursor group-cursor) + [group-location (<tag> parts)] + (let [[group-location' parts-text] (list@fold (function (_ part [last-location text-accum]) + (let [[part-location part-text] (doc-example->Text last-location baseline part)] + [part-location (text@compose text-accum part-text)])) + [(delim-update-location group-location) ""] + (<prep> parts))] + [(delim-update-location group-location') + ($_ text@compose (location-padding baseline prev-location group-location) <open> parts-text <close>)])) @@ -4945,12 +4945,12 @@ [#Tuple "[" "]" ..function@identity] [#Record "{" "}" rejoin-all-pairs]) - [new-cursor (#Rev value)] + [new-location (#Rev value)] ("lux io error" "Undefined behavior.") )) (def: (with-baseline baseline [file line column]) - (-> Nat Cursor Cursor) + (-> Nat Location Location) [file line baseline]) (def: (doc-fragment->Text fragment) @@ -4964,8 +4964,8 @@ (#Doc-Example example) (let [baseline (find-baseline-column example) - [cursor _] example - [_ text] (doc-example->Text (with-baseline baseline cursor) baseline example)] + [location _] example + [_ text] (doc-example->Text (with-baseline baseline location) baseline example)] (text@compose text __paragraph)))) (macro: #export (doc tokens) @@ -4980,7 +4980,7 @@ " (if (< +10 count)" ..new-line " (recur (inc count) (f x))" ..new-line " x)))"))} - (return (list (` [(~ cursor-code) + (return (list (` [(~ location-code) (#.Text (~ (|> tokens (list@map (|>> identify-doc-fragment doc-fragment->Text)) (text@join-with "") @@ -5140,14 +5140,14 @@ (#Some (list target))) (^template [<tag>] - [cursor (<tag> elems)] + [location (<tag> elems)] (do maybe-monad [placements (monad@map maybe-monad (place-tokens label tokens) elems)] - (wrap (list [cursor (<tag> (list@join placements))])))) + (wrap (list [location (<tag> (list@join placements))])))) ([#Tuple] [#Form]) - [cursor (#Record pairs)] + [location (#Record pairs)] (do maybe-monad [=pairs (monad@map maybe-monad (: (-> [Code Code] (Maybe [Code Code])) @@ -5162,7 +5162,7 @@ _ #None)))) pairs)] - (wrap (list [cursor (#Record =pairs)]))) + (wrap (list [location (#Record =pairs)]))) )) (macro: #export (with-expansions tokens) @@ -5416,7 +5416,7 @@ (case state {#info info #source source #current-module _ #modules modules #scopes scopes #type-context types #host host - #seed seed #expected expected #cursor cursor #extensions extensions + #seed seed #expected expected #location location #extensions extensions #scope-type-vars scope-type-vars} (#Right state scope-type-vars) )) @@ -5856,8 +5856,8 @@ _ (fail (..wrong-syntax-error (name-of ..^code))))) -(def: #export (cursor-description [file line column]) - (-> Cursor Text) +(def: #export (location-description [file line column]) + (-> Location Text) (let [separator ", " fields ($_ "lux text concat" (text@encode file) separator diff --git a/stdlib/source/lux/abstract/comonad.lux b/stdlib/source/lux/abstract/comonad.lux index 874b96913..14515da25 100644 --- a/stdlib/source/lux/abstract/comonad.lux +++ b/stdlib/source/lux/abstract/comonad.lux @@ -24,8 +24,6 @@ {#.doc "The CoFree CoMonad."} [a (F (CoFree F a))]) -(def: _cursor Cursor ["" 0 0]) - (macro: #export (be tokens state) {#.doc (doc "A co-monadic parallel to the 'do' macro." (let [square (function (_ n) (* n n))] @@ -46,7 +44,7 @@ (if (|> bindings list.size (n.% 2) (n.= 0)) (let [[module short] (name-of ..be) gensym (: (-> Text Code) - (|>> ($_ "lux text concat" module " " short " ") [""] #.Identifier [_cursor])) + (|>> ($_ "lux text concat" module " " short " ") [""] #.Identifier [.dummy-location])) g!_ (gensym "_") g!map (gensym "map") g!split (gensym "split") @@ -64,7 +62,7 @@ (list.reverse (list.as-pairs bindings)))] (#.Right [state (list (case ?name (#.Some name) - (let [name [_cursor (#.Identifier ["" name])]] + (let [name [.dummy-location (#.Identifier ["" name])]] (` ({(~ name) ({[(~ g!map) (~' unwrap) (~ g!split)] (~ body')} diff --git a/stdlib/source/lux/abstract/monad.lux b/stdlib/source/lux/abstract/monad.lux index 4c03e937c..c2b19362d 100644 --- a/stdlib/source/lux/abstract/monad.lux +++ b/stdlib/source/lux/abstract/monad.lux @@ -50,8 +50,6 @@ (-> (m (m a)) (m a))) join)) -(def: _cursor Cursor ["" 0 0]) - (macro: #export (do tokens state) {#.doc (doc "Macro for easy concatenation of monadic operations." (do monad @@ -72,7 +70,7 @@ (if (|> bindings list@size .int ("lux i64 %" +2) ("lux i64 =" +0)) (let [[module short] (name-of ..do) gensym (: (-> Text Code) - (|>> ($_ "lux text concat" module " " short " ") [""] #.Identifier [_cursor])) + (|>> ($_ "lux text concat" module " " short " ") [""] #.Identifier [.dummy-location])) g!_ (gensym "_") g!map (gensym "map") g!join (gensym "join") @@ -90,7 +88,7 @@ (reverse (as-pairs bindings)))] (#.Right [state (list (case ?name (#.Some name) - (let [name [_cursor (#.Identifier ["" name])]] + (let [name [.dummy-location (#.Identifier ["" name])]] (` ({(~ name) ({[(~ g!map) (~' wrap) (~ g!join)] (~ body')} diff --git a/stdlib/source/lux/control/parser/binary.lux b/stdlib/source/lux/control/parser/binary.lux index ed698ccd1..905afba3f 100644 --- a/stdlib/source/lux/control/parser/binary.lux +++ b/stdlib/source/lux/control/parser/binary.lux @@ -249,8 +249,8 @@ [9 #.Apply pair] [10 #.Named (//.and ..name type)]]))))) -(def: #export cursor - (Parser Cursor) +(def: #export location + (Parser Location) ($_ //.and ..text ..nat ..nat)) (def: #export code @@ -258,7 +258,7 @@ (..rec (function (_ recur) (let [sequence (..list recur)] - (//.and ..cursor + (//.and ..location (!variant [[0 #.Bit ..bit] [1 #.Nat ..nat] [2 #.Int ..int] diff --git a/stdlib/source/lux/control/try.lux b/stdlib/source/lux/control/try.lux index f22da7a1b..74707c51b 100644 --- a/stdlib/source/lux/control/try.lux +++ b/stdlib/source/lux/control/try.lux @@ -143,7 +143,7 @@ (#..Success (~' g!temp)) (~' g!temp) - (#..Failure (~ [dummy-cursor (#.Identifier ["" ""])])) + (#..Failure (~ [.dummy-location (#.Identifier ["" ""])])) (~ else))))]) _ diff --git a/stdlib/source/lux/data/format/binary.lux b/stdlib/source/lux/data/format/binary.lux index ece895c38..f629f8b52 100644 --- a/stdlib/source/lux/data/format/binary.lux +++ b/stdlib/source/lux/data/format/binary.lux @@ -254,8 +254,8 @@ [10 #.Named (..and ..name recur)]) )))))) -(def: #export cursor - (Writer Cursor) +(def: #export location + (Writer Location) ($_ ..and ..text ..nat ..nat)) (def: #export code @@ -263,7 +263,7 @@ (..rec (function (_ recur) (let [sequence (..list recur)] - (..and ..cursor + (..and ..location (function (_ altV) (case altV (^template [<number> <tag> <writer>] diff --git a/stdlib/source/lux/data/lazy.lux b/stdlib/source/lux/data/lazy.lux index 705e88682..db0293413 100644 --- a/stdlib/source/lux/data/lazy.lux +++ b/stdlib/source/lux/data/lazy.lux @@ -43,19 +43,26 @@ (structure: #export (equivalence (^open "_@.")) (All [a] (-> (Equivalence a) (Equivalence (Lazy a)))) + (def: (= left right) (_@= (..thaw left) (..thaw right)))) -(structure: #export functor (Functor Lazy) +(structure: #export functor + (Functor Lazy) + (def: (map f fa) (freeze (f (thaw fa))))) -(structure: #export apply (Apply Lazy) +(structure: #export apply + (Apply Lazy) + (def: &functor ..functor) (def: (apply ff fa) (freeze ((thaw ff) (thaw fa))))) -(structure: #export monad (Monad Lazy) +(structure: #export monad + (Monad Lazy) + (def: &functor ..functor) (def: wrap (|>> freeze)) (def: join thaw)) diff --git a/stdlib/source/lux/data/maybe.lux b/stdlib/source/lux/data/maybe.lux index 2afd4cb60..2e7912550 100644 --- a/stdlib/source/lux/data/maybe.lux +++ b/stdlib/source/lux/data/maybe.lux @@ -123,7 +123,7 @@ +20)} (case tokens (^ (list else maybe)) - (let [g!temp (: Code [dummy-cursor (#.Identifier ["" ""])]) + (let [g!temp (: Code [.dummy-location (#.Identifier ["" ""])]) code (` (case (~ maybe) (#.Some (~ g!temp)) (~ g!temp) diff --git a/stdlib/source/lux/data/number.lux b/stdlib/source/lux/data/number.lux index 07e093849..48a931637 100644 --- a/stdlib/source/lux/data/number.lux +++ b/stdlib/source/lux/data/number.lux @@ -14,13 +14,13 @@ (macro: (encoding-doc tokens state) (case tokens - (^ (list [cursor (#.Text encoding)] example-1 example-2)) + (^ (list [location (#.Text encoding)] example-1 example-2)) (let [encoding ($_ "lux text concat" "Given syntax for a " encoding " number, generates a Nat, an Int, a Rev or a Frac.") commas "Allows for the presence of commas among the digits." - description [cursor (#.Text ($_ "lux text concat" encoding " " commas))]] + description [location (#.Text ($_ "lux text concat" encoding " " commas))]] (#try.Success [state (list (` (doc (~ description) (~ example-1) (~ example-2))))])) diff --git a/stdlib/source/lux/data/store.lux b/stdlib/source/lux/data/store.lux index 36cc3e67d..fa3e45f00 100644 --- a/stdlib/source/lux/data/store.lux +++ b/stdlib/source/lux/data/store.lux @@ -15,13 +15,17 @@ {#cursor (get@ #cursor wa) #peek (function (_ s) (f (set@ #cursor s wa)))}) -(structure: #export functor (All [s] (Functor (Store s))) +(structure: #export functor + (All [s] (Functor (Store s))) + (def: (map f fa) (extend (function (_ store) (f (:: store peek (:: store cursor)))) fa))) -(structure: #export comonad (All [s] (CoMonad (Store s))) +(structure: #export comonad + (All [s] (CoMonad (Store s))) + (def: &functor ..functor) (def: (unwrap wa) (::: peek (::: cursor))) diff --git a/stdlib/source/lux/data/text/format.lux b/stdlib/source/lux/data/text/format.lux index 392e3ee42..388bd3638 100644 --- a/stdlib/source/lux/data/text/format.lux +++ b/stdlib/source/lux/data/text/format.lux @@ -71,7 +71,7 @@ [instant instant.Instant (:: instant.codec encode)] [duration duration.Duration (:: duration.codec encode)] [date date.Date (:: date.codec encode)] - [cursor Cursor .cursor-description] + [location Location .location-description] ) (def: #export (mod modular) diff --git a/stdlib/source/lux/macro/code.lux b/stdlib/source/lux/macro/code.lux index 3f7e5f970..7678852a6 100644 --- a/stdlib/source/lux/macro/code.lux +++ b/stdlib/source/lux/macro/code.lux @@ -28,14 +28,12 @@ ## (#.Record (List [(w (Code' w)) (w (Code' w))]))) ## (type: Code -## (Ann Cursor (Code' (Ann Cursor)))) - -(def: _cursor Cursor ["" 0 0]) +## (Ann Location (Code' (Ann Location)))) (template [<name> <type> <tag>] [(def: #export (<name> x) (-> <type> Code) - [_cursor (<tag> x)])] + [.dummy-location (<tag> x)])] [bit Bit #.Bit] [nat Nat #.Nat] @@ -54,7 +52,7 @@ [(def: #export (<name> name) {#.doc <doc>} (-> Text Code) - [_cursor (<tag> ["" name])])] + [.dummy-location (<tag> ["" name])])] [local-identifier #.Identifier "Produces a local identifier (an identifier with no module prefix)."] [local-tag #.Tag "Produces a local tag (a tag with no module prefix)."]) @@ -143,16 +141,16 @@ substitute (case ast (^template [<tag>] - [cursor (<tag> parts)] - [cursor (<tag> (list@map (replace original substitute) parts))]) + [location (<tag> parts)] + [location (<tag> (list@map (replace original substitute) parts))]) ([#.Form] [#.Tuple]) - [cursor (#.Record parts)] - [cursor (#.Record (list@map (function (_ [left right]) - [(replace original substitute left) - (replace original substitute right)]) - parts))] + [location (#.Record parts)] + [location (#.Record (list@map (function (_ [left right]) + [(replace original substitute left) + (replace original substitute right)]) + parts))] _ ast))) diff --git a/stdlib/source/lux/meta.lux b/stdlib/source/lux/meta.lux index 4a05763ce..ec23805c5 100644 --- a/stdlib/source/lux/meta.lux +++ b/stdlib/source/lux/meta.lux @@ -548,11 +548,11 @@ _ (wrap #.None)))) -(def: #export cursor - {#.doc "The cursor of the current expression being analyzed."} - (Meta Cursor) +(def: #export location + {#.doc "The location of the current expression being analyzed."} + (Meta Location) (function (_ compiler) - (#try.Success [compiler (get@ #.cursor compiler)]))) + (#try.Success [compiler (get@ #.location compiler)]))) (def: #export expected-type {#.doc "The expected type of the current expression being analyzed."} @@ -682,9 +682,9 @@ #.None)) (#.Some [omit? token]) (do ..monad - [cursor ..cursor + [location ..location output (<func> token) - #let [_ (log! ($_ text@compose (name@encode (name-of <macro>)) " @ " (.cursor-description cursor))) + #let [_ (log! ($_ text@compose (name@encode (name-of <macro>)) " @ " (.location-description location))) _ (list@map (|>> code.to-text log!) output) _ (log! "")]] diff --git a/stdlib/source/lux/target/js.lux b/stdlib/source/lux/target/js.lux index 16a6d77da..bc4b3949d 100644 --- a/stdlib/source/lux/target/js.lux +++ b/stdlib/source/lux/target/js.lux @@ -1,5 +1,5 @@ (.module: - [lux (#- Code or and function if cond undefined for comment not int) + [lux (#- Location Code or and function if cond undefined for comment not int) [control [pipe (#+ case>)]] [data diff --git a/stdlib/source/lux/tool/compiler/default/init.lux b/stdlib/source/lux/tool/compiler/default/init.lux index f25f22035..ed4150b73 100644 --- a/stdlib/source/lux/tool/compiler/default/init.lux +++ b/stdlib/source/lux/tool/compiler/default/init.lux @@ -79,7 +79,7 @@ (type: Reader (-> Source (Either [Source Text] [Source Code]))) -(def: (reader current-module aliases [cursor offset source-code]) +(def: (reader current-module aliases [location offset source-code]) (-> Module Aliases Source (///analysis.Operation Reader)) (function (_ [bundle state]) (#try.Success [[bundle state] @@ -93,10 +93,10 @@ (#try.Failure error) (#.Right [source' output]) - (let [[cursor _] output] + (let [[location _] output] (#try.Success [[bundle (|> compiler (set@ #.source source') - (set@ #.cursor cursor))] + (set@ #.location location))] [source' output]]))))) (type: (Operation a) diff --git a/stdlib/source/lux/tool/compiler/language/lux/analysis.lux b/stdlib/source/lux/tool/compiler/language/lux/analysis.lux index 598f34db5..96296a39a 100644 --- a/stdlib/source/lux/tool/compiler/language/lux/analysis.lux +++ b/stdlib/source/lux/tool/compiler/language/lux/analysis.lux @@ -441,29 +441,29 @@ (set@ #.current-module) (function.constant (#.Some name)))) -(def: #export (with-cursor cursor action) - (All [a] (-> Cursor (Operation a) (Operation a))) - (if (text@= "" (product.left cursor)) +(def: #export (with-location location action) + (All [a] (-> Location (Operation a) (Operation a))) + (if (text@= "" (product.left location)) action (function (_ [bundle state]) - (let [old-cursor (get@ #.cursor state)] - (case (action [bundle (set@ #.cursor cursor state)]) + (let [old-location (get@ #.location state)] + (case (action [bundle (set@ #.location location state)]) (#try.Success [[bundle' state'] output]) - (#try.Success [[bundle' (set@ #.cursor old-cursor state')] + (#try.Success [[bundle' (set@ #.location old-location state')] output]) (#try.Failure error) (#try.Failure error)))))) -(def: (locate-error cursor error) - (-> Cursor Text Text) - (format "@ " (%.cursor cursor) text.new-line +(def: (locate-error location error) + (-> Location Text Text) + (format "@ " (%.location location) text.new-line error)) (def: #export (fail error) (-> Text Operation) (function (_ [bundle state]) - (#try.Failure (locate-error (get@ #.cursor state) error)))) + (#try.Failure (locate-error (get@ #.location state) error)))) (def: #export (throw exception parameters) (All [e] (-> (Exception e) e Operation)) @@ -478,7 +478,7 @@ (def: #export (fail' error) (-> Text (phase.Operation Lux)) (function (_ state) - (#try.Failure (locate-error (get@ #.cursor state) error)))) + (#try.Failure (locate-error (get@ #.location state) error)))) (def: #export (throw' exception parameters) (All [e] (-> (Exception e) e (phase.Operation Lux))) @@ -494,7 +494,7 @@ (#try.Failure error) (let [[bundle state] bundle,state] - (#try.Failure (locate-error (get@ #.cursor state) error)))))) + (#try.Failure (locate-error (get@ #.location state) error)))))) (def: #export (install state) (-> .Lux (Operation Any)) @@ -507,22 +507,22 @@ (-> <type> (Operation Any)) (extension.update (set@ <field> <value>)))] - [set-source-code Source #.source value] - [set-current-module Text #.current-module (#.Some value)] - [set-cursor Cursor #.cursor value] + [set-source-code Source #.source value] + [set-current-module Text #.current-module (#.Some value)] + [set-location Location #.location value] ) -(def: #export (cursor file) - (-> Text Cursor) +(def: #export (location file) + (-> Text Location) [file 1 0]) (def: #export (source file code) (-> Text Text Source) - [(cursor file) 0 code]) + [(location file) 0 code]) (def: dummy-source Source - [.dummy-cursor 0 ""]) + [.dummy-location 0 ""]) (def: type-context Type-Context @@ -540,7 +540,7 @@ (-> Info Lux) {#.info info #.source ..dummy-source - #.cursor .dummy-cursor + #.location .dummy-location #.current-module #.None #.modules (list) #.scopes (list) diff --git a/stdlib/source/lux/tool/compiler/language/lux/phase/analysis.lux b/stdlib/source/lux/tool/compiler/language/lux/phase/analysis.lux index 8ca459028..a5978fcba 100644 --- a/stdlib/source/lux/tool/compiler/language/lux/phase/analysis.lux +++ b/stdlib/source/lux/tool/compiler/language/lux/phase/analysis.lux @@ -36,7 +36,7 @@ (-> a a)) (def: (compile|primitive else code') - (Fix (-> (Code' (Ann Cursor)) (Operation Analysis))) + (Fix (-> (Code' (Ann Location)) (Operation Analysis))) (case code' (^template [<tag> <analyser>] (<tag> value) @@ -52,7 +52,7 @@ (else code'))) (def: (compile|structure archive compile else code') - (-> Archive Phase (Fix (-> (Code' (Ann Cursor)) (Operation Analysis)))) + (-> Archive Phase (Fix (-> (Code' (Ann Location)) (Operation Analysis)))) (case code' (^ (#.Form (list& [_ (#.Tag tag)] values))) @@ -91,7 +91,7 @@ (else code'))) (def: (compile|others expander archive compile code') - (-> Expander Archive Phase (-> (Code' (Ann Cursor)) (Operation Analysis))) + (-> Expander Archive Phase (-> (Code' (Ann Location)) (Operation Analysis))) (case code' (#.Identifier reference) (/reference.reference reference) @@ -128,15 +128,15 @@ (/function.apply compile argsC+ functionT functionA archive functionC))) _ - (//.throw unrecognized-syntax [.dummy-cursor code']))) + (//.throw unrecognized-syntax [.dummy-location code']))) (def: #export (phase expander) (-> Expander Phase) (function (compile archive code) - (let [[cursor code'] code] - ## The cursor must be set in the state for the sake + (let [[location code'] code] + ## The location must be set in the state for the sake ## of having useful error messages. - (/.with-cursor cursor + (/.with-location location (compile|primitive (compile|structure archive compile (compile|others expander archive compile)) code'))))) diff --git a/stdlib/source/lux/tool/compiler/language/lux/phase/analysis/case.lux b/stdlib/source/lux/tool/compiler/language/lux/phase/analysis/case.lux index 01afd6142..3c563d300 100644 --- a/stdlib/source/lux/tool/compiler/language/lux/phase/analysis/case.lux +++ b/stdlib/source/lux/tool/compiler/language/lux/phase/analysis/case.lux @@ -131,9 +131,9 @@ _ (:: ///.monad wrap (re-quantify envs caseT))))) -(def: (analyse-primitive type inputT cursor output next) - (All [a] (-> Type Type Cursor Pattern (Operation a) (Operation [Pattern a]))) - (/.with-cursor cursor +(def: (analyse-primitive type inputT location output next) + (All [a] (-> Type Type Location Pattern (Operation a) (Operation [Pattern a]))) + (/.with-location location (do ///.monad [_ (//type.with-env (check.check inputT type)) @@ -159,8 +159,8 @@ (def: (analyse-pattern num-tags inputT pattern next) (All [a] (-> (Maybe Nat) Type Code (Operation a) (Operation [Pattern a]))) (.case pattern - [cursor (#.Identifier ["" name])] - (/.with-cursor cursor + [location (#.Identifier ["" name])] + (/.with-location location (do ///.monad [outputA (//scope.with-local [name inputT] next) @@ -168,8 +168,8 @@ (wrap [(#/.Bind idx) outputA]))) (^template [<type> <input> <output>] - [cursor <input>] - (analyse-primitive <type> inputT cursor (#/.Simple <output>) next)) + [location <input>] + (analyse-primitive <type> inputT location (#/.Simple <output>) next)) ([Bit (#.Bit pattern-value) (#/.Bit pattern-value)] [Nat (#.Nat pattern-value) (#/.Nat pattern-value)] [Int (#.Int pattern-value) (#/.Int pattern-value)] @@ -178,11 +178,11 @@ [Text (#.Text pattern-value) (#/.Text pattern-value)] [Any (#.Tuple #.Nil) #/.Unit]) - (^ [cursor (#.Tuple (list singleton))]) + (^ [location (#.Tuple (list singleton))]) (analyse-pattern #.None inputT singleton next) - [cursor (#.Tuple sub-patterns)] - (/.with-cursor cursor + [location (#.Tuple sub-patterns)] + (/.with-location location (do {@ ///.monad} [inputT' (simplify-case inputT)] (.case inputT' @@ -222,7 +222,7 @@ (/.throw ..cannot-match-with-pattern [inputT' pattern]) ))) - [cursor (#.Record record)] + [location (#.Record record)] (do ///.monad [record (//structure.normalize record) [members recordT] (//structure.order record) @@ -233,14 +233,14 @@ _ (wrap []))] - (analyse-pattern (#.Some (list.size members)) inputT [cursor (#.Tuple members)] next)) + (analyse-pattern (#.Some (list.size members)) inputT [location (#.Tuple members)] next)) - [cursor (#.Tag tag)] - (/.with-cursor cursor + [location (#.Tag tag)] + (/.with-location location (analyse-pattern #.None inputT (` ((~ pattern))) next)) - (^ [cursor (#.Form (list& [_ (#.Nat lefts)] [_ (#.Bit right?)] values))]) - (/.with-cursor cursor + (^ [location (#.Form (list& [_ (#.Nat lefts)] [_ (#.Bit right?)] values))]) + (/.with-location location (do ///.monad [inputT' (simplify-case inputT)] (.case inputT' @@ -278,8 +278,8 @@ _ (/.throw ..cannot-match-with-pattern [inputT' pattern])))) - (^ [cursor (#.Form (list& [_ (#.Tag tag)] values))]) - (/.with-cursor cursor + (^ [location (#.Form (list& [_ (#.Tag tag)] values))]) + (/.with-location location (do ///.monad [tag (///extension.lift (macro.normalize tag)) [idx group variantT] (///extension.lift (macro.resolve-tag tag)) diff --git a/stdlib/source/lux/tool/compiler/language/lux/phase/analysis/inference.lux b/stdlib/source/lux/tool/compiler/language/lux/phase/analysis/inference.lux index 38f1d3bd3..bcde262d2 100644 --- a/stdlib/source/lux/tool/compiler/language/lux/phase/analysis/inference.lux +++ b/stdlib/source/lux/tool/compiler/language/lux/phase/analysis/inference.lux @@ -86,17 +86,17 @@ _ type)) -(def: (named-type cursor id) - (-> Cursor Nat Type) - (let [name (format "{New Type @ " (.cursor-description cursor) " " (%.nat id) "}")] +(def: (named-type location id) + (-> Location Nat Type) + (let [name (format "{New Type @ " (.location-description location) " " (%.nat id) "}")] (#.Primitive name (list)))) (def: new-named-type (Operation Type) (do ///.monad - [cursor (///extension.lift macro.cursor) + [location (///extension.lift macro.location) [ex-id _] (//type.with-env check.existential)] - (wrap (named-type cursor ex-id)))) + (wrap (named-type location ex-id)))) ## Type-inference works by applying some (potentially quantified) type ## to a sequence of values. diff --git a/stdlib/source/lux/tool/compiler/language/lux/phase/directive.lux b/stdlib/source/lux/tool/compiler/language/lux/phase/directive.lux index 988d599b7..55cd0d1b5 100644 --- a/stdlib/source/lux/tool/compiler/language/lux/phase/directive.lux +++ b/stdlib/source/lux/tool/compiler/language/lux/phase/directive.lux @@ -34,7 +34,7 @@ (exception.report ["Name" (%.name name)])) -(with-expansions [<lux_def_module> (as-is [|form-cursor| (#.Form (list& [|text-cursor| (#.Text "lux def module")] annotations))])] +(with-expansions [<lux_def_module> (as-is [|form-location| (#.Form (list& [|text-location| (#.Text "lux def module")] annotations))])] (def: #export (phase expander) (-> Expander Phase) (let [analyze (//analysis.phase expander)] diff --git a/stdlib/source/lux/tool/compiler/language/lux/syntax.lux b/stdlib/source/lux/tool/compiler/language/lux/syntax.lux index 8b6808a2c..eb85bc9ca 100644 --- a/stdlib/source/lux/tool/compiler/language/lux/syntax.lux +++ b/stdlib/source/lux/tool/compiler/language/lux/syntax.lux @@ -8,20 +8,20 @@ ## its position within the input data. ## That is, the parser takes into account the line and column ## information in the input text (it doesn't really touch the -## file-name aspect of the cursor, leaving it intact in whatever -## base-line cursor it is given). +## file-name aspect of the location, leaving it intact in whatever +## base-line location it is given). ## This particular piece of functionality is not located in one ## function, but it is instead scattered throughout several parsers, -## since the logic for how to update the cursor varies, depending on +## since the logic for how to update the location varies, depending on ## what is being parsed, and the rules involved. ## You will notice that several parsers have a "where" parameter, that -## tells them the cursor position prior to the parser being run. +## tells them the location position prior to the parser being run. ## They are supposed to produce some parsed output, alongside an -## updated cursor pointing to the end position, after the parser was run. +## updated location pointing to the end position, after the parser was run. -## Lux Code nodes/tokens are annotated with cursor meta-data +## Lux Code nodes/tokens are annotated with location meta-data ## [file-name, line, column] to keep track of their provenance and ## location, which is helpful for documentation and debugging. (.module: @@ -54,10 +54,10 @@ ## TODO: Make an extension to take advantage of java/lang/String::indexOf<int,int> ## to get better performance than the current "lux text index" extension. -## TODO: Instead of always keeping a "where" cursor variable, keep the +## TODO: Instead of always keeping a "where" location variable, keep the ## individual components (i.e. file, line and column) separate, so ## that updated the "where" only involved updating the components, and -## producing the cursors only involved building them, without any need +## producing the locations only involved building them, without any need ## for pattern-matching and de-structuring. (type: Char Nat) @@ -137,7 +137,7 @@ (let [end (|> start (!n/+ amount-of-input-shown) (n.min ("lux text size" input)))] (!clip start end input))) -(exception: #export (unrecognized-input {[file line column] Cursor} {context Text} {input Text} {offset Offset}) +(exception: #export (unrecognized-input {[file line column] Location} {context Text} {input Text} {offset Offset}) (exception.report ["File" file] ["Line" (%.nat line)] @@ -184,12 +184,12 @@ source-code]) (template: (!new-line where) - ## (-> Cursor Cursor) + ## (-> Location Location) (let [[where::file where::line where::column] where] [where::file (!inc where::line) 0])) (template: (!forward length where) - ## (-> Nat Cursor Cursor) + ## (-> Nat Location Location) (let [[where::file where::line where::column] where] [where::file where::line (!n/+ length where::column)])) @@ -251,7 +251,7 @@ (exception.construct ..text-cannot-contain-new-lines content)]))) (def: (parse-text where offset source-code) - (-> Cursor Nat Text (Either [Source Text] [Source Code])) + (-> Location Nat Text (Either [Source Text] [Source Code])) (case ("lux text index" offset (static ..text-delimiter) source-code) (#.Some g!end) (let [g!content (!clip offset g!end source-code)] @@ -361,7 +361,7 @@ (template [<parser> <codec> <tag>] [(def: (<parser> source-code//size start where offset source-code) - (-> Nat Nat Cursor Nat Text (Either [Source Text] [Source Code])) + (-> Nat Nat Location Nat Text (Either [Source Text] [Source Code])) (loop [g!end offset] (<| (!with-char+ source-code//size source-code g!end g!char (!number-output start g!end <codec> <tag>)) (if (!digit?+ g!char) diff --git a/stdlib/source/lux/type.lux b/stdlib/source/lux/type.lux index ed0dc3ce9..f7170adc4 100644 --- a/stdlib/source/lux/type.lux +++ b/stdlib/source/lux/type.lux @@ -358,10 +358,10 @@ (case input (#.Left valueN) (do meta.monad - [cursor meta.cursor + [location meta.location valueT (meta.find-type valueN) #let [_ (log! ($_ text@compose - (name@encode (name-of ..:log!)) " @ " (.cursor-description cursor) text.new-line + (name@encode (name-of ..:log!)) " @ " (.location-description location) text.new-line "Value: " (name@encode valueN) text.new-line " Type: " (..to-text valueT) text.new-line))]] (wrap (list (code.identifier valueN)))) @@ -419,13 +419,13 @@ {(~ extraction) (:assume [])})))))) -(exception: #export (hole-type {location Cursor} {type Type}) +(exception: #export (hole-type {location Location} {type Type}) (exception.report - ["Location" (.cursor-description location)] + ["Location" (.location-description location)] ["Type" (..to-text type)])) (syntax: #export (:hole) (do meta.monad - [cursor meta.cursor + [location meta.location expectedT meta.expected-type] - (meta.fail (exception.construct ..hole-type [cursor expectedT])))) + (meta.fail (exception.construct ..hole-type [location expectedT])))) diff --git a/stdlib/source/test/aedifex/parser.lux b/stdlib/source/test/aedifex/parser.lux index 497533fbf..97895a201 100644 --- a/stdlib/source/test/aedifex/parser.lux +++ b/stdlib/source/test/aedifex/parser.lux @@ -205,7 +205,9 @@ (def: #export test Test (<| (_.covering /._) - (_.with-cover [/.project] + (_.covering //format._) + (_.with-cover [/.project + //format.Format //format.profile //format.project] ($_ _.and ..single-profile ..multiple-profiles diff --git a/stdlib/source/test/lux/control/parser/binary.lux b/stdlib/source/test/lux/control/parser/binary.lux index 8bc24976e..11875d19f 100644 --- a/stdlib/source/test/lux/control/parser/binary.lux +++ b/stdlib/source/test/lux/control/parser/binary.lux @@ -69,8 +69,8 @@ (Random Name) (random.and ..random-text ..random-text)) -(structure: cursor-equivalence - (Equivalence Cursor) +(structure: location-equivalence + (Equivalence Location) (def: (= [expected-module expected-line expected-column] [sample-module sample-line sample-column]) @@ -78,8 +78,8 @@ (n.= expected-line sample-line) (n.= expected-column sample-column)))) -(def: random-cursor - (Random Cursor) +(def: random-location + (Random Location) ($_ random.and ..random-text random.nat @@ -93,8 +93,8 @@ [size (:: @ map (n.% 2) random.nat)] (random.list size recur))] ($_ random.and - ..random-cursor - (: (Random (Code' (Ann Cursor))) + ..random-location + (: (Random (Code' (Ann Location))) ($_ random.or random.bit random.nat @@ -240,7 +240,7 @@ (!expect (^multi (#try.Success actual) (:: <equivalence> = expected actual))))))] - [/.cursor format.cursor random-cursor cursor-equivalence] + [/.location format.location random-location location-equivalence] [/.code format.code random-code code.equivalence] [/.type format.type random-type type.equivalence] )) diff --git a/stdlib/source/test/lux/data/lazy.lux b/stdlib/source/test/lux/data/lazy.lux index b31953a9f..440aa0316 100644 --- a/stdlib/source/test/lux/data/lazy.lux +++ b/stdlib/source/test/lux/data/lazy.lux @@ -10,11 +10,10 @@ ["$." monad] ["$." equivalence]]}] [data - ["%" text/format (#+ format)] [number ["n" nat]]] [math - ["r" random (#+ Random)]]] + ["." random (#+ Random)]]] {1 ["." / (#+ Lazy)]}) @@ -29,28 +28,35 @@ (def: #export lazy (All [a] (-> (Random a) (Random (Lazy a)))) - (:: r.functor map (|>> /.freeze))) + (:: random.functor map (|>> /.freeze))) (def: #export test Test - (<| (_.context (%.name (name-of /.Lazy))) - (do r.monad - [left r.nat - right r.nat - #let [lazy (/.freeze (n.* left right)) - expected (n.* left right)]] - ($_ _.and - ($equivalence.spec (/.equivalence n.equivalence) (..lazy r.nat)) - ($functor.spec ..injection ..comparison /.functor) - ($apply.spec ..injection ..comparison /.apply) - ($monad.spec ..injection ..comparison /.monad) + (<| (_.covering /._) + (do random.monad + [left random.nat + right random.nat + #let [expected (n.* left right)]] + (_.with-cover [/.Lazy] + ($_ _.and + (_.with-cover [/.equivalence] + ($equivalence.spec (/.equivalence n.equivalence) (..lazy random.nat))) + (_.with-cover [/.functor] + ($functor.spec ..injection ..comparison /.functor)) + (_.with-cover [/.apply] + ($apply.spec ..injection ..comparison /.apply)) + (_.with-cover [/.monad] + ($monad.spec ..injection ..comparison /.monad)) - (_.test "Freezing does not alter the expected value." - (n.= expected - (/.thaw lazy))) - (_.test "Lazy values only evaluate once." - (and (not (is? expected - (/.thaw lazy))) - (is? (/.thaw lazy) + (_.cover [/.freeze] + (let [lazy (/.freeze (n.* left right))] + (n.= expected (/.thaw lazy)))) - )))) + + (_.cover [/.thaw] + (let [lazy (/.freeze (n.* left right))] + (and (not (is? expected + (/.thaw lazy))) + (is? (/.thaw lazy) + (/.thaw lazy))))) + ))))) diff --git a/stdlib/source/test/lux/data/maybe.lux b/stdlib/source/test/lux/data/maybe.lux index a10e0154e..24114f6c0 100644 --- a/stdlib/source/test/lux/data/maybe.lux +++ b/stdlib/source/test/lux/data/maybe.lux @@ -6,6 +6,7 @@ {[0 #spec] [/ ["$." equivalence] + ["$." monoid] ["$." functor] ["$." apply] ["$." monad]]}] @@ -13,58 +14,64 @@ ["." io ("#@." monad)] pipe] [data - ["." text - ["%" format (#+ format)]] + ["." text] [number - ["n" nat]]] + ["n" nat]] + [collection + ["." list]]] [math - ["r" random (#+ Random)]]] + ["." random (#+ Random)]]] {1 ["." / ("#@." monoid monad)]}) -(def: #export maybe - (All [a] (-> (Random a) (Random (Maybe a)))) - (:: r.functor map (|>> #.Some))) - (def: #export test Test - (<| (_.context (%.name (name-of .Maybe))) - ($_ _.and - ($equivalence.spec (/.equivalence n.equivalence) (..maybe r.nat)) - ($functor.spec /@wrap /.equivalence /.functor) - ($apply.spec /@wrap /.equivalence /.apply) - ($monad.spec /@wrap /.equivalence /.monad) - - (do r.monad - [left r.nat - right r.nat - #let [expected (n.+ left right)]] - (let [lift (/.lift io.monad)] - (_.test "Can add maybe functionality to any monad." - (|> (io.run (do (/.with io.monad) - [a (lift (io@wrap left)) - b (wrap right)] - (wrap (n.+ a b)))) - (case> (#.Some actual) - (n.= expected actual) + (<| (_.covering /._) + (_.with-cover [.Maybe] + ($_ _.and + (_.with-cover [/.equivalence] + ($equivalence.spec (/.equivalence n.equivalence) (random.maybe random.nat))) + (_.with-cover [/.monoid] + ($monoid.spec (/.equivalence n.equivalence) /.monoid (random.maybe random.nat))) + (_.with-cover [/.functor] + ($functor.spec /@wrap /.equivalence /.functor)) + (_.with-cover [/.apply] + ($apply.spec /@wrap /.equivalence /.apply)) + (_.with-cover [/.monad] + ($monad.spec /@wrap /.equivalence /.monad)) + + (do random.monad + [left random.nat + right random.nat + #let [expected (n.+ left right)]] + (let [lift (/.lift io.monad)] + (_.cover [/.with /.lift] + (|> (io.run (do (/.with io.monad) + [a (lift (io@wrap left)) + b (wrap right)] + (wrap (n.+ a b)))) + (case> (#.Some actual) + (n.= expected actual) - _ - false))))) - (let [(^open "/@.") (/.equivalence text.equivalence) - (^open "/@.") /.monoid] - (_.test "Monoid respects Maybe." - (and (/@= #.None /@identity) - (/@= (#.Some "yolo") (/@compose (#.Some "yolo") (#.Some "lol"))) - (/@= (#.Some "yolo") (/@compose (#.Some "yolo") #.None)) - (/@= (#.Some "lol") (/@compose #.None (#.Some "lol"))) - (/@= #.None (: (Maybe Text) (/@compose #.None #.None)))))) - (do r.monad - [default r.nat - value r.nat] - (_.test "Can have defaults for Maybe values." - (and (is? default (/.default default - #.None)) + _ + false))))) + (do random.monad + [default random.nat + value random.nat] + (_.cover [/.default] + (and (is? default (/.default default + #.None)) - (is? value (/.default default - (#.Some value)))))) - ))) + (is? value (/.default default + (#.Some value)))))) + (do random.monad + [value random.nat] + (_.cover [/.assume] + (is? value (/.assume (#.Some value))))) + (do random.monad + [value random.nat] + (_.cover [/.to-list] + (:: (list.equivalence n.equivalence) = + (list value) + (/.to-list (#.Some value))))) + )))) diff --git a/stdlib/source/test/lux/macro/code.lux b/stdlib/source/test/lux/macro/code.lux index 0cdbc9610..eec419644 100644 --- a/stdlib/source/test/lux/macro/code.lux +++ b/stdlib/source/test/lux/macro/code.lux @@ -69,7 +69,7 @@ syntax.no-aliases (text.size source-code)) start (: Source - [.dummy-cursor 0 source-code])] + [.dummy-location 0 source-code])] (case (parse start) (#.Left [end error]) (#try.Failure error) @@ -132,7 +132,7 @@ (#try.Failure error) false) (:: /.equivalence = - [.dummy-cursor (<tag> expected)] + [.dummy-location (<tag> expected)] (<coverage> expected)))))] [/.bit random.bit #.Bit] @@ -159,7 +159,7 @@ (#try.Failure error) false) (:: /.equivalence = - [.dummy-cursor (<tag> ["" expected])] + [.dummy-location (<tag> ["" expected])] (<coverage> expected))) ))] diff --git a/stdlib/source/test/lux/meta.lux b/stdlib/source/test/lux/meta.lux index ec400d5e3..1f5e2c5fa 100644 --- a/stdlib/source/test/lux/meta.lux +++ b/stdlib/source/test/lux/meta.lux @@ -46,8 +46,8 @@ #let [expected-lux {#.info {#.target target #.version version #.mode #.Build} - #.source [..dummy-cursor 0 source-code] - #.cursor ..dummy-cursor + #.source [.dummy-location 0 source-code] + #.location .dummy-location #.current-module (#.Some expected-current-module) #.modules (list) #.scopes (list) @@ -93,8 +93,8 @@ #let [expected-lux {#.info {#.target target #.version version #.mode #.Build} - #.source [..dummy-cursor 0 source-code] - #.cursor ..dummy-cursor + #.source [.dummy-location 0 source-code] + #.location .dummy-location #.current-module (#.Some expected-current-module) #.modules (list) #.scopes (list) @@ -167,8 +167,8 @@ #let [expected-lux {#.info {#.target target #.version version #.mode #.Build} - #.source [..dummy-cursor 0 source-code] - #.cursor ..dummy-cursor + #.source [.dummy-location 0 source-code] + #.location .dummy-location #.current-module (#.Some expected-current-module) #.modules (list) #.scopes (list) @@ -199,8 +199,8 @@ (is? expected-short actual-short))))))) ))) -(def: random-cursor - (Random Cursor) +(def: random-location + (Random Location) ($_ random.and (random.ascii/upper-alpha 1) random.nat @@ -241,12 +241,12 @@ dummy-module (random.filter (|>> (text@= expected-current-module) not) (random.ascii/upper-alpha 1)) expected-gensym (random.ascii/upper-alpha 1) - expected-cursor ..random-cursor + expected-location ..random-location #let [expected-lux {#.info {#.target target #.version version #.mode #.Build} - #.source [.dummy-cursor 0 source-code] - #.cursor expected-cursor + #.source [.dummy-location 0 source-code] + #.location expected-location #.current-module (#.Some expected-current-module) #.modules (list) #.scopes (list) @@ -285,11 +285,11 @@ (!expect (^multi (#try.Success actual-gensym) (and (text.contains? expected-gensym actual-gensym) (text.contains? (%.nat expected-seed) actual-gensym)))))) - (_.cover [/.cursor] - (|> /.cursor + (_.cover [/.location] + (|> /.location (/.run expected-lux) - (!expect (^multi (#try.Success actual-cursor) - (is? expected-cursor actual-cursor))))) + (!expect (^multi (#try.Success actual-location) + (is? expected-location actual-location))))) (_.cover [/.expected-type] (|> /.expected-type (/.run expected-lux) diff --git a/stdlib/source/test/lux/tool/compiler/language/lux/syntax.lux b/stdlib/source/test/lux/tool/compiler/language/lux/syntax.lux index 103dc069e..c6ac62bc5 100644 --- a/stdlib/source/test/lux/tool/compiler/language/lux/syntax.lux +++ b/stdlib/source/test/lux/tool/compiler/language/lux/syntax.lux @@ -22,12 +22,6 @@ {1 ["." /]}) -(def: default-cursor - Cursor - {#.module "" - #.line 0 - #.column 0}) - (def: name-part^ (Random Text) (do {@ r.monad} @@ -83,7 +77,7 @@ (_.test "Can parse Lux code." (case (let [source-code (%.code sample)] (/.parse "" (dictionary.new text.hash) (text.size source-code) - [default-cursor 0 source-code])) + [.dummy-location 0 source-code])) (#.Left error) false @@ -95,7 +89,7 @@ (let [source-code (format (%.code sample) " " (%.code other)) source-code//size (text.size source-code)] (case (/.parse "" (dictionary.new text.hash) source-code//size - [default-cursor 0 source-code]) + [.dummy-location 0 source-code]) (#.Left error) false @@ -133,7 +127,7 @@ (case (let [source-code (format comment (%.code sample)) source-code//size (text.size source-code)] (/.parse "" (dictionary.new text.hash) source-code//size - [default-cursor 0 source-code])) + [.dummy-location 0 source-code])) (#.Left error) false |