[squeak-dev] The Inbox: System-kfr.1036.mcz

David T. Lewis lewis at mail.msen.com
Sat Jun 23 15:25:46 UTC 2018


On Sat, Jun 23, 2018 at 04:02:29PM +0200, H. Hirzel wrote:
> Adding the two lines
> 
> "make sure we don't try to convert classes not in structures to renamed classes"
> renamed keysDo:[ :renamedClass | structures at: renamedClass
> ifAbsent:[ renamed removeKey: renamedClass]].
> 
> 
> to
> 
> SmartRefStream>>reshapedClassesIn:
> 
> 
> makes a number of *.pr  (SqueakLand project files) load into Squeak
> 5.2a which previously did not load.  See screen shot. This does not
> necessarily mean that they work, but they load without an error
> message.

Thanks for the explanation, and the screen shot illustrates nicely :-)


> 
> The instance variable 'renamed' of SmartRefStream contains a
> dictionary of Classes who have a different name.
> 
> When loading a project an instance of the new class is made and a
> conversion call is sent to that instance.
> 
> (old class name symbol -> new class name).
> 
> 
> The instance variable 'structures' contains the structure of classes
> (class version and order and names of instance variables written then
> the *.pr file was saved
> 
> Example:
> 
> structures 	
> 
> Dictionary of (#Rectangle -> #(<classVersionInteger> 'origin' 'corner')).
> 
> Inst var names are strings.
> 
> 
> ----------------------------------------------------------------------------------
> Recommendation: This fix should be moved to the trunk
> ----------------------------------------------------------------------------------
> 

+1

Any objections?

This would be good to move to trunk. I don't think it causes any issues
for the upcoming release, and it is a good improvement (since after all,
you cannot debug Etoys projects if you cannot even load them in the first place.

I do have one question. Is this a workaround for a bug elsewhere in SmarRefStream?
It seems like #reshapedClassesIn: is expecting that anything in the renamed
dictionary should already be in the structures dictionary. If that is not
the case, is that because of a bug, or is it simply the case the the situation
occurs normally when dealing with a class that does not exist in the system
at all?

I tried loading EtoysProjects/Home.007.pr to check this in a debugger, and
I can see that the condition occurs when trying to load FlasherMorph, which
is not in my image. That suggests this is a "normal" condition, and the
end result after loading this project would be unresolved references to
that missing class.

Sorry for the long question, I'm just trying to understand how this works.

Either way, +1 for moving to trunk.

Dave

> 
> 
> 
> On Thu, 21 Jun 2018 18:49:47 0000, commits at source.squeak.org
> <commits at source.squeak.org> wrote:
> > A new version of System was added to project The Inbox:
> > http://source.squeak.org/inbox/System-kfr.1036.mcz
> >
> > ==================== Summary ====================
> >
> > Name: System-kfr.1036
> > Author: kfr
> > Time: 21 June 2018, 8:49:18.217801 pm
> > UUID: 4150334e-4f5f-744c-b5b7-814cef973cc0
> > Ancestors: System-kfr.1035
> >
> > Remove classes from SmartRefStream instanceVariable renamed that not are in
> > structures so we avoid false positives
> >
> > =============== Diff against System-kfr.1035 ===============
> >
> > Item was changed:
> >   ----- Method: SmartRefStream>>reshapedClassesIn: (in category 'import
> > image segment') -----
> >   reshapedClassesIn: outPointers
> >   	"Look for classes in the outPointer array that have changed shape.  Make
> > a fake class for the old shape.  Return a dictionary mapping Fake classes to
> > Real classes.  Substitute fake classes for real ones in outPointers."
> >
> >   	| mapFakeClassesToReal |
> >
> >   	self flag: #bobconv.	
> > + 	"make sure we don't try to convert classes not in structures to renamed
> > classes"
> > + 	renamed keysDo:[ :renamedClass | structures at: renamedClass ifAbsent:[
> > renamed removeKey: renamedClass]].
> >
> > -
> >   	mapFakeClassesToReal := IdentityDictionary new.
> >   	outPointers withIndexDo: [:outp :ind | | originalName fakeCls |
> >   		outp isBehavior ifTrue: [
> >   			originalName := renamed keyAtValue: outp name
> >   				ifAbsent: [renamedConv at: ind ifAbsent: [outp name]].
> > + 			"in DiskProxy>>comeFullyUpOnReload: we saved the name at the index"
> > - 			structures at: originalName ifAbsent: [originalName := outp name].
> > "check for false positives in renamed"
> > - 				"in DiskProxy>>comeFullyUpOnReload: we saved the name at the index"
> >   			fakeCls := self mapClass: outp origName: originalName.
> >   			fakeCls == outp ifFalse: [
> >   				mapFakeClassesToReal at: fakeCls put: outp.
> >   				outPointers at: ind put: fakeCls]]].
> >   	^ mapFakeClassesToReal!
> >
> >
> >


> 



More information about the Squeak-dev mailing list