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. <br>This is a hopefully a fix for that issue. <br><br>Best,<br>Karl<br><div class="gmail_quote"><div dir="ltr">On Sat, 23 Jun 2018 at 19:58, H. Hirzel <<a href="mailto:hannes.hirzel@gmail.com">hannes.hirzel@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I did a re-test with loading<br>
<br>
<a href="https://freudenbergs.de/bert/squeakjs/Etoys/Home.007.pr" rel="noreferrer" target="_blank">https://freudenbergs.de/bert/squeakjs/Etoys/Home.007.pr</a><br>
<br>
No problem with loading and FlasherMorph.<br>
<a href="http://wiki.squeak.org/squeak/1169" rel="noreferrer" target="_blank">http://wiki.squeak.org/squeak/1169</a><br>
<br>
The car moves around.<br>
<br>
A unrelated problem as it seems with a script though.<br>
<br>
--Hannes<br>
<br>
On 6/23/18, David T. Lewis <<a href="mailto:lewis@mail.msen.com" target="_blank">lewis@mail.msen.com</a>> wrote:<br>
> On Sat, Jun 23, 2018 at 04:02:29PM +0200, H. Hirzel wrote:<br>
>> Adding the two lines<br>
>><br>
>> "make sure we don't try to convert classes not in structures to renamed<br>
>> classes"<br>
>> renamed keysDo:[ :renamedClass | structures at: renamedClass<br>
>> ifAbsent:[ renamed removeKey: renamedClass]].<br>
>><br>
>><br>
>> to<br>
>><br>
>> SmartRefStream>>reshapedClassesIn:<br>
>><br>
>><br>
>> makes a number of *.pr  (SqueakLand project files) load into Squeak<br>
>> 5.2a which previously did not load.  See screen shot. This does not<br>
>> necessarily mean that they work, but they load without an error<br>
>> message.<br>
><br>
> Thanks for the explanation, and the screen shot illustrates nicely :-)<br>
><br>
><br>
>><br>
>> The instance variable 'renamed' of SmartRefStream contains a<br>
>> dictionary of Classes who have a different name.<br>
>><br>
>> When loading a project an instance of the new class is made and a<br>
>> conversion call is sent to that instance.<br>
>><br>
>> (old class name symbol -> new class name).<br>
>><br>
>><br>
>> The instance variable 'structures' contains the structure of classes<br>
>> (class version and order and names of instance variables written then<br>
>> the *.pr file was saved<br>
>><br>
>> Example:<br>
>><br>
>> structures   <br>
>><br>
>> Dictionary of (#Rectangle -> #(<classVersionInteger> 'origin' 'corner')).<br>
>><br>
>> Inst var names are strings.<br>
>><br>
>><br>
>> ----------------------------------------------------------------------------------<br>
>> Recommendation: This fix should be moved to the trunk<br>
>> ----------------------------------------------------------------------------------<br>
>><br>
><br>
> +1<br>
><br>
> Any objections?<br>
><br>
> This would be good to move to trunk. I don't think it causes any issues<br>
> for the upcoming release, and it is a good improvement (since after all,<br>
> you cannot debug Etoys projects if you cannot even load them in the first<br>
> place.<br>
><br>
> I do have one question. Is this a workaround for a bug elsewhere in<br>
> SmarRefStream?<br>
> It seems like #reshapedClassesIn: is expecting that anything in the renamed<br>
> dictionary should already be in the structures dictionary. If that is not<br>
> the case, is that because of a bug, or is it simply the case the the<br>
> situation<br>
> occurs normally when dealing with a class that does not exist in the system<br>
> at all?<br>
><br>
> I tried loading EtoysProjects/<a href="http://Home.007.pr" rel="noreferrer" target="_blank">Home.007.pr</a> to check this in a debugger, and<br>
> I can see that the condition occurs when trying to load FlasherMorph, which<br>
> is not in my image. That suggests this is a "normal" condition, and the<br>
> end result after loading this project would be unresolved references to<br>
> that missing class.<br>
><br>
> Sorry for the long question, I'm just trying to understand how this works.<br>
><br>
> Either way, +1 for moving to trunk.<br>
><br>
> Dave<br>
><br>
>><br>
>><br>
>><br>
>> On Thu, 21 Jun 2018 18:49:47 0000, <a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a><br>
>> <<a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a>> wrote:<br>
>> > A new version of System was added to project The Inbox:<br>
>> > <a href="http://source.squeak.org/inbox/System-kfr.1036.mcz" rel="noreferrer" target="_blank">http://source.squeak.org/inbox/System-kfr.1036.mcz</a><br>
>> ><br>
>> > ==================== Summary ====================<br>
>> ><br>
>> > Name: System-kfr.1036<br>
>> > Author: kfr<br>
>> > Time: 21 June 2018, 8:49:18.217801 pm<br>
>> > UUID: 4150334e-4f5f-744c-b5b7-814cef973cc0<br>
>> > Ancestors: System-kfr.1035<br>
>> ><br>
>> > Remove classes from SmartRefStream instanceVariable renamed that not are<br>
>> > in<br>
>> > structures so we avoid false positives<br>
>> ><br>
>> > =============== Diff against System-kfr.1035 ===============<br>
>> ><br>
>> > Item was changed:<br>
>> >   ----- Method: SmartRefStream>>reshapedClassesIn: (in category 'import<br>
>> > image segment') -----<br>
>> >   reshapedClassesIn: outPointers<br>
>> >    "Look for classes in the outPointer array that have changed shape.<br>
>> > Make<br>
>> > a fake class for the old shape.  Return a dictionary mapping Fake<br>
>> > classes to<br>
>> > Real classes.  Substitute fake classes for real ones in outPointers."<br>
>> ><br>
>> >    | mapFakeClassesToReal |<br>
>> ><br>
>> >    self flag: #bobconv.    <br>
>> > +  "make sure we don't try to convert classes not in structures to<br>
>> > renamed<br>
>> > classes"<br>
>> > +  renamed keysDo:[ :renamedClass | structures at: renamedClass<br>
>> > ifAbsent:[<br>
>> > renamed removeKey: renamedClass]].<br>
>> ><br>
>> > -<br>
>> >    mapFakeClassesToReal := IdentityDictionary new.<br>
>> >    outPointers withIndexDo: [:outp :ind | | originalName fakeCls |<br>
>> >            outp isBehavior ifTrue: [<br>
>> >                    originalName := renamed keyAtValue: outp name<br>
>> >                            ifAbsent: [renamedConv at: ind ifAbsent: [outp name]].<br>
>> > +                  "in DiskProxy>>comeFullyUpOnReload: we saved the name at the index"<br>
>> > -                  structures at: originalName ifAbsent: [originalName := outp name].<br>
>> > "check for false positives in renamed"<br>
>> > -                          "in DiskProxy>>comeFullyUpOnReload: we saved the name at the<br>
>> > index"<br>
>> >                    fakeCls := self mapClass: outp origName: originalName.<br>
>> >                    fakeCls == outp ifFalse: [<br>
>> >                            mapFakeClassesToReal at: fakeCls put: outp.<br>
>> >                            outPointers at: ind put: fakeCls]]].<br>
>> >    ^ mapFakeClassesToReal!<br>
>> ><br>
>> ><br>
>> ><br>
><br>
><br>
>><br>
><br>
><br>
><br>
<br>
</blockquote></div>