[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