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

H. Hirzel hannes.hirzel at gmail.com
Sat Jun 23 19:15:50 UTC 2018


Retest of loading this version

http://etoys.laptop.org/src/Content/ExampleEtoys/CarAndPen.014.pr

still works after applying System-kfr.1036.mcz

On 6/23/18, karl ramberg <karlramberg at gmail.com> wrote:
> FlasherMorph to Flasher is a known rename. But if you use Flasher in a new
> project in trunk 5.2 it would create a false positive rename on loading.
> This is a hopefully a fix for that issue.
>
> Best,
> Karl
> On Sat, 23 Jun 2018 at 19:58, H. Hirzel <hannes.hirzel at gmail.com> wrote:
>
>> I did a re-test with loading
>>
>> https://freudenbergs.de/bert/squeakjs/Etoys/Home.007.pr
>>
>> No problem with loading and FlasherMorph.
>> http://wiki.squeak.org/squeak/1169
>>
>> The car moves around.
>>
>> A unrelated problem as it seems with a script though.
>>
>> --Hannes
>>
>> On 6/23/18, David T. Lewis <lewis at mail.msen.com> wrote:
>> > 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