src/Pure/Thy/sessions.scala
changeset 72845 60f56f623be2
parent 72839 a597300290de
child 72847 9dda93a753b1
equal deleted inserted replaced
72844:240c8a0f6337 72845:60f56f623be2
    57         Outer_Syntax.quote_string(name) + """ end"""
    57         Outer_Syntax.quote_string(name) + """ end"""
    58   }
    58   }
    59 
    59 
    60 
    60 
    61   /* base info and source dependencies */
    61   /* base info and source dependencies */
    62 
       
    63   object Base
       
    64   {
       
    65     def bootstrap(
       
    66         session_directories: Map[JFile, String],
       
    67         global_theories: Map[String, String]): Base =
       
    68       Base(
       
    69         session_directories = session_directories,
       
    70         global_theories = global_theories,
       
    71         overall_syntax = Thy_Header.bootstrap_syntax)
       
    72   }
       
    73 
    62 
    74   sealed case class Base(
    63   sealed case class Base(
    75     pos: Position.T = Position.none,
    64     pos: Position.T = Position.none,
    76     session_directories: Map[JFile, String] = Map.empty,
    65     session_directories: Map[JFile, String] = Map.empty,
    77     global_theories: Map[String, String] = Map.empty,
    66     global_theories: Map[String, String] = Map.empty,
   164             (path, digest)
   153             (path, digest)
   165         }
   154         }
   166       }
   155       }
   167     }
   156     }
   168 
   157 
   169     val bootstrap =
       
   170       Sessions.Base.bootstrap(
       
   171         sessions_structure.session_directories,
       
   172         sessions_structure.global_theories)
       
   173 
       
   174     val session_bases =
   158     val session_bases =
   175       (Map("" -> bootstrap) /: sessions_structure.imports_topological_order)({
   159       (Map("" -> sessions_structure.bootstrap) /: sessions_structure.imports_topological_order)({
   176         case (session_bases, session_name) =>
   160         case (session_bases, session_name) =>
   177           progress.expose_interrupt()
   161           progress.expose_interrupt()
   178 
   162 
   179           val info = sessions_structure(session_name)
   163           val info = sessions_structure(session_name)
   180           try {
   164           try {
   732       val build_graph: Graph[String, Info],
   716       val build_graph: Graph[String, Info],
   733       val imports_graph: Graph[String, Info])
   717       val imports_graph: Graph[String, Info])
   734   {
   718   {
   735     sessions_structure =>
   719     sessions_structure =>
   736 
   720 
       
   721     def bootstrap: Base =
       
   722       Base(
       
   723         session_directories = session_directories,
       
   724         global_theories = global_theories,
       
   725         overall_syntax = Thy_Header.bootstrap_syntax)
       
   726 
   737     def dest_session_directories: List[(String, String)] =
   727     def dest_session_directories: List[(String, String)] =
   738       for ((file, session) <- session_directories.toList)
   728       for ((file, session) <- session_directories.toList)
   739         yield (File.standard_path(file), session)
   729         yield (File.standard_path(file), session)
   740 
   730 
   741     lazy val chapters: SortedMap[String, List[Info]] =
   731     lazy val chapters: SortedMap[String, List[Info]] =