12 import scala.collection.mutable |
12 import scala.collection.mutable |
13 |
13 |
14 |
14 |
15 object Command |
15 object Command |
16 { |
16 { |
17 object Status extends Enumeration |
|
18 { |
|
19 val UNPROCESSED = Value("UNPROCESSED") |
|
20 val FINISHED = Value("FINISHED") |
|
21 val FAILED = Value("FAILED") |
|
22 val UNDEFINED = Value("UNDEFINED") |
|
23 } |
|
24 |
|
25 case class HighlightInfo(kind: String, sub_kind: Option[String]) { |
17 case class HighlightInfo(kind: String, sub_kind: Option[String]) { |
26 override def toString = kind |
18 override def toString = kind |
27 } |
19 } |
28 case class TypeInfo(ty: String) |
20 case class TypeInfo(ty: String) |
29 case class RefInfo(file: Option[String], line: Option[Int], |
21 case class RefInfo(file: Option[String], line: Option[Int], |
33 |
25 |
34 /** accumulated results from prover **/ |
26 /** accumulated results from prover **/ |
35 |
27 |
36 case class State( |
28 case class State( |
37 val command: Command, |
29 val command: Command, |
38 val status: Command.Status.Value, |
30 val status: List[Markup], |
39 val forks: Int, |
|
40 val reverse_results: List[XML.Tree], |
31 val reverse_results: List[XML.Tree], |
41 val markup: Markup_Text) |
32 val markup: Markup_Text) |
42 { |
33 { |
43 /* content */ |
34 /* content */ |
44 |
35 |
88 /* message dispatch */ |
79 /* message dispatch */ |
89 |
80 |
90 def accumulate(message: XML.Tree): Command.State = |
81 def accumulate(message: XML.Tree): Command.State = |
91 message match { |
82 message match { |
92 case XML.Elem(Markup(Markup.STATUS, _), elems) => |
83 case XML.Elem(Markup(Markup.STATUS, _), elems) => |
93 (this /: elems)((state, elem) => |
84 copy(status = (for (XML.Elem(markup, _) <- elems) yield markup) ::: status) |
94 elem match { |
|
95 case XML.Elem(Markup(Markup.UNPROCESSED, _), _) => state.copy(status = Command.Status.UNPROCESSED) |
|
96 case XML.Elem(Markup(Markup.FINISHED, _), _) => state.copy(status = Command.Status.FINISHED) |
|
97 case XML.Elem(Markup(Markup.FAILED, _), _) => state.copy(status = Command.Status.FAILED) |
|
98 case XML.Elem(Markup(Markup.FORKED, _), _) => state.copy(forks = state.forks + 1) |
|
99 case XML.Elem(Markup(Markup.JOINED, _), _) => state.copy(forks = state.forks - 1) |
|
100 case _ => System.err.println("Ignored status message: " + elem); state |
|
101 }) |
|
102 |
85 |
103 case XML.Elem(Markup(Markup.REPORT, _), elems) => |
86 case XML.Elem(Markup(Markup.REPORT, _), elems) => |
104 (this /: elems)((state, elem) => |
87 (this /: elems)((state, elem) => |
105 elem match { |
88 elem match { |
106 case XML.Elem(Markup(kind, atts), body) if Position.get_id(atts) == Some(command.id) => |
89 case XML.Elem(Markup(kind, atts), body) if Position.get_id(atts) == Some(command.id) => |