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! |
Free forum by Nabble | Edit this page |