<div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">2014-06-05 23:27 GMT+02:00 Nicolas Cellier <span dir="ltr">&lt;<a href="mailto:nicolas.cellier.aka.nice@gmail.com" target="_blank">nicolas.cellier.aka.nice@gmail.com</a>&gt;</span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>This change resolved the failing test for me, and I did not yet find what else it may break...<br></div>
In this danger zone, more eyes are required, so up to you to refute the method :)<br><div><div><div>
<div class="gmail_extra"><br></div></div></div></div></div></blockquote><div>I think I have a refutation (theoretically): if an outer handler resumes execution in signalContext, then the inner handler context won&#39;t be re-activated and will miss the next exceptions...<br>
<br></div><div>Unfortunately, resuming is the default behavior for any unhandled exception (see UndefinedObject&gt;&gt;#handleSignal:).<br></div><div>So every un-caught exception (even the most harmless Notification) will deactivate all the enclosing handlers!<br>
<br></div><div>Definitely not a good change, I must find another way...<br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div>
<div><div class="gmail_extra"><br><div class="gmail_quote">2014-06-05 23:11 GMT+02:00  <span dir="ltr">&lt;<a href="mailto:commits@source.squeak.org" target="_blank">commits@source.squeak.org</a>&gt;</span>:<div><div class="h5">
<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
A new version of Kernel was added to project The Inbox:<br>
<a href="http://source.squeak.org/inbox/Kernel-nice.856.mcz" target="_blank">http://source.squeak.org/inbox/Kernel-nice.856.mcz</a><br>
<br>
==================== Summary ====================<br>
<br>
Name: Kernel-nice.856<br>
Author: nice<br>
Time: 5 June 2014, 11:11:07.752 pm<br>
UUID: 44668d33-00c2-4e36-b95b-69d83b0d7544<br>
Ancestors: Kernel-cmm.855<br>
<br>
Attempt to fix ExceptionTests&gt;&gt;#testHandlerFromAction.<br>
When the handler does not handle an Exception, simply mark the handler context as inactive (self tempAt: 3 put: false).<br>
<br>
=============== Diff against Kernel-cmm.855 ===============<br>
<br>
Item was changed:<br>
  ----- Method: ContextPart&gt;&gt;handleSignal: (in category &#39;private-exceptions&#39;) -----<br>
  handleSignal: exception<br>
        &quot;Sent to handler (on:do:) contexts only.  If my exception class (first arg) handles exception then execute my handle block (second arg), otherwise forward this message to the next handler context.  If none left, execute exception&#39;s defaultAction (see nil&gt;&gt;handleSignal:).&quot;<br>


<br>
        | val |<br>
+       ((((self tempAt: 1) handles: exception) or: [self tempAt: 3 put: false])<br>
+                and: [self tempAt: 3]) ifFalse: [<br>
-       (((self tempAt: 1) handles: exception) and: [self tempAt: 3]) ifFalse: [<br>
                ^ self nextHandlerContext handleSignal: exception].<br>
<br>
        exception privHandlerContext: self contextTag.<br>
        self tempAt: 3 put: false.  &quot;disable self while executing handle block&quot;<br>
        val := [(self tempAt: 2) cull: exception ]<br>
                ensure: [self tempAt: 3 put: true].<br>
        self return: val.  &quot;return from self if not otherwise directed in handle block&quot;<br>
  !<br>
<br>
<br>
</blockquote></div></div></div><br></div></div></div></div></div>
</blockquote></div><br></div></div>