src/Pure/Thy/sessions.scala
changeset 68307 812546f20c5c
parent 68306 d575281e18d0
child 68318 5971199863ea
equal deleted inserted replaced
68306:d575281e18d0 68307:812546f20c5c
   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