echo prover input via raw_messages, for improved protocol tracing;
authorwenzelm
Sat, 09 Jul 2011 21:53:27 +0200
changeset 43721 fad8634cee62
parent 43720 8dd722886c76
child 43722 9b5dadb0c28d
echo prover input via raw_messages, for improved protocol tracing;
src/Pure/General/markup.scala
src/Pure/System/isabelle_process.scala
src/Pure/System/session.scala
src/Tools/jEdit/src/protocol_dockable.scala
src/Tools/jEdit/src/raw_output_dockable.scala
src/Tools/jEdit/src/session_dockable.scala
--- a/src/Pure/General/markup.scala	Sat Jul 09 18:54:50 2011 +0200
+++ b/src/Pure/General/markup.scala	Sat Jul 09 21:53:27 2011 +0200
@@ -302,6 +302,12 @@
   val EDIT = "edit"
 
 
+  /* prover process */
+
+  val PROVER_COMMAND = "prover_command"
+  val PROVER_ARG = "prover_arg"
+
+
   /* messages */
 
   val Serial = new Long_Property("serial")
--- a/src/Pure/System/isabelle_process.scala	Sat Jul 09 18:54:50 2011 +0200
+++ b/src/Pure/System/isabelle_process.scala	Sat Jul 09 21:53:27 2011 +0200
@@ -32,7 +32,17 @@
       ('G' : Int) -> Markup.ERROR)
   }
 
-  class Result(val message: XML.Elem)
+  abstract class Message
+
+  class Input(name: String, args: List[String]) extends Message
+  {
+    override def toString: String =
+      XML.Elem(Markup(Markup.PROVER_COMMAND, List((Markup.NAME, name))),
+        args.map(s =>
+          List(XML.Text("\n"), XML.elem(Markup.PROVER_ARG, YXML.parse_body(s)))).flatten).toString
+  }
+
+  class Result(val message: XML.Elem) extends Message
   {
     def kind = message.markup.name
     def properties = message.markup.properties
@@ -377,7 +387,10 @@
     command_input._2 ! Input_Chunks(Standard_System.string_bytes(name) :: args.toList)
 
   def input(name: String, args: String*): Unit =
+  {
+    receiver ! new Input(name, args.toList)
     input_bytes(name, args.map(Standard_System.string_bytes): _*)
+  }
 
   def close(): Unit = { close(command_input); close(standard_input) }
 }
--- a/src/Pure/System/session.scala	Sat Jul 09 18:54:50 2011 +0200
+++ b/src/Pure/System/session.scala	Sat Jul 09 21:53:27 2011 +0200
@@ -58,7 +58,7 @@
   val assignments = new Event_Bus[Session.Assignment.type]
   val commands_changed = new Event_Bus[Session.Commands_Changed]
   val phase_changed = new Event_Bus[Session.Phase]
-  val raw_messages = new Event_Bus[Isabelle_Process.Result]
+  val raw_messages = new Event_Bus[Isabelle_Process.Message]
 
 
 
@@ -276,8 +276,6 @@
           }
           else bad_result(result)
         }
-
-      raw_messages.event(result)
     }
     //}}}
 
@@ -320,8 +318,12 @@
         case Change_Node(name, header, change) if prover.isDefined =>
           handle_change(name, header, change)
 
+        case input: Isabelle_Process.Input =>
+          raw_messages.event(input)
+
         case result: Isabelle_Process.Result =>
           handle_result(result)
+          raw_messages.event(result)
 
         case bad => System.err.println("session_actor: ignoring bad message " + bad)
       }
--- a/src/Tools/jEdit/src/protocol_dockable.scala	Sat Jul 09 18:54:50 2011 +0200
+++ b/src/Tools/jEdit/src/protocol_dockable.scala	Sat Jul 09 21:53:27 2011 +0200
@@ -28,6 +28,9 @@
   private val main_actor = actor {
     loop {
       react {
+        case input: Isabelle_Process.Input =>
+          Swing_Thread.now { text_area.append(input.toString + "\n") }
+
         case result: Isabelle_Process.Result =>
           Swing_Thread.now { text_area.append(result.message.toString + "\n") }
 
--- a/src/Tools/jEdit/src/raw_output_dockable.scala	Sat Jul 09 18:54:50 2011 +0200
+++ b/src/Tools/jEdit/src/raw_output_dockable.scala	Sat Jul 09 21:53:27 2011 +0200
@@ -30,6 +30,8 @@
   private val main_actor = actor {
     loop {
       react {
+        case input: Isabelle_Process.Input =>
+
         case result: Isabelle_Process.Result =>
           if (result.is_stdout)
             Swing_Thread.now { text_area.append(XML.content(result.message).mkString) }
--- a/src/Tools/jEdit/src/session_dockable.scala	Sat Jul 09 18:54:50 2011 +0200
+++ b/src/Tools/jEdit/src/session_dockable.scala	Sat Jul 09 21:53:27 2011 +0200
@@ -76,6 +76,8 @@
   private val main_actor = actor {
     loop {
       react {
+        case input: Isabelle_Process.Input =>
+
         case result: Isabelle_Process.Result =>
           if (result.is_syslog)
             Swing_Thread.now {