The Trunk: Collections-eem.885.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-eem.885.mcz

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

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

Name: Collections-eem.885
Author: eem
Time: 15 April 2020, 4:37:54.800631 pm
UUID: 45d219d3-6ed0-4401-a820-44eebe21d71a
Ancestors: Collections-eem.883, Collections-dtl.884

Switch elementsForwardIdentityTo: to not copy the hash, see http://forum.world.st/How-to-become-immediate-objects-td5114931.html.
Add elementsForwardIdentityAndHashTo: for the old behavior.

=============== Diff against Collections-dtl.884 ===============

Item was added:
+ ----- Method: Array>>elementsForwardIdentityAndHashTo: (in category 'converting') -----
+ elementsForwardIdentityAndHashTo: 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>
+ ec == #'no modification' ifTrue:
+ [^self modificationForbiddenFor: otherArray becomeSelector: #elementsForwardIdentityAndHashTo:].
+ 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 == #'object is pinned' ifTrue:
+ [^self error: 'can''t become pinned objects'].
+ ec == #'insufficient object memory' ifTrue:
+ [self error: 'The virtual machine is out-of-date.  Please upgrade.'].
+ self primitiveFailed!

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 are not copied to the target objects so that the objects in otherArray
+ should still be properly indexed in any existing hashed structures after the mutation."
+ <primitive: 248 error: ec>
- 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>
  ec == #'no modification' ifTrue:
  [^self modificationForbiddenFor: otherArray becomeSelector: #elementsForwardIdentityTo:].
  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 == #'object is pinned' ifTrue:
  [^self error: 'can''t become pinned objects'].
  ec == #'insufficient object memory' ifTrue:
  [self error: 'The virtual machine is out-of-date.  Please upgrade.'].
  self primitiveFailed!