avoid extra wrapping for interrupts;
authorwenzelm
Fri, 10 Sep 2010 23:11:58 +0200
changeset 39285 85728a4b5620
parent 39284 3aefd3342978
child 39286 1f8131a7bcb9
avoid extra wrapping for interrupts;
src/Pure/Isar/runtime.ML
src/Pure/Isar/toplevel.ML
--- a/src/Pure/Isar/runtime.ML	Thu Sep 09 21:44:52 2010 +0200
+++ b/src/Pure/Isar/runtime.ML	Fri Sep 10 23:11:58 2010 +0200
@@ -34,7 +34,7 @@
 exception CONTEXT of Proof.context * exn;
 
 fun exn_context NONE exn = exn
-  | exn_context (SOME ctxt) exn = CONTEXT (ctxt, exn);
+  | exn_context (SOME ctxt) exn = if Exn.is_interrupt exn then exn else CONTEXT (ctxt, exn);
 
 
 (* exn_message *)
--- a/src/Pure/Isar/toplevel.ML	Thu Sep 09 21:44:52 2010 +0200
+++ b/src/Pure/Isar/toplevel.ML	Fri Sep 10 23:11:58 2010 +0200
@@ -619,7 +619,8 @@
 fun command tr st =
   (case transition (! interact) tr st of
     SOME (st', NONE) => st'
-  | SOME (_, SOME exn_info) => raise Runtime.EXCURSION_FAIL exn_info
+  | SOME (_, SOME (exn, info)) =>
+      if Exn.is_interrupt exn then reraise exn else raise Runtime.EXCURSION_FAIL (exn, info)
   | NONE => raise Runtime.EXCURSION_FAIL (Runtime.TERMINATE, at_command tr));
 
 fun command_result tr st =