--- a/src/Pure/Thy/thy_info.scala Fri Dec 07 13:38:32 2012 +0100
+++ b/src/Pure/Thy/thy_info.scala Fri Dec 07 13:56:01 2012 +0100
@@ -84,16 +84,20 @@
val future_header: JFuture[Exn.Result[Document.Node.Header]] =
if (files) {
val string = thy_load.with_thy_text(name, _.toString)
- default_thread_pool.submit(() =>
- Exn.capture {
- try {
- val syntax0 = syntax.add_keywords(header0.keywords)
- val files = thy_load.theory_body_files(syntax0, string)
- header0.copy(uses = header0.uses ::: files.map((_, false)))
+ val syntax0 = syntax.add_keywords(header0.keywords)
+
+ if (thy_load.body_files_test(syntax0, string)) {
+ default_thread_pool.submit(() =>
+ Exn.capture {
+ try {
+ val files = thy_load.body_files(syntax0, string)
+ header0.copy(uses = header0.uses ::: files.map((_, false)))
+ }
+ catch { case ERROR(msg) => err(msg) }
}
- catch { case ERROR(msg) => err(msg) }
- }
- )
+ )
+ }
+ else Library.future_value(Exn.Res(header0))
}
else Library.future_value(Exn.Res(header0))
--- a/src/Pure/Thy/thy_load.scala Fri Dec 07 13:38:32 2012 +0100
+++ b/src/Pure/Thy/thy_load.scala Fri Dec 07 13:56:01 2012 +0100
@@ -80,27 +80,27 @@
clean_tokens.reverse.find(_.is_name).map(_.content)
}
- def theory_body_files(syntax: Outer_Syntax, text: String): List[String] =
+ def body_files_test(syntax: Outer_Syntax, text: String): Boolean =
+ syntax.thy_load_commands.exists({ case (cmd, _) => text.containsSlice(cmd) })
+
+ def body_files(syntax: Outer_Syntax, text: String): List[String] =
{
val thy_load_commands = syntax.thy_load_commands
- if (thy_load_commands.exists({ case (cmd, _) => text.containsSlice(cmd) })) {
- val spans = Thy_Syntax.parse_spans(syntax.scan(text))
- spans.iterator.map({
- case toks @ (tok :: _) if tok.is_command =>
- thy_load_commands.find({ case (cmd, _) => cmd == tok.content }) match {
- case Some((_, exts)) =>
- find_file(toks) match {
- case Some(file) =>
- if (exts.isEmpty) List(file)
- else exts.map(ext => file + "." + ext)
- case None => Nil
- }
- case None => Nil
- }
- case _ => Nil
- }).flatten.toList
- }
- else Nil
+ val spans = Thy_Syntax.parse_spans(syntax.scan(text))
+ spans.iterator.map({
+ case toks @ (tok :: _) if tok.is_command =>
+ thy_load_commands.find({ case (cmd, _) => cmd == tok.content }) match {
+ case Some((_, exts)) =>
+ find_file(toks) match {
+ case Some(file) =>
+ if (exts.isEmpty) List(file)
+ else exts.map(ext => file + "." + ext)
+ case None => Nil
+ }
+ case None => Nil
+ }
+ case _ => Nil
+ }).flatten.toList
}
def check_thy_text(name: Document.Node.Name, text: CharSequence): Document.Node.Header =