51 def errors: List[String] = entries.flatMap(_.header.errors) |
51 def errors: List[String] = entries.flatMap(_.header.errors) |
52 |
52 |
53 lazy val syntax: Outer_Syntax = |
53 lazy val syntax: Outer_Syntax = |
54 resources.session_base.syntax.add_keywords(keywords).add_abbrevs(abbrevs) |
54 resources.session_base.syntax.add_keywords(keywords).add_abbrevs(abbrevs) |
55 |
55 |
56 def loaded_theories: Set[String] = |
56 def loaded_theories: Graph[String, Outer_Syntax] = |
57 resources.session_base.loaded_theories ++ rev_entries.map(_.name.theory) |
57 (resources.session_base.loaded_theories /: entries)({ case (graph, entry) => |
|
58 val name = entry.name.theory |
|
59 val imports = entry.header.imports.map(p => p._1.theory) |
|
60 |
|
61 if (graph.defined(name)) |
|
62 error("Duplicate loaded theory entry " + quote(name)) |
|
63 |
|
64 for (dep <- imports if !graph.defined(dep)) |
|
65 error("Missing loaded theory entry " + quote(dep) + " for " + quote(name)) |
|
66 |
|
67 val syntax = Outer_Syntax.merge(imports.map(graph.get_node(_))) + entry.header |
|
68 (graph.new_node(name, syntax) /: imports)((g, dep) => g.add_edge(dep, name)) |
|
69 }) |
58 |
70 |
59 def loaded_files: List[(String, List[Path])] = |
71 def loaded_files: List[(String, List[Path])] = |
60 { |
72 { |
61 names.map(_.theory) zip |
73 names.map(_.theory) zip |
62 Par_List.map((e: () => List[Path]) => e(), names.map(resources.loaded_files(syntax, _))) |
74 Par_List.map((e: () => List[Path]) => e(), names.map(resources.loaded_files(syntax, _))) |