[squeak-dev] The Inbox: Collections-nice.530.mcz
commits at source.squeak.org
commits at source.squeak.org
Wed Sep 4 00:22:05 UTC 2013
A new version of Collections was added to project The Inbox:
http://source.squeak.org/inbox/Collections-nice.530.mcz
==================== Summary ====================
Name: Collections-nice.530
Author: nice
Time: 4 September 2013, 2:21:28.852 am
UUID: d732aa23-1c77-4c1e-abc0-d8d4506b7f9f
Ancestors: Collections-ul.529
Fix this:
self assert: (allSymbols select: [:s | s = '+']) size = 1.
1) It is un-necessary to enumerate the 1-char symbols, they already are in SymbolTable (the first time they were created via #findIntern: or by virtue of last #rehash) !
2) We can use a WeekArray rather than an Array because there is no point in keeping a reference to unused 1-char symbols.
Maybe we should get rid of OneCharacterSymbols class var, but I didn't dare...
=============== Diff against Collections-ul.529 ===============
Item was changed:
----- Method: Symbol class>>allSymbols (in category 'access') -----
allSymbols
"Answer all interned symbols"
^Array streamContents:[:s|
s nextPutAll: NewSymbols.
- s nextPutAll: OneCharacterSymbols.
s nextPutAll: SymbolTable.
].
!
Item was changed:
----- Method: Symbol class>>initialize (in category 'class initialization') -----
initialize
"Symbol initialize"
Symbol rehash.
+ OneCharacterSymbols := WeakArray new: 256.
+ (0 to: 255) do: [ :byte | byte asCharacter asSymbol].
- OneCharacterSymbols := nil.
- OneCharacterSymbols := (1 to: 256) collect: [ :i | (i - 1) asCharacter asSymbol].
Smalltalk addToShutDownList: self.
!
Item was changed:
----- Method: Symbol class>>internCharacter: (in category 'instance creation') -----
internCharacter: aCharacter
aCharacter asciiValue > 256 ifTrue:[^self intern: aCharacter asString].
+ ^(OneCharacterSymbols at: aCharacter asciiValue + 1) ifNil: [OneCharacterSymbols at: aCharacter asciiValue + 1 put: (self intern: aCharacter asString)]
- OneCharacterSymbols ifNil: [^self intern: aCharacter asString].
- ^OneCharacterSymbols at: aCharacter asciiValue + 1
!
Item was changed:
----- 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 ascii |
selectorList := OrderedCollection new.
(size := aString size) = 0 ifTrue: [^selectorList].
aString size = 1 ifTrue:
[
ascii := aString first asciiValue.
+ ascii < 128 ifTrue: [(OneCharacterSymbols at: ascii+1) ifNotNil: [:s | selectorList add: s]]
- ascii < 128 ifTrue: [selectorList add: (OneCharacterSymbols at: ascii+1)]
].
(aString first isLetter or: [aString first isDigit]) ifFalse:
[
aString size = 2 ifTrue:
[Symbol hasInterned: aString ifTrue:
[:s | selectorList add: s]].
^selectorList
].
selectorList := selectorList copyFrom: 2 to: selectorList size.
self allSymbolTablesDo: [:each |
each size >= size ifTrue:
[(each findSubstring: aString in: each startingAt: 1
matchTable: CaseInsensitiveOrder) > 0
ifTrue: [selectorList add: each]]].
^selectorList reject: [:each | "reject non-selectors, but keep ones that begin with an uppercase"
each numArgs < 0 and: [each asString withFirstCharacterDownshifted numArgs < 0]].
"Symbol selectorsContaining: 'scon'"!
More information about the Squeak-dev
mailing list
|