Author: lwall
Date: 2010-07-12 21:52:08 +0200 (Mon, 12 Jul 2010)
New Revision: 31645

Modified:
   docs/Perl6/Spec/S04-control.pod
Log:
[S04] try to nail down CATCH exit semantics a bit more water-tightly


Modified: docs/Perl6/Spec/S04-control.pod
===================================================================
--- docs/Perl6/Spec/S04-control.pod     2010-07-12 17:51:44 UTC (rev 31644)
+++ docs/Perl6/Spec/S04-control.pod     2010-07-12 19:52:08 UTC (rev 31645)
@@ -13,8 +13,8 @@
 
     Created: 19 Aug 2004
 
-    Last Modified: 9 Jul 2010
-    Version: 100
+    Last Modified: 12 Jul 2010
+    Version: 101
 
 This document summarizes Apocalypse 4, which covers the block and
 statement syntax of Perl.
@@ -986,6 +986,25 @@
 it treats code inside a C<default> block differently from code that's after
 all the C<when> blocks but not in a C<default> block.
 
+More specifically, when you write:
+
+    CATCH {
+        when Mumble {...}
+        default {...}
+    }
+
+you're really getting something more like:
+
+    CATCH {
+        when Mumble {...}
+        default {...}
+
+        leave(Failure);
+
+        KEEP (die("Pending exceptions not handled in $!") unless 
all($!.pendingĀ».handled); $!.handled = 1);
+        UNDO die $!;
+    }
+
 A C<CATCH> block sees the lexical scope in which it was defined, but
 its caller is the dynamic location that threw the exception.  That is,
 the stack is not unwound until some exception handler chooses to

Reply via email to