equal
deleted
inserted
replaced
1027 } |
1027 } |
1028 |
1028 |
1029 |
1029 |
1030 /* PIDE protocol */ |
1030 /* PIDE protocol */ |
1031 |
1031 |
1032 val handler_name = "isabelle.Build$Handler" |
|
1033 |
|
1034 def build_theories( |
1032 def build_theories( |
1035 session: Session, master_dir: Path, theories: List[(Options, List[Path])]): Promise[Boolean] = |
1033 session: Session, master_dir: Path, theories: List[(Options, List[Path])]): Promise[Boolean] = |
1036 session.get_protocol_handler(handler_name) match { |
1034 session.get_protocol_handler(classOf[Handler].getName) match { |
1037 case Some(handler: Handler) => handler.build_theories(session, master_dir, theories) |
1035 case Some(handler: Handler) => handler.build_theories(session, master_dir, theories) |
1038 case _ => error("Cannot invoke build_theories: bad protocol handler") |
1036 case _ => error("Cannot invoke build_theories: bad protocol handler") |
1039 } |
1037 } |
1040 |
1038 |
1041 class Handler extends Session.Protocol_Handler |
1039 class Handler(progress: Progress, session_name: String) extends Session.Protocol_Handler |
1042 { |
1040 { |
1043 private val pending = Synchronized(Map.empty[String, Promise[Boolean]]) |
1041 private val pending = Synchronized(Map.empty[String, Promise[Boolean]]) |
1044 |
1042 |
1045 def build_theories( |
1043 def build_theories( |
1046 session: Session, master_dir: Path, theories: List[(Options, List[Path])]): Promise[Boolean] = |
1044 session: Session, master_dir: Path, theories: List[(Options, List[Path])]): Promise[Boolean] = |
1049 val id = Document_ID.make().toString |
1047 val id = Document_ID.make().toString |
1050 pending.change(promises => promises + (id -> promise)) |
1048 pending.change(promises => promises + (id -> promise)) |
1051 session.build_theories(id, master_dir, theories) |
1049 session.build_theories(id, master_dir, theories) |
1052 promise |
1050 promise |
1053 } |
1051 } |
|
1052 |
|
1053 private def loading_theory(prover: Prover, msg: Prover.Protocol_Output): Boolean = |
|
1054 msg.properties match { |
|
1055 case Markup.Loading_Theory(name) => progress.theory(session_name, name); true |
|
1056 case _ => false |
|
1057 } |
1054 |
1058 |
1055 private def build_theories_result(prover: Prover, msg: Prover.Protocol_Output): Boolean = |
1059 private def build_theories_result(prover: Prover, msg: Prover.Protocol_Output): Boolean = |
1056 msg.properties match { |
1060 msg.properties match { |
1057 case Markup.Build_Theories_Result(id, ok) => |
1061 case Markup.Build_Theories_Result(id, ok) => |
1058 pending.change_result(promises => |
1062 pending.change_result(promises => |
1064 } |
1068 } |
1065 |
1069 |
1066 override def stop(prover: Prover): Unit = |
1070 override def stop(prover: Prover): Unit = |
1067 pending.change(promises => { for ((_, promise) <- promises) promise.cancel; Map.empty }) |
1071 pending.change(promises => { for ((_, promise) <- promises) promise.cancel; Map.empty }) |
1068 |
1072 |
1069 val functions = Map(Markup.BUILD_THEORIES_RESULT -> build_theories_result _) |
1073 val functions = |
|
1074 Map( |
|
1075 Markup.BUILD_THEORIES_RESULT -> build_theories_result _, |
|
1076 Markup.LOADING_THEORY -> loading_theory _) |
1070 } |
1077 } |
1071 } |
1078 } |
1072 |
1079 |