From d18c56786320b294afcb6d682e6b4468dd1a5e5f Mon Sep 17 00:00:00 2001 From: "Brian T. Rice" Date: Tue, 21 Dec 2010 02:19:40 -0800 Subject: [PATCH] Implemented an &imports: option to load: to clarify the prelude's use of import:from:. --- src/mobius/post-bootstrap.slate | 7 ++--- src/mobius/prelude.slate | 57 +++++++++++++++++++---------------------- 2 files changed, 30 insertions(+), 34 deletions(-) diff --git a/src/mobius/post-bootstrap.slate b/src/mobius/post-bootstrap.slate index 3afea96..2d3f412 100644 --- a/src/mobius/post-bootstrap.slate +++ b/src/mobius/post-bootstrap.slate @@ -23,24 +23,25 @@ Syntax import: #Parser from: lobby. "TODO: Simplify these load: stubs to avoid maintenance costs." -ns@(Namespace traits) load: fileName &in: namespace &verbose: verbose &showLoadMessage: showLoadMessage +ns@(Namespace traits) load: fileName &in: namespace &verbose: verbose &showLoadMessage: showLoadMessage &imports: imports "A command to open a file with the name, load, and compile/evaluate the contents within the argument namespace or an optional override." [| src retry | src: (File newNamed: fileName &mode: File Read). src exists ifTrue: [retry: Retry clone. _@(retry) describeOn: console [ console ; 'Retry loading ' ; fileName printString ;'\n' ]. - [ns load: src &in: namespace &verbose: verbose &showLoadMessage: showLoadMessage] + [ns load: src &in: namespace &verbose: verbose &showLoadMessage: showLoadMessage &imports: imports] handlingCases: {retry -> [|:_| ^ (ns load: fileName &in: namespace &verbose: verbose)]}] ifFalse: [warn: 'Called load: on something that didn\'t describe a file. Returning the input: ' ; fileName printString. fileName] ]. -ns@(Namespace traits) load: file@(File traits) &in: namespace &verbose: verbose &showLoadMessage: showLoadMessage +ns@(Namespace traits) load: file@(File traits) &in: namespace &verbose: verbose &showLoadMessage: showLoadMessage &imports: imports "A command to open the file, load, and compile/evaluate the contents within the argument namespace or an optional override." [| defaultPaths | verbose `defaultsTo: False. namespace `defaultsTo: ns. + imports do: [| :import | namespace import: import value from: import key]. (showLoadMessage `defaultsTo: True) ifTrue: [inform: 'Loading %r', file locator]. defaultPaths: {Directory current}. diff --git a/src/mobius/prelude.slate b/src/mobius/prelude.slate index b384231..e17b28f 100644 --- a/src/mobius/prelude.slate +++ b/src/mobius/prelude.slate @@ -4,55 +4,52 @@ code which is compiled in to the kernel image." here load: 'src/mobius/map.slate'. -numerics import: #Mixin from: Mixins. #(numerics load: _) `er for: { 'src/lib/fraction.slate'. 'src/lib/complex.slate'. - 'src/lib/numericMixin.slate'. }. + +numerics load: 'src/lib/numericMixin.slate' &imports: {Mixins -> #Mixins}. + #(collections load: _) `er for: { 'src/lib/linkedlist.slate'. "Collection ExtensibleSequence" 'src/lib/cord.slate'. "Sequence" 'src/lib/sortedSet.slate'. - 'src/lib/traversal.slate'. "Collection Sequence IdentitySet Stack" }. + +collections load: 'src/lib/traversal.slate' &imports: + {streams -> #ReadStream. prototypes -> #Root}. "Collection Sequence IdentitySet Stack" + prototypes load: 'src/lib/lookup.slate'. _@prototypes lobby [here]. _@prototypes Syntax [Syntax]. -prototypes import: #ReadStream from: streams. -prototypes import: #TraversalStream from: collections. prototypes import: #nodes from: here. -prototypes load: 'src/lib/path.slate'. "lobby IdentitySet ReadStream" -"These require TraversalStream." +prototypes load: 'src/lib/path.slate' &imports: + {streams -> #ReadStream. collections -> #TraversalStream}. "lobby IdentitySet" prototypes load: 'src/lib/tokenizer.slate'. -collections import: #WriteStream from: streams. -collections import: #PrettyPrinterMixin from: Mixins. -collections import: #Root from: prototypes. +collections load: 'src/lib/subsequence.slate' &imports: + {streams -> #WriteStream. Mixins -> #PrettyPrinterMixin. prototypes -> #Root}. #(collections load: _) `er for: { - 'src/lib/subsequence.slate'. "WriteStream PrettyPrinterMixin Root" 'src/lib/bag.slate'. "ExtensibleCollection Dictionary Collection PrettyPrinterMixin" 'src/lib/queue.slate'. "ArrayBacked Sequence" - 'src/lib/repetition.slate'. "Root PrettyPrinterMixin" -}. - -mappings import: #Set from: collections. -mappings load: 'src/lib/mapping-epilogue.slate'. +} +collections load: 'src/lib/repetition.slate' &imports: + {Mixins -> #PrettyPrinterMixin. prototypes -> #Root}. +mappings load: 'src/lib/mapping-epilogue.slate' &imports: {collections -> #Set}. collections load: 'src/lib/ringbuffer.slate'. "Queue" - -streams import: {#RingBuffer. #Sequence} from: collections. -streams load: 'src/lib/buffer.slate'. "RingBuffer Stream BufferStream WriteStream ReadStream Sequence" - -collections import: #Mapping from: mappings. -collections import: {#ReadStream. #WriteStream. #PositionableStream} from: streams. -collections import: #Integer from: numerics. -collections import: {#Method. #Boolean} from: prototypes. +streams load: 'src/lib/buffer.slate' &imports: + {collections -> {#RingBuffer. #Sequence}}. "Stream BufferStream WriteStream ReadStream" _@collections Nil [Nil]. -collections load: 'src/lib/multi-dimensional.slate'. "Mapping Integer Range Method Boolean" +collections load: 'src/lib/multi-dimensional.slate' &imports: + {mappings -> #Mapping. + streams -> {#ReadStream. #WriteStream. #PositionableStream}. + numerics -> #Integer. + prototypes -> {#Method. #Boolean}. +}. "also Range" -Syntax import: #Stack from: collections. -Syntax load: 'src/lib/precedence.slate'. "Stack" +Syntax load: 'src/lib/precedence.slate' &imports: {collections -> #Stack}. #(here load: _) `er for: { 'src/lib/inspect.slate'. @@ -71,12 +68,10 @@ Syntax load: 'src/lib/precedence.slate'. "Stack" 'src/lib/repl.slate'. }. -prototypes import: #C from: Types. -prototypes load: 'src/lib/extlib.slate'. +prototypes load: 'src/lib/extlib.slate' &imports: {Types -> #C}. prototypes load: 'src/lib/devsupport.slate'. -prototypes import: #Image from: globals. -prototypes load: 'src/lib/platform.slate'. +prototypes load: 'src/lib/platform.slate' &imports: {globals -> #Image}. "Totally optional, makes for pretty source output and enables C code output." load: 'src/syntax/writer.slate'. -- 2.11.4.GIT