src/Pure/System/isabelle_process.scala
author wenzelm
Tue, 12 Aug 2014 18:36:43 +0200
changeset 57916 2c2c24dbf0a4
parent 57915 448325de6e4f
child 57917 8ce97e5d545f
permissions -rw-r--r--
generic process wrapping in Prover; clarified module arrangement;

/*  Title:      Pure/System/isabelle_process.scala
    Author:     Makarius

Isabelle process wrapper.
*/

package isabelle


class Isabelle_Process(
  receiver: Prover.Message => Unit = Console.println(_),
  prover_args: List[String] = Nil) extends Prover(receiver,
    {
      val system_channel = System_Channel()
      try {
        val cmdline =
          Isabelle_System.getenv_strict("ISABELLE_PROCESS") ::
            (system_channel.prover_args ::: prover_args)
        val process =
          new Isabelle_System.Managed_Process(null, null, false, cmdline: _*) with
            Prover.System_Process { def channel = system_channel }
        process.stdin.close
        process
      }
      catch { case exn @ ERROR(_) => system_channel.accepted(); throw(exn) }
    })
{
  def encode(s: String): String = Symbol.encode(s)
  def decode(s: String): String = Symbol.decode(s)
}