[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