proper class IsabelleSystem -- no longer static;
authorwenzelm
Sat, 27 Dec 2008 14:57:30 +0100
changeset 29174d4058295affb
parent 29173 c14c9a41f1ac
child 29176 f1ce1e2229c6
child 29177 0e88d33e8d19
proper class IsabelleSystem -- no longer static;
tuned;
src/Pure/General/symbol.scala
src/Pure/Isar/isar.scala
src/Pure/Tools/isabelle_process.scala
src/Pure/Tools/isabelle_system.scala
     1.1 --- a/src/Pure/General/symbol.scala	Sat Dec 27 11:54:08 2008 +0100
     1.2 +++ b/src/Pure/General/symbol.scala	Sat Dec 27 14:57:30 2008 +0100
     1.3 @@ -78,7 +78,7 @@
     1.4  
     1.5    /** Symbol interpretation **/
     1.6  
     1.7 -  class Interpretation {
     1.8 +  class Interpretation(isabelle_system: IsabelleSystem) {
     1.9  
    1.10      private var symbols = new HashMap[String, HashMap[String, String]]
    1.11      private var decoder: Recoder = null
    1.12 @@ -125,7 +125,7 @@
    1.13      }
    1.14  
    1.15      private def read_symbols(path: String) = {
    1.16 -      val file = new File(IsabelleSystem.platform_path(path))
    1.17 +      val file = new File(isabelle_system.platform_path(path))
    1.18        if (file.canRead) {
    1.19          for (line <- Source.fromFile(file).getLines) read_line(line)
    1.20        }
     2.1 --- a/src/Pure/Isar/isar.scala	Sat Dec 27 11:54:08 2008 +0100
     2.2 +++ b/src/Pure/Isar/isar.scala	Sat Dec 27 14:57:30 2008 +0100
     2.3 @@ -9,7 +9,8 @@
     2.4  import java.util.Properties
     2.5  
     2.6  
     2.7 -class Isar(args: String*) extends IsabelleProcess(args: _*) {
     2.8 +class Isar(isabelle_system: IsabelleSystem, args: String*) extends
     2.9 +    IsabelleProcess(isabelle_system, args: _*) {
    2.10  
    2.11    /* basic editor commands */
    2.12  
     3.1 --- a/src/Pure/Tools/isabelle_process.scala	Sat Dec 27 11:54:08 2008 +0100
     3.2 +++ b/src/Pure/Tools/isabelle_process.scala	Sat Dec 27 14:57:30 2008 +0100
     3.3 @@ -12,8 +12,6 @@
     3.4  import java.io.{BufferedReader, BufferedWriter, InputStreamReader, OutputStreamWriter,
     3.5    InputStream, OutputStream, IOException}
     3.6  
     3.7 -import isabelle.{Symbol, XML}
     3.8 -
     3.9  
    3.10  object IsabelleProcess {
    3.11  
    3.12 @@ -69,7 +67,7 @@
    3.13  
    3.14    class Result(val kind: Kind.Value, val props: Properties, val result: String) {
    3.15      override def toString = {
    3.16 -      val res = XML.content(YXML.parse_failsafe(result)).mkString("")
    3.17 +      val res = XML.content(YXML.parse_failsafe(result)).mkString
    3.18        if (props == null) kind.toString + " [[" + res + "]]"
    3.19        else kind.toString + " " + props.toString + " [[" + res + "]]"
    3.20      }
    3.21 @@ -81,11 +79,16 @@
    3.22  }
    3.23  
    3.24  
    3.25 -class IsabelleProcess(args: String*) {
    3.26 +class IsabelleProcess(isabelle_system: IsabelleSystem, args: String*) {
    3.27  
    3.28    import IsabelleProcess._
    3.29  
    3.30  
    3.31 +  /* alternative constructors */
    3.32 +
    3.33 +  def this(args: String*) = this(new IsabelleSystem, args: _*)
    3.34 +
    3.35 +
    3.36    /* process information */
    3.37  
    3.38    private var proc: Process = null
    3.39 @@ -122,7 +125,7 @@
    3.40      if (pid == null) put_result(Kind.SYSTEM, null, "Cannot interrupt: unknown pid")
    3.41      else {
    3.42        try {
    3.43 -        if (IsabelleSystem.exec("kill", "-INT", pid).waitFor == 0)
    3.44 +        if (isabelle_system.exec("kill", "-INT", pid).waitFor == 0)
    3.45            put_result(Kind.SIGNAL, null, "INT")
    3.46          else
    3.47            put_result(Kind.SYSTEM, null, "Cannot interrupt: kill command failed")
    3.48 @@ -185,7 +188,7 @@
    3.49  
    3.50    private class StdinThread(out_stream: OutputStream) extends Thread("isabelle: stdin") {
    3.51      override def run() = {
    3.52 -      val writer = new BufferedWriter(new OutputStreamWriter(out_stream, IsabelleSystem.charset))
    3.53 +      val writer = new BufferedWriter(new OutputStreamWriter(out_stream, isabelle_system.charset))
    3.54        var finished = false
    3.55        while (!finished) {
    3.56          try {
    3.57 @@ -215,7 +218,7 @@
    3.58  
    3.59    private class StdoutThread(in_stream: InputStream) extends Thread("isabelle: stdout") {
    3.60      override def run() = {
    3.61 -      val reader = new BufferedReader(new InputStreamReader(in_stream, IsabelleSystem.charset))
    3.62 +      val reader = new BufferedReader(new InputStreamReader(in_stream, isabelle_system.charset))
    3.63        var result = new StringBuilder(100)
    3.64  
    3.65        var finished = false
    3.66 @@ -253,7 +256,7 @@
    3.67  
    3.68    private class MessageThread(fifo: String) extends Thread("isabelle: messages") {
    3.69      override def run() = {
    3.70 -      val reader = IsabelleSystem.fifo_reader(fifo)
    3.71 +      val reader = isabelle_system.fifo_reader(fifo)
    3.72        var kind: Kind.Value = null
    3.73        var props: Properties = null
    3.74        var result = new StringBuilder
    3.75 @@ -337,7 +340,7 @@
    3.76      /* isabelle version */
    3.77  
    3.78      {
    3.79 -      val (msg, rc) = IsabelleSystem.isabelle_tool("version")
    3.80 +      val (msg, rc) = isabelle_system.isabelle_tool("version")
    3.81        if (rc != 0) error("Version check failed -- bad Isabelle installation:\n" + msg)
    3.82        put_result(Kind.SYSTEM, null, msg)
    3.83      }
    3.84 @@ -345,8 +348,8 @@
    3.85  
    3.86      /* message fifo */
    3.87  
    3.88 -    val message_fifo = IsabelleSystem.mk_fifo()
    3.89 -    def rm_fifo() = IsabelleSystem.rm_fifo(message_fifo)
    3.90 +    val message_fifo = isabelle_system.mk_fifo()
    3.91 +    def rm_fifo() = isabelle_system.rm_fifo(message_fifo)
    3.92  
    3.93      val message_thread = new MessageThread(message_fifo)
    3.94      message_thread.start
    3.95 @@ -356,8 +359,8 @@
    3.96  
    3.97      try {
    3.98        val cmdline =
    3.99 -        List(IsabelleSystem.getenv_strict("ISABELLE_PROCESS"), "-W", message_fifo) ++ args
   3.100 -      proc = IsabelleSystem.exec2(cmdline: _*)
   3.101 +        List(isabelle_system.getenv_strict("ISABELLE_PROCESS"), "-W", message_fifo) ++ args
   3.102 +      proc = isabelle_system.exec2(cmdline: _*)
   3.103      }
   3.104      catch {
   3.105        case e: IOException =>
     4.1 --- a/src/Pure/Tools/isabelle_system.scala	Sat Dec 27 11:54:08 2008 +0100
     4.2 +++ b/src/Pure/Tools/isabelle_system.scala	Sat Dec 27 14:57:30 2008 +0100
     4.3 @@ -12,7 +12,7 @@
     4.4  import scala.io.Source
     4.5  
     4.6  
     4.7 -object IsabelleSystem {
     4.8 +class IsabelleSystem {
     4.9  
    4.10    val charset = "UTF-8"
    4.11  
    4.12 @@ -98,7 +98,7 @@
    4.13        try { exec2((List(getenv_strict("ISABELLE_TOOL")) ++ args): _*) }
    4.14        catch { case e: IOException => error(e.getMessage) }
    4.15      proc.getOutputStream.close
    4.16 -    val output = Source.fromInputStream(proc.getInputStream, charset).mkString("")
    4.17 +    val output = Source.fromInputStream(proc.getInputStream, charset).mkString
    4.18      val rc = proc.waitFor
    4.19      (output, rc)
    4.20    }