src/Pure/PIDE/resources.scala
changeset 70638 f164cec7ac22
parent 70634 0f8742b5a9e8
child 70645 fc27cecb66d8
equal deleted inserted replaced
70637:4c98d37e1448 70638:f164cec7ac22
   179     if (node_name.is_theory && reader.source.length > 0) {
   179     if (node_name.is_theory && reader.source.length > 0) {
   180       try {
   180       try {
   181         val header = Thy_Header.read(reader, start, strict)
   181         val header = Thy_Header.read(reader, start, strict)
   182 
   182 
   183         val base_name = node_name.theory_base_name
   183         val base_name = node_name.theory_base_name
   184         val (name, pos) = header.name
   184         if (base_name != header.name)
   185         if (base_name != name)
   185           error("Bad theory name " + quote(header.name) +
   186           error("Bad theory name " + quote(name) +
   186             " for file " + thy_path(Path.basic(base_name)) + Position.here(header.pos) +
   187             " for file " + thy_path(Path.basic(base_name)) + Position.here(pos) +
   187             Completion.report_theories(header.pos, List(base_name)))
   188             Completion.report_theories(pos, List(base_name)))
   188 
   189 
   189         val imports_pos =
   190         val imports =
   190           header.imports_pos.map({ case (s, pos) =>
   191           header.imports.map({ case (s, pos) =>
       
   192             val name = import_name(node_name, s)
   191             val name = import_name(node_name, s)
   193             if (Sessions.exclude_theory(name.theory_base_name))
   192             if (Sessions.exclude_theory(name.theory_base_name))
   194               error("Bad theory name " + quote(name.theory_base_name) + Position.here(pos))
   193               error("Bad theory name " + quote(name.theory_base_name) + Position.here(pos))
   195             (name, pos)
   194             (name, pos)
   196           })
   195           })
   197         Document.Node.Header(imports, header.keywords, header.abbrevs)
   196         Document.Node.Header(imports_pos, header.keywords, header.abbrevs)
   198       }
   197       }
   199       catch { case exn: Throwable => Document.Node.bad_header(Exn.message(exn)) }
   198       catch { case exn: Throwable => Document.Node.bad_header(Exn.message(exn)) }
   200     }
   199     }
   201     else Document.Node.no_header
   200     else Document.Node.no_header
   202   }
   201   }
   307             progress.expose_interrupt()
   306             progress.expose_interrupt()
   308             val header =
   307             val header =
   309               try { check_thy(name, Token.Pos.file(name.node)).cat_errors(message) }
   308               try { check_thy(name, Token.Pos.file(name.node)).cat_errors(message) }
   310               catch { case ERROR(msg) => cat_error(msg, message) }
   309               catch { case ERROR(msg) => cat_error(msg, message) }
   311             val entry = Document.Node.Entry(name, header)
   310             val entry = Document.Node.Entry(name, header)
   312             dependencies1.require_thys(adjunct, header.imports,
   311             dependencies1.require_thys(adjunct, header.imports_pos,
   313               initiators = name :: initiators, progress = progress).cons(entry)
   312               initiators = name :: initiators, progress = progress).cons(entry)
   314           }
   313           }
   315           catch {
   314           catch {
   316             case e: Throwable =>
   315             case e: Throwable =>
   317               dependencies1.cons(Document.Node.Entry(name, Document.Node.bad_header(Exn.message(e))))
   316               dependencies1.cons(Document.Node.Entry(name, Document.Node.bad_header(Exn.message(e))))
   340       }
   339       }
   341 
   340 
   342     lazy val loaded_theories: Graph[String, Outer_Syntax] =
   341     lazy val loaded_theories: Graph[String, Outer_Syntax] =
   343       (session_base.loaded_theories /: entries)({ case (graph, entry) =>
   342       (session_base.loaded_theories /: entries)({ case (graph, entry) =>
   344         val name = entry.name.theory
   343         val name = entry.name.theory
   345         val imports = entry.header.imports.map(p => p._1.theory)
   344         val imports = entry.header.imports.map(_.theory)
   346 
   345 
   347         val graph1 = (graph /: (name :: imports))(_.default_node(_, Outer_Syntax.empty))
   346         val graph1 = (graph /: (name :: imports))(_.default_node(_, Outer_Syntax.empty))
   348         val graph2 = (graph1 /: imports)(_.add_edge(_, name))
   347         val graph2 = (graph1 /: imports)(_.add_edge(_, name))
   349 
   348 
   350         val syntax0 = if (name == Thy_Header.PURE) List(Thy_Header.bootstrap_syntax) else Nil
   349         val syntax0 = if (name == Thy_Header.PURE) List(Thy_Header.bootstrap_syntax) else Nil