The Trunk: Collections.spur-ul.624.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Collections.spur-ul.624.mcz

commits-2
Eliot Miranda uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections.spur-ul.624.mcz

==================== Summary ====================

Name: Collections.spur-ul.624
Author: eem
Time: 4 May 2015, 12:30:12.646 pm
UUID: c1b148d5-799b-4499-b0c5-e99097c07e75
Ancestors: Collections-ul.624, Collections.spur-tfel.623

Collections-ul.624 patched for Spur by SpurBootstrapMonticelloPackagePatcher Cog-eem.262

Various improvements related to Characters and Strings.

Resurrected Character's ClassificationTable
- initialize it based on the actual EncodedCharSet for leadingChar 0 (Unicode)
- added a bit for #isDigit
- added a mask for #isAlphaNumeirc
- use 0 as a tag if the uppercase or lowercase character value is greater than 255
- initialize the table in the postscript (to not infere with #initialize)

Character >> #encodedCharSet assumes than leadingChar 0 means Unicode. This is hardcoded in a few methods, so why not unify it here?

Simpler and faster Character >> #tokenish.

Simpler and faster String >> #withoutLineEndings.

Precalculate the size of the result in Symbol >> #numArgs: to avoid an extra allocation.

=============== Diff against Collections-ul.624 ===============

Item was changed:
  ----- Method: Array>>elementsExchangeIdentityWith: (in category 'converting') -----
  elementsExchangeIdentityWith: otherArray
+ "This primitive performs a bulk mutation, causing all pointers to the elements of the
+ receiver to be replaced by pointers to the corresponding elements of otherArray.
+ At the same time, all pointers to the elements of otherArray are replaced by
+ pointers to the corresponding elements of this array.  The identityHashes remain
+ with the pointers rather than with the objects so that objects in hashed structures
+ should still be properly indexed after the mutation."
- "This primitive performs a bulk mutation, causing all pointers to the elements of this array to be replaced by pointers to the corresponding elements of otherArray.  At the same time, all pointers to the elements of otherArray are replaced by pointers to the corresponding elements of this array.  The identityHashes remain with the pointers rather than with the objects so that objects in hashed structures should still be properly indexed after the mutation."
 
+ <primitive: 128 error: ec>
+ ec == #'bad receiver' ifTrue:
+ [^self error: 'receiver must be of class Array'].
+ ec == #'bad argument' ifTrue:
+ [^self error: (otherArray class == Array
+ ifTrue: ['arg must be of class Array']
+ ifFalse: ['receiver and argument must have the same size'])].
+ ec == #'inappropriate operation' ifTrue:
+ [^self error: 'can''t become immediates such as SmallIntegers or Characters'].
+ ec == #'no modification' ifTrue:
+ [^self error: 'can''t become immutable objects'].
+ ec == #'object is pinned' ifTrue:
+ [^self error: 'can''t become pinned objects'].
+ ec == #'insufficient object memory' ifTrue:
+ [Smalltalk garbageCollect < 1048576 ifTrue:
+ [Smalltalk growMemoryByAtLeast: 1048576].
+ ^self elementsExchangeIdentityWith: otherArray].
+ self primitiveFailed!
- <primitive: 128>
- otherArray class == Array ifFalse: [^ self error: 'arg must be array'].
- self size = otherArray size ifFalse: [^ self error: 'arrays must be same size'].
- (self anySatisfy: [:obj | obj class == SmallInteger]) ifTrue: [^ self error: 'can''t become SmallIntegers'].
- (otherArray anySatisfy: [:obj | obj class == SmallInteger]) ifTrue: [^ self error: 'can''t become SmallIntegers'].
- self with: otherArray do:[:a :b| a == b ifTrue:[^self error:'can''t become yourself']].
-
- "Must have failed because not enough space in forwarding table (see ObjectMemory-prepareForwardingTableForBecoming:with:twoWay:).  Do GC and try again only once"
- (Smalltalk bytesLeft: true) = Smalltalk primitiveGarbageCollect
- ifTrue: [^ self primitiveFailed].
- ^ self elementsExchangeIdentityWith: otherArray!

Item was changed:
  ----- Method: Array>>elementsForwardIdentityTo: (in category 'converting') -----
  elementsForwardIdentityTo: otherArray
+ "This primitive performs a bulk mutation, causing all pointers to the elements of the
+ receiver to be replaced by pointers to the corresponding elements of otherArray.
+ The identityHashes remain with the pointers rather than with the objects so that
+ the objects in this array should still be properly indexed in any existing hashed
+ structures after the mutation."
+ <primitive: 72 error: ec>
- "This primitive performs a bulk mutation, causing all pointers to the elements of this array to be replaced by pointers to the corresponding elements of otherArray.  The identityHashes remain with the pointers rather than with the objects so that the objects in this array should still be properly indexed in any existing hashed structures after the mutation."
- <primitive: 72>
  self primitiveFailed!

Item was changed:
  ----- Method: Array>>elementsForwardIdentityTo:copyHash: (in category 'converting') -----
  elementsForwardIdentityTo: otherArray copyHash: copyHash
+ "This primitive performs a bulk mutation, causing all pointers to the elements of the
+ receiver to be replaced by pointers to the corresponding elements of otherArray.
+ If copyHash is true, the identityHashes remain with the pointers rather than with the
+ objects so that the objects in the receiver should still be properly indexed in any
+ existing hashed structures after the mutation.  If copyHash is false, then the hashes
+ of the objects in otherArray remain unchanged.  If you know what you're doing this
+ may indeed be what you want."
+ <primitive: 249 error: ec>
- "This primitive performs a bulk mutation, causing all pointers to the elements of this array to be replaced by pointers to the corresponding elements of otherArray.  The identityHashes remain with the pointers rather than with the objects so that the objects in this array should still be properly indexed in any existing hashed structures after the mutation."
- <primitive: 249>
  self primitiveFailed!

Item was changed:
==== ERROR ===

Error: Unrecognized class type

4 May 2015 7:30:49.411 pm

VM: unix - a SmalltalkImage
Image: Squeak3.11alpha [latest update: #8824]

SecurityManager state:
Restricted: false
FileAccess: true
SocketAccess: true
Working Dir /home/squeaksource
Trusted Dir /home/squeaksource/secure
Untrusted Dir /home/squeaksource/My Squeak

MCClassDefinition(Object)>>error:
        Receiver: a MCClassDefinition(Character)
        Arguments and temporary variables:
                aString: 'Unrecognized class type'
        Receiver's instance variables:
                name: #Character
                superclassName: #Magnitude
                variables: an OrderedCollection(a MCClassVariableDefinition(AlphaNumericMask) a...etc...
                category: #'Collections-Strings'
                type: #immediate
                comment: 'I represent a character by storing its associated Unicode as an unsig...etc...
                commentStamp: 'eem 8/12/2014 14:53'
                traitComposition: nil
                classTraitComposition: nil

MCClassDefinition>>kindOfSubclass
        Receiver: a MCClassDefinition(Character)
        Arguments and temporary variables:

        Receiver's instance variables:
                name: #Character
                superclassName: #Magnitude
                variables: an OrderedCollection(a MCClassVariableDefinition(AlphaNumericMask) a...etc...
                category: #'Collections-Strings'
                type: #immediate
                comment: 'I represent a character by storing its associated Unicode as an unsig...etc...
                commentStamp: 'eem 8/12/2014 14:53'
                traitComposition: nil
                classTraitComposition: nil

MCClassDefinition>>printDefinitionOn:
        Receiver: a MCClassDefinition(Character)
        Arguments and temporary variables:
                stream: a WriteStream
        Receiver's instance variables:
                name: #Character
                superclassName: #Magnitude
                variables: an OrderedCollection(a MCClassVariableDefinition(AlphaNumericMask) a...etc...
                category: #'Collections-Strings'
                type: #immediate
                comment: 'I represent a character by storing its associated Unicode as an unsig...etc...
                commentStamp: 'eem 8/12/2014 14:53'
                traitComposition: nil
                classTraitComposition: nil

[] in MCDiffyTextWriter(MCStWriter)>>writeClassDefinition:
        Receiver: a MCDiffyTextWriter
        Arguments and temporary variables:
                definition: a WriteStream
                s: a MCClassDefinition(Character)
        Receiver's instance variables:
                stream: a WriteStream
                initStream: nil


--- The full stack ---
MCClassDefinition(Object)>>error:
MCClassDefinition>>kindOfSubclass
MCClassDefinition>>printDefinitionOn:
[] in MCDiffyTextWriter(MCStWriter)>>writeClassDefinition:
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
String class(SequenceableCollection class)>>new:streamContents:
String class(SequenceableCollection class)>>streamContents:
MCDiffyTextWriter(MCTextWriter)>>chunkContents:
MCDiffyTextWriter(MCStWriter)>>writeClassDefinition:
MCDiffyTextWriter(MCStWriter)>>visitClassDefinition:
MCClassDefinition>>accept:
[] in MCDiffyTextWriter(MCTextWriter)>>visitInFork:
String class(SequenceableCollection class)>>new:streamContents:
String class(SequenceableCollection class)>>streamContents:
MCDiffyTextWriter(MCTextWriter)>>visitInFork:
MCDiffyTextWriter>>writePatchFrom:to:
MCDiffyTextWriter>>writeModification:
[] in MCDiffyTextWriter>>writePatch:
SortedCollection(OrderedCollection)>>do:
MCDiffyTextWriter>>writePatch:
SSDiffyTextWriter>>writePatch:
[] in SSDiffyTextWriter>>writeVersion:for:
BlockClosure>>on:do:
SSDiffyTextWriter>>writeVersion:for:
[] in SSEMailSubscription>>versionAdded:to:
BlockClosure>>on:do:
SSEMailSubscription>>versionAdded:to:
[] in [] in SSProject>>versionAdded:
[] in BlockClosure>>newProcess