The Trunk: Tools-eem.832.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

The Trunk: Tools-eem.832.mcz

commits-2
Eliot Miranda uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-eem.832.mcz

==================== Summary ====================

Name: Tools-eem.832
Author: eem
Time: 16 October 2018, 4:20:50.731928 pm
UUID: 9aa4b922-fe6a-41cb-8cba-974b14632177
Ancestors: Tools-cmm.831

Fix a bug with DebuggerMethodMap and full blocks (Sista V1 bytecode set).  DebuggerMethodMap must be careful to use the right kind iof dictionry (Dictionary vs IdentityDictionary) for mapping startKeys to block starts and block starts to temps.  startKeys may be values (startpc with embedded blocks) or objects (initialPC and block itself for full blocks).  And blockExtentsToTempRefs must always be a Dictionary ince block extents are ranges.

=============== Diff against Tools-cmm.831 ===============

Item was changed:
  ----- Method: DebuggerMethodMapForClosureCompiledMethods>>privateTempRefsForContext:startKeysToBlockExtents: (in category 'private') -----
  privateTempRefsForContext: aContext startKeysToBlockExtents: theContextsStartKeysToBlockExtents
  "Answer the sequence of temps in scope in aContext in the natural order,
  outermost arguments and temporaries first, innermost last.  Each temp is
  a pair of the temp's name followed by a reference.  The reference can be
  integer - index of temp in aContext
  #( indirectionVectorIndex tempIndex ) - remote temp in indirectionVector at index in aContext
  #( outer. temp reference ) - a temp reference in an outer context."
  blockExtentsToTempRefs ifNil:
  [blockExtentsToTempRefs := (aContext method holdsTempNames
  ifTrue: [aContext method]
  ifFalse: [methodNode]) blockExtentsToTempsMap.
+ blockExtentsToTempRefs
+ ifNil: ["an empty method.  shouldn't be able to step into here but it
+  can happen in weird circumstances (i.e. with MethodWrapper)."
+ blockExtentsToTempRefs := Dictionary new.
+ blockExtentsToTempRefs
+ at: (theContextsStartKeysToBlockExtents at: aContext startKey)
+ put: {}]
+ ifNotNil:
+ [(blockExtentsToTempRefs isKindOf: IdentityDictionary) ifTrue:
+ [blockExtentsToTempRefs := Dictionary withAll: blockExtentsToTempRefs associations]].
+ startKeysToTempRefs := aContext homeMethod newBlockStartMap].
- blockExtentsToTempRefs ifNil:
- ["an empty method.  shouldn't be able to step into here but it
-  can happen in weird circumstances (i.e. with MethodWrapper)."
- blockExtentsToTempRefs := Dictionary new.
- blockExtentsToTempRefs
- at: (theContextsStartKeysToBlockExtents at: aContext startKey)
- put: {}].
- startKeysToTempRefs := Dictionary new].
  ^startKeysToTempRefs
  at: aContext startKey
  ifAbsentPut:
  [| localRefs |
  localRefs := blockExtentsToTempRefs at: (theContextsStartKeysToBlockExtents at: aContext startKey) ifAbsent: [#()].
  aContext outerContext
  ifNil: [localRefs]
  ifNotNil:
  [:outer| | outerTemps |
  "Present temps in the order outermost to innermost left-to-right, but replace
  copied outermost temps with their innermost copies"
  outerTemps := (self
  privateTempRefsForContext: outer
  startKeysToBlockExtents: theContextsStartKeysToBlockExtents) collect:
  [:outerPair|
  localRefs
  detect: [:localPair| outerPair first = localPair first]
  ifNone: [{ outerPair first. { #outer. outerPair last } }]].
  outerTemps,
  (localRefs reject: [:localPair| outerTemps anySatisfy: [:outerPair| localPair first = outerPair first]])]]!


Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Tools-eem.832.mcz

Eliot Miranda-2
Apologies.  This has a bad mistake in it.  Ive deleted it and am sitting on the correct fix for a bit longer, given Chris' recent reminding of the trunk committing rules.

On Tue, Oct 16, 2018 at 4:21 PM <[hidden email]> wrote:
Eliot Miranda uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-eem.832.mcz

==================== Summary ====================

Name: Tools-eem.832
Author: eem
Time: 16 October 2018, 4:20:50.731928 pm
UUID: 9aa4b922-fe6a-41cb-8cba-974b14632177
Ancestors: Tools-cmm.831

Fix a bug with DebuggerMethodMap and full blocks (Sista V1 bytecode set).  DebuggerMethodMap must be careful to use the right kind iof dictionry (Dictionary vs IdentityDictionary) for mapping startKeys to block starts and block starts to temps.  startKeys may be values (startpc with embedded blocks) or objects (initialPC and block itself for full blocks).  And blockExtentsToTempRefs must always be a Dictionary ince block extents are ranges.

=============== Diff against Tools-cmm.831 ===============

Item was changed:
  ----- Method: DebuggerMethodMapForClosureCompiledMethods>>privateTempRefsForContext:startKeysToBlockExtents: (in category 'private') -----
  privateTempRefsForContext: aContext startKeysToBlockExtents: theContextsStartKeysToBlockExtents
        "Answer the sequence of temps in scope in aContext in the natural order,
         outermost arguments and temporaries first, innermost last.  Each temp is
         a pair of the temp's name followed by a reference.  The reference can be
                integer - index of temp in aContext
                #( indirectionVectorIndex tempIndex ) - remote temp in indirectionVector at index in aContext
                #( outer. temp reference ) - a temp reference in an outer context."
        blockExtentsToTempRefs ifNil:
                [blockExtentsToTempRefs := (aContext method holdsTempNames
                                                                                ifTrue: [aContext method]
                                                                                ifFalse: [methodNode]) blockExtentsToTempsMap.
+                blockExtentsToTempRefs
+                       ifNil: ["an empty method.  shouldn't be able to step into here but it
+                                 can happen in weird circumstances (i.e. with MethodWrapper)."
+                               blockExtentsToTempRefs := Dictionary new.
+                               blockExtentsToTempRefs
+                                       at: (theContextsStartKeysToBlockExtents at: aContext startKey)
+                                       put: {}]
+                       ifNotNil:
+                               [(blockExtentsToTempRefs isKindOf: IdentityDictionary) ifTrue:
+                                       [blockExtentsToTempRefs := Dictionary withAll: blockExtentsToTempRefs associations]].
+                startKeysToTempRefs := aContext homeMethod newBlockStartMap].
-                blockExtentsToTempRefs ifNil:
-                       ["an empty method.  shouldn't be able to step into here but it
-                         can happen in weird circumstances (i.e. with MethodWrapper)."
-                       blockExtentsToTempRefs := Dictionary new.
-                       blockExtentsToTempRefs
-                               at: (theContextsStartKeysToBlockExtents at: aContext startKey)
-                               put: {}].
-                startKeysToTempRefs := Dictionary new].
        ^startKeysToTempRefs
                at: aContext startKey
                ifAbsentPut:
                        [| localRefs |
                         localRefs := blockExtentsToTempRefs at: (theContextsStartKeysToBlockExtents at: aContext startKey) ifAbsent: [#()].
                         aContext outerContext
                                ifNil: [localRefs]
                                ifNotNil:
                                        [:outer| | outerTemps |
                                        "Present temps in the order outermost to innermost left-to-right, but replace
                                         copied outermost temps with their innermost copies"
                                         outerTemps := (self
                                                                                privateTempRefsForContext: outer
                                                                                startKeysToBlockExtents: theContextsStartKeysToBlockExtents) collect:
                                                [:outerPair|
                                                localRefs
                                                        detect: [:localPair| outerPair first = localPair first]
                                                        ifNone: [{ outerPair first. { #outer. outerPair last } }]].
                                        outerTemps,
                                         (localRefs reject: [:localPair| outerTemps anySatisfy: [:outerPair| localPair first = outerPair first]])]]!




--
_,,,^..^,,,_
best, Eliot


Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Tools-eem.832.mcz

Chris Muller-3
Thanks for opting to keep 832 permanently out of the ancestry, instead
of permanently in.  I truly believe that caring about quality in this
part of the artifact we make is worth it.

Best Regards,
  Chris
On Tue, Oct 16, 2018 at 8:28 PM Eliot Miranda <[hidden email]> wrote:

>
> Apologies.  This has a bad mistake in it.  Ive deleted it and am sitting on the correct fix for a bit longer, given Chris' recent reminding of the trunk committing rules.
>
> On Tue, Oct 16, 2018 at 4:21 PM <[hidden email]> wrote:
>>
>> Eliot Miranda uploaded a new version of Tools to project The Trunk:
>> http://source.squeak.org/trunk/Tools-eem.832.mcz
>>
>> ==================== Summary ====================
>>
>> Name: Tools-eem.832
>> Author: eem
>> Time: 16 October 2018, 4:20:50.731928 pm
>> UUID: 9aa4b922-fe6a-41cb-8cba-974b14632177
>> Ancestors: Tools-cmm.831
>>
>> Fix a bug with DebuggerMethodMap and full blocks (Sista V1 bytecode set).  DebuggerMethodMap must be careful to use the right kind iof dictionry (Dictionary vs IdentityDictionary) for mapping startKeys to block starts and block starts to temps.  startKeys may be values (startpc with embedded blocks) or objects (initialPC and block itself for full blocks).  And blockExtentsToTempRefs must always be a Dictionary ince block extents are ranges.
>>
>> =============== Diff against Tools-cmm.831 ===============
>>
>> Item was changed:
>>   ----- Method: DebuggerMethodMapForClosureCompiledMethods>>privateTempRefsForContext:startKeysToBlockExtents: (in category 'private') -----
>>   privateTempRefsForContext: aContext startKeysToBlockExtents: theContextsStartKeysToBlockExtents
>>         "Answer the sequence of temps in scope in aContext in the natural order,
>>          outermost arguments and temporaries first, innermost last.  Each temp is
>>          a pair of the temp's name followed by a reference.  The reference can be
>>                 integer - index of temp in aContext
>>                 #( indirectionVectorIndex tempIndex ) - remote temp in indirectionVector at index in aContext
>>                 #( outer. temp reference ) - a temp reference in an outer context."
>>         blockExtentsToTempRefs ifNil:
>>                 [blockExtentsToTempRefs := (aContext method holdsTempNames
>>                                                                                 ifTrue: [aContext method]
>>                                                                                 ifFalse: [methodNode]) blockExtentsToTempsMap.
>> +                blockExtentsToTempRefs
>> +                       ifNil: ["an empty method.  shouldn't be able to step into here but it
>> +                                 can happen in weird circumstances (i.e. with MethodWrapper)."
>> +                               blockExtentsToTempRefs := Dictionary new.
>> +                               blockExtentsToTempRefs
>> +                                       at: (theContextsStartKeysToBlockExtents at: aContext startKey)
>> +                                       put: {}]
>> +                       ifNotNil:
>> +                               [(blockExtentsToTempRefs isKindOf: IdentityDictionary) ifTrue:
>> +                                       [blockExtentsToTempRefs := Dictionary withAll: blockExtentsToTempRefs associations]].
>> +                startKeysToTempRefs := aContext homeMethod newBlockStartMap].
>> -                blockExtentsToTempRefs ifNil:
>> -                       ["an empty method.  shouldn't be able to step into here but it
>> -                         can happen in weird circumstances (i.e. with MethodWrapper)."
>> -                       blockExtentsToTempRefs := Dictionary new.
>> -                       blockExtentsToTempRefs
>> -                               at: (theContextsStartKeysToBlockExtents at: aContext startKey)
>> -                               put: {}].
>> -                startKeysToTempRefs := Dictionary new].
>>         ^startKeysToTempRefs
>>                 at: aContext startKey
>>                 ifAbsentPut:
>>                         [| localRefs |
>>                          localRefs := blockExtentsToTempRefs at: (theContextsStartKeysToBlockExtents at: aContext startKey) ifAbsent: [#()].
>>                          aContext outerContext
>>                                 ifNil: [localRefs]
>>                                 ifNotNil:
>>                                         [:outer| | outerTemps |
>>                                         "Present temps in the order outermost to innermost left-to-right, but replace
>>                                          copied outermost temps with their innermost copies"
>>                                          outerTemps := (self
>>                                                                                 privateTempRefsForContext: outer
>>                                                                                 startKeysToBlockExtents: theContextsStartKeysToBlockExtents) collect:
>>                                                 [:outerPair|
>>                                                 localRefs
>>                                                         detect: [:localPair| outerPair first = localPair first]
>>                                                         ifNone: [{ outerPair first. { #outer. outerPair last } }]].
>>                                         outerTemps,
>>                                          (localRefs reject: [:localPair| outerTemps anySatisfy: [:outerPair| localPair first = outerPair first]])]]!
>>
>>
>
>
> --
> _,,,^..^,,,_
> best, Eliot
>

Reply | Threaded
Open this post in threaded view
|

Re: The Trunk: Tools-eem.832.mcz

Eliot Miranda-2


> On Oct 17, 2018, at 1:07 PM, Chris Muller <[hidden email]> wrote:
>
> Thanks for opting to keep 832 permanently out of the ancestry, instead
> of permanently in.  I truly believe that caring about quality in this
> part of the artifact we make is worth it.

+1

>
> Best Regards,
>  Chris
>> On Tue, Oct 16, 2018 at 8:28 PM Eliot Miranda <[hidden email]> wrote:
>>
>> Apologies.  This has a bad mistake in it.  Ive deleted it and am sitting on the correct fix for a bit longer, given Chris' recent reminding of the trunk committing rules.
>>
>>> On Tue, Oct 16, 2018 at 4:21 PM <[hidden email]> wrote:
>>>
>>> Eliot Miranda uploaded a new version of Tools to project The Trunk:
>>> http://source.squeak.org/trunk/Tools-eem.832.mcz
>>>
>>> ==================== Summary ====================
>>>
>>> Name: Tools-eem.832
>>> Author: eem
>>> Time: 16 October 2018, 4:20:50.731928 pm
>>> UUID: 9aa4b922-fe6a-41cb-8cba-974b14632177
>>> Ancestors: Tools-cmm.831
>>>
>>> Fix a bug with DebuggerMethodMap and full blocks (Sista V1 bytecode set).  DebuggerMethodMap must be careful to use the right kind iof dictionry (Dictionary vs IdentityDictionary) for mapping startKeys to block starts and block starts to temps.  startKeys may be values (startpc with embedded blocks) or objects (initialPC and block itself for full blocks).  And blockExtentsToTempRefs must always be a Dictionary ince block extents are ranges.
>>>
>>> =============== Diff against Tools-cmm.831 ===============
>>>
>>> Item was changed:
>>>  ----- Method: DebuggerMethodMapForClosureCompiledMethods>>privateTempRefsForContext:startKeysToBlockExtents: (in category 'private') -----
>>>  privateTempRefsForContext: aContext startKeysToBlockExtents: theContextsStartKeysToBlockExtents
>>>        "Answer the sequence of temps in scope in aContext in the natural order,
>>>         outermost arguments and temporaries first, innermost last.  Each temp is
>>>         a pair of the temp's name followed by a reference.  The reference can be
>>>                integer - index of temp in aContext
>>>                #( indirectionVectorIndex tempIndex ) - remote temp in indirectionVector at index in aContext
>>>                #( outer. temp reference ) - a temp reference in an outer context."
>>>        blockExtentsToTempRefs ifNil:
>>>                [blockExtentsToTempRefs := (aContext method holdsTempNames
>>>                                                                                ifTrue: [aContext method]
>>>                                                                                ifFalse: [methodNode]) blockExtentsToTempsMap.
>>> +                blockExtentsToTempRefs
>>> +                       ifNil: ["an empty method.  shouldn't be able to step into here but it
>>> +                                 can happen in weird circumstances (i.e. with MethodWrapper)."
>>> +                               blockExtentsToTempRefs := Dictionary new.
>>> +                               blockExtentsToTempRefs
>>> +                                       at: (theContextsStartKeysToBlockExtents at: aContext startKey)
>>> +                                       put: {}]
>>> +                       ifNotNil:
>>> +                               [(blockExtentsToTempRefs isKindOf: IdentityDictionary) ifTrue:
>>> +                                       [blockExtentsToTempRefs := Dictionary withAll: blockExtentsToTempRefs associations]].
>>> +                startKeysToTempRefs := aContext homeMethod newBlockStartMap].
>>> -                blockExtentsToTempRefs ifNil:
>>> -                       ["an empty method.  shouldn't be able to step into here but it
>>> -                         can happen in weird circumstances (i.e. with MethodWrapper)."
>>> -                       blockExtentsToTempRefs := Dictionary new.
>>> -                       blockExtentsToTempRefs
>>> -                               at: (theContextsStartKeysToBlockExtents at: aContext startKey)
>>> -                               put: {}].
>>> -                startKeysToTempRefs := Dictionary new].
>>>        ^startKeysToTempRefs
>>>                at: aContext startKey
>>>                ifAbsentPut:
>>>                        [| localRefs |
>>>                         localRefs := blockExtentsToTempRefs at: (theContextsStartKeysToBlockExtents at: aContext startKey) ifAbsent: [#()].
>>>                         aContext outerContext
>>>                                ifNil: [localRefs]
>>>                                ifNotNil:
>>>                                        [:outer| | outerTemps |
>>>                                        "Present temps in the order outermost to innermost left-to-right, but replace
>>>                                         copied outermost temps with their innermost copies"
>>>                                         outerTemps := (self
>>>                                                                                privateTempRefsForContext: outer
>>>                                                                                startKeysToBlockExtents: theContextsStartKeysToBlockExtents) collect:
>>>                                                [:outerPair|
>>>                                                localRefs
>>>                                                        detect: [:localPair| outerPair first = localPair first]
>>>                                                        ifNone: [{ outerPair first. { #outer. outerPair last } }]].
>>>                                        outerTemps,
>>>                                         (localRefs reject: [:localPair| outerTemps anySatisfy: [:outerPair| localPair first = outerPair first]])]]!
>>>
>>>
>>
>>
>> --
>> _,,,^..^,,,_
>> best, Eliot
>>
>