clarified treatment of add-on prover_options;
authorwenzelm
Thu, 27 Aug 2020 15:16:56 +0200
changeset 72216 0d7cd97f6c48
parent 72215 8f9cffa78112
child 72217 e35997591c5b
clarified treatment of add-on prover_options;
src/Pure/PIDE/protocol_handlers.scala
src/Pure/PIDE/session.scala
--- a/src/Pure/PIDE/protocol_handlers.scala	Thu Aug 27 13:06:58 2020 +0200
+++ b/src/Pure/PIDE/protocol_handlers.scala	Thu Aug 27 15:16:56 2020 +0200
@@ -74,6 +74,10 @@
 {
   private val state = Synchronized(Protocol_Handlers.State(session))
 
+  def prover_options(options: Options): Options =
+    (options /: state.value.handlers)(
+      { case (opts, (_, handler)) => handler.prover_options(opts) })
+
   def get(name: String): Option[Session.Protocol_Handler] = state.value.get(name)
   def init(handler: Session.Protocol_Handler): Unit = state.change(_.init(handler))
   def init(name: String): Unit = state.change(_.init(name))
--- a/src/Pure/PIDE/session.scala	Thu Aug 27 13:06:58 2020 +0200
+++ b/src/Pure/PIDE/session.scala	Thu Aug 27 15:16:56 2020 +0200
@@ -118,6 +118,7 @@
     def init(session: Session): Unit = {}
     def exit(): Unit = {}
     def functions: List[(String, Protocol_Function)] = Nil
+    def prover_options(options: Options): Options = options
   }
 }
 
@@ -353,14 +354,11 @@
   }
 
 
-  /* file formats */
+  /* file formats and protocol handlers */
 
-  lazy val file_formats: File_Format.Session =
+  private lazy val file_formats: File_Format.Session =
     File_Format.registry.start_session(session)
 
-
-  /* protocol handlers */
-
   private val protocol_handlers = Protocol_Handlers.init(session)
 
   def get_protocol_handler[C <: Session.Protocol_Handler](c: Class[C]): Option[C] =
@@ -372,6 +370,9 @@
   def init_protocol_handler(handler: Session.Protocol_Handler): Unit =
     protocol_handlers.init(handler)
 
+  def prover_options(options: Options): Options =
+    protocol_handlers.prover_options(file_formats.prover_options(options))
+
 
   /* debugger */
 
@@ -543,12 +544,12 @@
               change_command(_.accumulate(state_id, output.message, xml_cache))
 
             case _ if output.is_init =>
-              prover.get.options(file_formats.prover_options(session_options))
-              prover.get.init_session(resources)
-
               Isabelle_System.make_services(classOf[Session.Protocol_Handler])
                 .foreach(init_protocol_handler)
 
+              prover.get.options(prover_options(session_options))
+              prover.get.init_session(resources)
+
               phase = Session.Ready
               debugger.ready()
 
@@ -625,7 +626,7 @@
 
           case Update_Options(options) =>
             if (prover.defined && is_ready) {
-              prover.get.options(file_formats.prover_options(options))
+              prover.get.options(prover_options(options))
               handle_raw_edits()
             }
             global_options.post(Session.Global_Options(options))