improved performance of remove, e.g. relevant for Theories_Dockable.purge;
authorwenzelm
Wed, 01 Mar 2017 15:16:06 +0100
changeset 65074 df14a0e872e6
parent 65073 b5bf76cf2b4e
child 65075 03e6aa683c4d
improved performance of remove, e.g. relevant for Theories_Dockable.purge;
src/Pure/Thy/thy_syntax.scala
--- a/src/Pure/Thy/thy_syntax.scala	Wed Mar 01 11:26:19 2017 +0100
+++ b/src/Pure/Thy/thy_syntax.scala	Wed Mar 01 15:16:06 2017 +0100
@@ -120,6 +120,9 @@
   {
     eds match {
       case e :: es =>
+        def insert_text(cmd: Option[Command], text: String): Linear_Set[Command] =
+          if (text == "") commands else commands.insert_after(cmd, Command.unparsed(text))
+
         Document.Node.Commands.starts(commands.iterator).find {
           case (cmd, cmd_start) =>
             e.can_edit(cmd.source, cmd_start) ||
@@ -127,15 +130,15 @@
         } match {
           case Some((cmd, cmd_start)) if e.can_edit(cmd.source, cmd_start) =>
             val (rest, text) = e.edit(cmd.source, cmd_start)
-            val new_commands = commands.insert_after(Some(cmd), Command.unparsed(text)) - cmd
+            val new_commands = insert_text(Some(cmd), text) - cmd
             edit_text(rest.toList ::: es, new_commands)
 
           case Some((cmd, cmd_start)) =>
-            edit_text(es, commands.insert_after(Some(cmd), Command.unparsed(e.text)))
+            edit_text(es, insert_text(Some(cmd), e.text))
 
           case None =>
             require(e.is_insert && e.start == 0)
-            edit_text(es, commands.insert_after(None, Command.unparsed(e.text)))
+            edit_text(es, insert_text(None, e.text))
         }
       case Nil => commands
     }