reraise interrupts outside command regular transactions -- relevant for memo_stable;
authorwenzelm
Fri, 12 Jul 2013 15:37:48 +0200
changeset 52619 70d5f2f7d27f
parent 52618 2077168aa8f7
child 52620 0b30bde83185
reraise interrupts outside command regular transactions -- relevant for memo_stable;
src/Pure/PIDE/command.ML
--- a/src/Pure/PIDE/command.ML	Fri Jul 12 14:54:17 2013 +0200
+++ b/src/Pure/PIDE/command.ML	Fri Jul 12 15:37:48 2013 +0200
@@ -135,7 +135,9 @@
     (fn () =>
       Outer_Syntax.side_comments span |> maps (fn cmt =>
         (Thy_Output.check_text (Token.source_position_of cmt) st'; [])
-          handle exn => ML_Compiler.exn_messages_ids exn)) ();
+          handle exn =>
+            if Exn.is_interrupt exn then reraise exn
+            else ML_Compiler.exn_messages_ids exn)) ();
 
 fun proof_status tr st =
   (case try Toplevel.proof_of st of
@@ -201,8 +203,10 @@
 val print_functions = Synchronized.var "Command.print_functions" ([]: print_function list);
 
 fun print_error tr e =
-  (Toplevel.setmp_thread_position tr o Runtime.controlled_execution) e () handle exn =>
-    List.app (Future.error_msg (Toplevel.pos_of tr)) (ML_Compiler.exn_messages_ids exn);
+  (Toplevel.setmp_thread_position tr o Runtime.controlled_execution) e ()
+    handle exn =>
+      if Exn.is_interrupt exn then reraise exn
+      else List.app (Future.error_msg (Toplevel.pos_of tr)) (ML_Compiler.exn_messages_ids exn);
 
 fun print_eq (Print {exec_id, ...}, Print {exec_id = exec_id', ...}) = exec_id = exec_id';