[squeak-dev] The Trunk: Tools-eem.379.mcz
commits at source.squeak.org
commits at source.squeak.org
Wed Sep 14 21:53:37 UTC 2011
Eliot Miranda uploaded a new version of Tools to project The Trunk:
http://source.squeak.org/trunk/Tools-eem.379.mcz
==================== Summary ====================
Name: Tools-eem.379
Author: eem
Time: 14 September 2011, 2:53:06.71 pm
UUID: 13020e7c-f278-4065-84ed-82fc1dc6b5ab
Ancestors: Tools-fbs.378
DebuggerMerhodMap rebustness in the face of apparently
empty methods. When a MethodWrapper is being debugged
the source doesn't match the underlying wrapper method.
The DebuggerMerhodMap logic must cope as gracefully as
it can.
=============== Diff against Tools-fbs.378 ===============
Item was changed:
----- Method: DebuggerMethodMapForClosureCompiledMethods>>privateTempRefsForContext:startpcsToBlockExtents: (in category 'private') -----
privateTempRefsForContext: aContext startpcsToBlockExtents: theContextsStartpcsToBlockExtents
"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: (theContextsStartpcsToBlockExtents at: aContext startpc)
+ put: {}].
startpcsToTempRefs := Dictionary new].
^startpcsToTempRefs
at: aContext startpc
ifAbsentPut:
[| localRefs |
localRefs := blockExtentsToTempRefs at: (theContextsStartpcsToBlockExtents at: aContext startpc).
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
startpcsToBlockExtents: theContextsStartpcsToBlockExtents) 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]])]]!
More information about the Squeak-dev
mailing list
|