The Trunk: Kernel-jar.1395.mcz

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

The Trunk: Kernel-jar.1395.mcz

commits-2
Nicolas Cellier uploaded a new version of Kernel to project The Trunk:
http://source.squeak.org/trunk/Kernel-jar.1395.mcz

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

Name: Kernel-jar.1395
Author: jar
Time: 30 April 2021, 12:25:17.561362 am
UUID: 0f589a20-6b8e-a94b-9dbc-9b3f91c84ce8
Ancestors: Kernel-nice.1394

Fix a bug in Exception>>#outer causing a return to an incorrect handler context. Explanation in: http://forum.world.st/A-bug-in-Exception-gt-gt-outer-causing-a-return-to-an-incorrect-handler-context-td5129273.html

=============== Diff against Kernel-nice.1394 ===============

Item was changed:
  ----- Method: Exception>>outer (in category 'handling') -----
  outer
  "Evaluate the enclosing exception action and return to here instead of signal if it resumes (see #resumeUnchecked:)."
 
+ | prevOuterContext currHandlerContext |
- | prevOuterContext |
  self isResumable ifTrue: [
+ currHandlerContext := handlerContext.
  prevOuterContext := outerContext.
  outerContext := thisContext contextTag.
  ].
  self pass.
  !

Item was changed:
  ----- Method: Exception>>resumeUnchecked: (in category 'handling') -----
  resumeUnchecked: resumptionValue
  "Return resumptionValue as the value of #signal, unless this was called after an #outer message, then return resumptionValue as the value of #outer."
 
  | ctxt |
  outerContext ifNil: [
  signalContext return: resumptionValue
  ] ifNotNil: [
  ctxt := outerContext.
  outerContext := ctxt tempAt: 1. "prevOuterContext in #outer"
+ handlerContext := ctxt tempAt: 2. "currHandlerContext in #outer"
  ctxt return: resumptionValue
  ].
  !