src/Pure/Tools/debugger.scala
author wenzelm
Wed, 29 Jul 2015 13:34:04 +0200
changeset 60830 f56e189350b2
parent 60829 4b16b778ce0d
child 60834 781f1168d31e
permissions -rw-r--r--
separate channel for debugger output; clarified thread name;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
60749
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/Tools/debugger.scala
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
     3
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
     4
Interactive debugger for Isabelle/ML.
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
     5
*/
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
     6
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
     7
package isabelle
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
     8
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
     9
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    10
object Debugger
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    11
{
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    12
  /* GUI interaction */
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    13
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    14
  case object Event
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    15
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    16
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    17
  /* manager thread */
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    18
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    19
  private lazy val manager: Consumer_Thread[Any] =
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    20
    Consumer_Thread.fork[Any]("Debugger.manager", daemon = true)(
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    21
      consume = (arg: Any) =>
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    22
      {
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    23
        // FIXME
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    24
        true
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    25
      },
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    26
      finish = () =>
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    27
      {
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    28
        // FIXME
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    29
      }
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    30
    )
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    31
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    32
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    33
  /* protocol handler */
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    34
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    35
  class Handler extends Session.Protocol_Handler
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    36
  {
60830
f56e189350b2 separate channel for debugger output;
wenzelm
parents: 60829
diff changeset
    37
    private def debugger_output(prover: Prover, msg: Prover.Protocol_Output): Boolean =
f56e189350b2 separate channel for debugger output;
wenzelm
parents: 60829
diff changeset
    38
    {
f56e189350b2 separate channel for debugger output;
wenzelm
parents: 60829
diff changeset
    39
      msg.properties match {
f56e189350b2 separate channel for debugger output;
wenzelm
parents: 60829
diff changeset
    40
        case Markup.Debugger_Output(name, serial) =>
f56e189350b2 separate channel for debugger output;
wenzelm
parents: 60829
diff changeset
    41
          // FIXME
f56e189350b2 separate channel for debugger output;
wenzelm
parents: 60829
diff changeset
    42
          Output.writeln("debugger_output " + name + " " + serial + "\n" + msg.text)
f56e189350b2 separate channel for debugger output;
wenzelm
parents: 60829
diff changeset
    43
          true
f56e189350b2 separate channel for debugger output;
wenzelm
parents: 60829
diff changeset
    44
        case _ => false
f56e189350b2 separate channel for debugger output;
wenzelm
parents: 60829
diff changeset
    45
      }
f56e189350b2 separate channel for debugger output;
wenzelm
parents: 60829
diff changeset
    46
    }
f56e189350b2 separate channel for debugger output;
wenzelm
parents: 60829
diff changeset
    47
60749
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    48
    override def stop(prover: Prover)
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    49
    {
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    50
      manager.shutdown()
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    51
    }
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    52
60830
f56e189350b2 separate channel for debugger output;
wenzelm
parents: 60829
diff changeset
    53
    val functions =
f56e189350b2 separate channel for debugger output;
wenzelm
parents: 60829
diff changeset
    54
      Map(Markup.DEBUGGER_OUTPUT -> debugger_output _)
60749
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    55
  }
60765
e43e71a75838 support for ML debugger;
wenzelm
parents: 60749
diff changeset
    56
e43e71a75838 support for ML debugger;
wenzelm
parents: 60749
diff changeset
    57
e43e71a75838 support for ML debugger;
wenzelm
parents: 60749
diff changeset
    58
  /* protocol commands */
e43e71a75838 support for ML debugger;
wenzelm
parents: 60749
diff changeset
    59
e43e71a75838 support for ML debugger;
wenzelm
parents: 60749
diff changeset
    60
  def init(session: Session): Unit =
e43e71a75838 support for ML debugger;
wenzelm
parents: 60749
diff changeset
    61
    session.protocol_command("Debugger.init")
e43e71a75838 support for ML debugger;
wenzelm
parents: 60749
diff changeset
    62
60829
4b16b778ce0d clarified thread name;
wenzelm
parents: 60765
diff changeset
    63
  def cancel(session: Session, name: String): Unit =
4b16b778ce0d clarified thread name;
wenzelm
parents: 60765
diff changeset
    64
    session.protocol_command("Debugger.cancel", name)
60765
e43e71a75838 support for ML debugger;
wenzelm
parents: 60749
diff changeset
    65
60829
4b16b778ce0d clarified thread name;
wenzelm
parents: 60765
diff changeset
    66
  def input(session: Session, name: String, msg: String*): Unit =
4b16b778ce0d clarified thread name;
wenzelm
parents: 60765
diff changeset
    67
    session.protocol_command("Debugger.input", (name :: msg.toList):_*)
60749
f727b99faaf7 skeleton for interactive debugger;
wenzelm
parents:
diff changeset
    68
}