# HG changeset patch # User wenzelm # Date 1283166092 -7200 # Node ID 26c505765024099a7be1188e634f593e07d752ce # Parent 28496da3bec24b9208e51e198b3dbeefb1c0e0b3 Command.results: ordered by serial number; diff -r 28496da3bec2 -r 26c505765024 src/Pure/General/markup.scala --- a/src/Pure/General/markup.scala Mon Aug 30 11:35:17 2010 +0200 +++ b/src/Pure/General/markup.scala Mon Aug 30 13:01:32 2010 +0200 @@ -226,7 +226,7 @@ /* messages */ val PID = "pid" - val SERIAL = "serial" + val Serial = new Long_Property("serial") val MESSAGE = "message" val CLASS = "class" diff -r 28496da3bec2 -r 26c505765024 src/Pure/General/position.scala --- a/src/Pure/General/position.scala Mon Aug 30 11:35:17 2010 +0200 +++ b/src/Pure/General/position.scala Mon Aug 30 13:01:32 2010 +0200 @@ -28,4 +28,6 @@ case _ => None } } + + def purge(props: T): T = props.filterNot(p => Markup.POSITION_PROPERTIES(p._1)) } diff -r 28496da3bec2 -r 26c505765024 src/Pure/PIDE/command.scala --- a/src/Pure/PIDE/command.scala Mon Aug 30 11:35:17 2010 +0200 +++ b/src/Pure/PIDE/command.scala Mon Aug 30 13:01:32 2010 +0200 @@ -8,23 +8,25 @@ package isabelle +import scala.collection.immutable.SortedMap + + object Command { /** accumulated results from prover **/ case class State( val command: Command, - val status: List[Markup], - val reverse_results: List[XML.Tree], - val markup: Markup_Tree) + val status: List[Markup] = Nil, + val results: SortedMap[Long, XML.Tree] = SortedMap.empty, + val markup: Markup_Tree = Markup_Tree.empty) { /* content */ - lazy val results = reverse_results.reverse - def add_status(st: Markup): State = copy(status = st :: status) def add_markup(info: Text.Info[Any]): State = copy(markup = markup + info) - def add_result(result: XML.Tree): State = copy(reverse_results = result :: reverse_results) + def add_result(serial: Long, result: XML.Tree): State = + copy(results = results + (serial -> result)) def root_info: Text.Info[Any] = new Text.Info(command.range, @@ -34,7 +36,7 @@ /* message dispatch */ - def accumulate(message: XML.Tree): Command.State = + def accumulate(message: XML.Elem): Command.State = message match { case XML.Elem(Markup(Markup.STATUS, _), msgs) => (this /: msgs)((state, msg) => @@ -48,13 +50,18 @@ msg match { case XML.Elem(Markup(name, atts @ Position.Range(range)), args) if Position.Id.unapply(atts) == Some(command.id) => - val props = atts.filterNot(p => Markup.POSITION_PROPERTIES(p._1)) + val props = Position.purge(atts) val info = Text.Info[Any](command.decode(range), XML.Elem(Markup(name, props), args)) state.add_markup(info) case _ => System.err.println("Ignored report message: " + msg); state }) - case _ => add_result(message) + case XML.Elem(Markup(name, atts), body) => + atts match { + case Markup.Serial(i) => + add_result(i, XML.Elem(Markup(name, Position.purge(atts)), body)) + case _ => System.err.println("Ignored message without serial number: " + message); this + } } } @@ -98,5 +105,5 @@ /* accumulated results */ - val empty_state: Command.State = Command.State(this, Nil, Nil, Markup_Tree.empty) + val empty_state: Command.State = Command.State(this) } diff -r 28496da3bec2 -r 26c505765024 src/Pure/PIDE/document.scala --- a/src/Pure/PIDE/document.scala Mon Aug 30 11:35:17 2010 +0200 +++ b/src/Pure/PIDE/document.scala Mon Aug 30 13:01:32 2010 +0200 @@ -204,7 +204,7 @@ def the_exec_state(id: Exec_ID): Command.State = execs.getOrElse(id, fail)._1 def the_assignment(version: Version): State.Assignment = assignments.getOrElse(version, fail) - def accumulate(id: ID, message: XML.Tree): (Command.State, State) = + def accumulate(id: ID, message: XML.Elem): (Command.State, State) = execs.get(id) match { case Some((st, occs)) => val new_st = st.accumulate(message) diff -r 28496da3bec2 -r 26c505765024 src/Tools/jEdit/src/jedit/output_dockable.scala --- a/src/Tools/jEdit/src/jedit/output_dockable.scala Mon Aug 30 11:35:17 2010 +0200 +++ b/src/Tools/jEdit/src/jedit/output_dockable.scala Mon Aug 30 13:01:32 2010 +0200 @@ -67,12 +67,12 @@ case Some(cmd) if !restriction.isDefined || restriction.get.contains(cmd) => val snapshot = doc_view.model.snapshot() val filtered_results = - snapshot.state(cmd).results filter { + snapshot.state(cmd).results.iterator.map(_._2) filter { case XML.Elem(Markup(Markup.TRACING, _), _) => show_tracing case XML.Elem(Markup(Markup.DEBUG, _), _) => show_debug case _ => true } - html_panel.render(filtered_results) + html_panel.render(filtered_results.toList) case _ => } case None =>