118 |
118 |
119 def theory_names: List[Document.Node.Name] = theories.iterator.map(p => p._2.name).toList |
119 def theory_names: List[Document.Node.Name] = theories.iterator.map(p => p._2.name).toList |
120 |
120 |
121 lazy val theory_graph: Graph[Document.Node.Name, Unit] = |
121 lazy val theory_graph: Graph[Document.Node.Name, Unit] = |
122 { |
122 { |
123 val graph0 = |
123 val entries = |
124 (Graph.empty[Document.Node.Name, Unit](Document.Node.Name.Ordering) /: theories)( |
124 for ((_, entry) <- theories.toList) |
125 { |
125 yield ((entry.name, ()), entry.header.imports.map(imp => theories(imp._1.theory).name)) |
126 case (g1, (_, entry)) => |
126 Graph.make(entries, symmetric = true)(Document.Node.Name.Ordering) |
127 (g1.default_node(entry.name, ()) /: entry.header.imports)( |
|
128 { case (g2, (parent, _)) => g2.default_node(parent, ()) }) |
|
129 }) |
|
130 (graph0 /: theories)( |
|
131 { |
|
132 case (g1, (_, entry)) => |
|
133 (g1 /: entry.header.imports)( |
|
134 { case (g2, (parent, _)) => g2.add_edge(parent, entry.name) }) |
|
135 }) |
|
136 } |
127 } |
137 |
128 |
138 def get_file(file: JFile, bootstrap: Boolean = false): Option[Document.Node.Name] = |
129 def get_file(file: JFile, bootstrap: Boolean = false): Option[Document.Node.Name] = |
139 { |
130 { |
140 val res = files.getOrElse(File.canonical(file), Nil).headOption |
131 val res = files.getOrElse(File.canonical(file), Nil).headOption |
373 cat_error(msg, "The error(s) above occurred in session " + |
364 cat_error(msg, "The error(s) above occurred in session " + |
374 quote(info.name) + Position.here(info.pos)) |
365 quote(info.name) + Position.here(info.pos)) |
375 } |
366 } |
376 }) |
367 }) |
377 |
368 |
378 Deps(sessions_structure, session_bases, Known.make(Path.current, session_bases.toList.map(_._2))) |
369 val all_known = |
|
370 Known.make(Path.current, sessions_structure.imports_topological_order.map(session_bases(_))) |
|
371 |
|
372 Deps(sessions_structure, session_bases, all_known) |
379 } |
373 } |
380 |
374 |
381 |
375 |
382 /* base info */ |
376 /* base info */ |
383 |
377 |