[Vm-dev] VM Maker: Cog-eem.238.mcz
Chris Muller
asqueaker at gmail.com
Tue Feb 3 16:05:37 UTC 2015
Thanks Eliot! I have been running with it and have not run into any
issues -- although I guess it only come into play for me when building
an image..
On Mon, Feb 2, 2015 at 5:01 PM, <commits at source.squeak.org> wrote:
>
> Eliot Miranda uploaded a new version of Cog to project VM Maker:
> http://source.squeak.org/VMMaker/Cog-eem.238.mcz
>
> ==================== Summary ====================
>
> Name: Cog-eem.238
> Author: eem
> Time: 2 February 2015, 3:01:40.657 pm
> UUID: 632143e7-106b-46e6-8b63-793708755e06
> Ancestors: Cog-eem.237
>
> Spur Bootstrap:
> Relax the check for a single instance metaclass in
> ClassDescription>>EupdateInstances:from:isMeta:.
> If the ClassBuilder is using becomeForward: and
> avoiding the GC on instance mutation, a metaclass
> may be the class of either the mutated class or the
> class it is mutated from (oldClass).
>
> =============== Diff against Cog-eem.237 ===============
>
> Item was changed:
> ----- Method: SpurBootstrapPrototypes>>ClassDescriptionPROTOTYPEupdateInstances:from:isMeta: (in category 'method prototypes') -----
> ClassDescriptionPROTOTYPEupdateInstances: oldInstances from: oldClass isMeta: isMeta
> "Recreate any existing instances of the argument, oldClass, as instances of the receiver,
> which is a newly changed class. Permute variables as necessary, and forward old instances
> to new instances. Answer nil to defeat old clients that expect an array of old instances.
> The old behaviour, which necessitated a global GC, exchanged identities and answered
> the old instances. But no clients used the result. This way we avoid the unnecessary GC,"
> | map variable instSize newInstances |
>
> oldInstances isEmpty ifTrue:
> [^nil]. "no instances to convert"
> isMeta ifTrue:
> [(oldInstances size = 1
> + and: [self soleInstance class == self
> + or: [self soleInstance class == oldClass]]) ifFalse:
> + [^self error: 'Metaclasses can only have one instance']].
> - and: [self soleInstance class == self]) ifFalse:
> - [^self error:'Metaclasses can only have one instance']].
> map := self instVarMappingFrom: oldClass.
> variable := self isVariable.
> instSize := self instSize.
> newInstances := Array new: oldInstances size.
> 1 to: oldInstances size do:
> [:i|
> newInstances
> at: i
> put: (self newInstanceFrom: (oldInstances at: i) variable: variable size: instSize map: map)].
> "Now perform a bulk mutation of old instances into new ones"
> oldInstances elementsForwardIdentityTo: newInstances.
> ^nil!
>
More information about the Vm-dev
mailing list