src/Pure/System/scala.ML
changeset 72332 319dd5c618a5
parent 72156 065dcd80293e
child 72756 72ac27ea12b2
--- a/src/Pure/System/scala.ML	Tue Sep 29 12:12:34 2020 +0200
+++ b/src/Pure/System/scala.ML	Tue Sep 29 13:19:34 2020 +0200
@@ -8,6 +8,7 @@
 sig
   exception Null
   val function: string -> string -> string
+  val function_thread: string -> string -> string
   val functions: unit -> string list
   val check_function: Proof.context -> string * Position.T -> string
 end;
@@ -40,15 +41,13 @@
           | _ => raise Fail ("Bad tag: " ^ tag));
       in Synchronized.change results (Symtab.map_entry id (K result)) end);
 
-in
-
-fun function name arg =
+fun gen_function thread name arg =
   Thread_Attributes.uninterruptible (fn restore_attributes => fn () =>
     let
       val id = new_id ();
       fun invoke () =
        (Synchronized.change results (Symtab.update (id, Exn.Exn Match));
-        Output.protocol_message (Markup.invoke_scala name id) [XML.Text arg]);
+        Output.protocol_message (Markup.invoke_scala name id thread) [XML.Text arg]);
       fun cancel () =
        (Synchronized.change results (Symtab.delete_safe id);
         Output.protocol_message (Markup.cancel_scala id) []);
@@ -65,6 +64,11 @@
       Exn.release (restore_attributes await_result ())
     end) ();
 
+in
+
+val function = gen_function false;
+val function_thread = gen_function true;
+
 end;
 
 
@@ -84,6 +88,10 @@
   ML_Antiquotation.value_embedded \<^binding>\<open>scala\<close>
     (Args.context -- Scan.lift Args.embedded_position >> (fn (ctxt, arg) =>
       let val name = check_function ctxt arg
-      in ML_Syntax.atomic ("Scala.function " ^ ML_Syntax.print_string name) end)));
+      in ML_Syntax.atomic ("Scala.function " ^ ML_Syntax.print_string name) end)) #>
+  ML_Antiquotation.value_embedded \<^binding>\<open>scala_thread\<close>
+    (Args.context -- Scan.lift Args.embedded_position >> (fn (ctxt, arg) =>
+      let val name = check_function ctxt arg
+      in ML_Syntax.atomic ("Scala.function_thread " ^ ML_Syntax.print_string name) end)));
 
 end;