Quantcast

The Trunk: Tools-eem.757.mcz

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

The Trunk: Tools-eem.757.mcz

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

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

Name: Tools-eem.757
Author: eem
Time: 13 April 2017, 2:02:11.819767 pm
UUID: 16ab4ff6-7a4c-49b7-aa90-025eb0164a8f
Ancestors: Tools-eem.756

Have the debugger look for both the old and the soon-to-appear new quickStep: methods when trying to inform an exsting debugger of an error.

=============== Diff against Tools-eem.756 ===============

Item was changed:
  ----- Method: Debugger class>>informExistingDebugger:label: (in category 'instance creation') -----
  informExistingDebugger: aContext label: aString
  "Walking the context chain, we try to find out if we're in a debugger stepping situation.
  If we find the relevant contexts, we must rearrange them so they look just like they would
  if the methods were executed outside of the debugger.
  hmm 8/3/2001 13:05"
  | ctx quickStepMethod oldSender baseContext |
  ctx := thisContext.
+ quickStepMethod := Context
+ compiledMethodAt: #quickSend:to:with:lookupIn:
+ ifAbsent: [Context compiledMethodAt: #quickSend:to:with:super:].
+ [ctx sender == nil or: [ctx sender method == quickStepMethod]] whileFalse:
+ [ctx := ctx sender].
- quickStepMethod := Context compiledMethodAt: #quickSend:to:with:super:.
- [ctx sender == nil or: [ctx sender method == quickStepMethod]] whileFalse: [ctx := ctx sender].
  ctx sender ifNil: [^self].
  baseContext := ctx.
  "baseContext is now the context created by the #quickSend... method."
  oldSender := ctx := ctx sender home sender.
  "oldSender is the context which originally sent the #quickSend... method"
+ [ctx == nil or: [(ctx objectClass: ctx receiver) includesBehavior: self]] whileFalse:
+ [ctx := ctx sender].
- [ctx == nil or: [(ctx objectClass: ctx receiver) includesBehavior: self]] whileFalse: [ctx := ctx sender].
  ctx ifNil: [^self].
  "ctx is the context of the Debugger method #doStep"
  ctx receiver
  labelString: aString;
  externalInterrupt: false;
  proceedValue: aContext receiver.
  baseContext swapSender: baseContext sender sender sender. "remove intervening contexts"
  thisContext swapSender: oldSender. "make myself return to debugger"
  ErrorRecursion := false.
  ^aContext!


Loading...