Nicolas Cellier uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-nice.936.mcz ==================== Summary ==================== Name: Collections-nice.936 Author: nice Time: 13 April 2021, 10:21:49.89342 pm UUID: 8d324920-b4ed-f84c-86e7-a4dcd3e7a1c9 Ancestors: Collections-mt.935 Move findInterned: to deprecated Comment a few essential class side selectors. =============== Diff against Collections-mt.935 =============== Item was changed: + ----- Method: Symbol class>>allSymbols (in category 'accessing') ----- - ----- Method: Symbol class>>allSymbols (in category 'access') ----- allSymbols "Answer all interned symbols" | originalNewSymbols originalSymbolTable | originalNewSymbols := NewSymbols. originalSymbolTable := SymbolTable. ^Array new: originalNewSymbols slowSize + originalSymbolTable slowSize streamContents:[ :stream | stream nextPutAll: originalNewSymbols; nextPutAll: originalSymbolTable ] ! Item was removed: - ----- Method: Symbol class>>findInterned: (in category 'instance creation') ----- - findInterned:aString - - self hasInterned:aString ifTrue:[:symbol| ^symbol]. - ^nil.! Item was changed: ----- Method: Symbol class>>intern: (in category 'instance creation') ----- intern: aStringOrSymbol + "Answer the unique Symbol formed with given String. + If it does not exist yet, create it and intern it in the NewSymbols. + Interning a Symbol should return the Symbol itself, no Symbol should be duplicated" | originalNewSymbols | originalNewSymbols := NewSymbols. ^(self lookup: aStringOrSymbol) ifNil:[ | aSymbol newNewSymbols | aStringOrSymbol isSymbol ifTrue:[ aSymbol := aStringOrSymbol. ] ifFalse:[ aSymbol := (aStringOrSymbol isOctetString ifTrue:[ByteSymbol] ifFalse:[WideSymbol]) new: aStringOrSymbol size. aSymbol string: aStringOrSymbol. aSymbol beReadOnlyObject. ]. newNewSymbols := originalNewSymbols copyWith: aSymbol. originalNewSymbols == NewSymbols ifTrue: [ NewSymbols := newNewSymbols. newNewSymbols size > 1000 ifTrue: [ self condenseNewSymbols ]. aSymbol ] ifFalse: [ "Some other process has modified the symbols. Try again." self intern: aStringOrSymbol ] ]! Item was changed: ----- Method: Symbol class>>lookup: (in category 'instance creation') ----- lookup: aStringOrSymbol + "Answer the unique Symbol formed with given String, if it exists. + Answer nil if no such Symbol does exist yet. + Looking up a Symbol should return the Symbol itself + - no Symbol should be duplicated + - every Symbol should be registered in one of the two Symbol tables" | originalNewSymbols originalSymbolTable | originalNewSymbols := NewSymbols. originalSymbolTable := SymbolTable. ^(originalSymbolTable like: aStringOrSymbol) ifNil: [ originalNewSymbols like: aStringOrSymbol ]! Item was changed: + ----- Method: Symbol class>>selectorsContaining: (in category 'accessing') ----- - ----- Method: Symbol class>>selectorsContaining: (in category 'access') ----- selectorsContaining: aString "Answer a list of selectors that contain aString within them. Case-insensitive. Does return symbols that begin with a capital letter." | size selectorList | selectorList := OrderedCollection new. (size := aString size) = 0 ifTrue: [ ^selectorList ]. self allSymbolTablesDo: [ :each | (each size >= size and: [ (each includesSubstring: aString caseSensitive: false) and: [ each numArgs ~= -1 ] ]) ifTrue: [ selectorList add: each ] ]. ^selectorList "Symbol selectorsContaining: 'scon'"! Item was changed: + ----- Method: Symbol class>>selectorsMatching: (in category 'accessing') ----- - ----- Method: Symbol class>>selectorsMatching: (in category 'access') ----- selectorsMatching: aStringPattern "Answer a list of selectors that match aStringPattern within them. Case-insensitive. Does return symbols that begin with a capital letter." | selectorList | selectorList := OrderedCollection new. aStringPattern isEmpty ifTrue: [ ^selectorList ]. self allSymbolTablesDo: [ :each | ((aStringPattern match: each) and: [ each numArgs ~= -1 ]) ifTrue: [selectorList add: each ] ]. ^selectorList "Symbol selectorsMatching: 'parse:*'"! Item was changed: + ----- Method: Symbol class>>thatStarts:skipping: (in category 'accessing') ----- - ----- Method: Symbol class>>thatStarts:skipping: (in category 'access') ----- thatStarts: leadingCharacters skipping: skipSym "Answer a selector symbol that starts with leadingCharacters. Symbols beginning with a lower-case letter handled directly here. Ignore case after first char. If skipSym is not nil, it is a previous answer; start searching after it. If no symbols are found, answer nil. Used by Alt-q (Command-q) routines" | size firstMatch key | size := leadingCharacters size. size = 0 ifTrue: [^skipSym ifNil: [#''] ifNotNil: [nil]]. firstMatch := leadingCharacters at: 1. size > 1 ifTrue: [key := leadingCharacters copyFrom: 2 to: size]. self allSymbolTablesDo: [:each | each size >= size ifTrue: [ ((each at: 1) == firstMatch and: [key == nil or: [(each findString: key startingAt: 2 caseSensitive: false) = 2]]) ifTrue: [^each] ] ] after: skipSym. ^nil "Symbol thatStarts: 'sf' skipping: nil" "Symbol thatStarts: 'sf' skipping: #sfpGetFile:with:with:with:with:with:with:with:with:" "Symbol thatStarts: 'candidate' skipping: nil" ! Item was changed: + ----- Method: Symbol class>>thatStartsCaseSensitive:skipping: (in category 'accessing') ----- - ----- Method: Symbol class>>thatStartsCaseSensitive:skipping: (in category 'access') ----- thatStartsCaseSensitive: leadingCharacters skipping: skipSym "Same as thatStarts:skipping: but caseSensitive" | size firstMatch key | size := leadingCharacters size. size = 0 ifTrue: [^skipSym ifNil: [#''] ifNotNil: [nil]]. firstMatch := leadingCharacters at: 1. size > 1 ifTrue: [key := leadingCharacters copyFrom: 2 to: size]. self allSymbolTablesDo: [:each | each size >= size ifTrue: [ ((each at: 1) == firstMatch and: [key == nil or: [(each findString: key startingAt: 2 caseSensitive: true) = 2]]) ifTrue: [^each] ] ] after: skipSym. ^nil ! |
Free forum by Nabble | Edit this page |