src/Pure/Thy/thy_info.ML
changeset 27843 0bd68bf0cbb8
parent 27579 97ce525f664c
child 28126 7332b623b569
equal deleted inserted replaced
27842:6c35d50d309f 27843:0bd68bf0cbb8
   286 (* load_thy *)
   286 (* load_thy *)
   287 
   287 
   288 fun required_by _ [] = ""
   288 fun required_by _ [] = ""
   289   | required_by s initiators = s ^ "(required by " ^ show_path (rev initiators) ^ ")";
   289   | required_by s initiators = s ^ "(required by " ^ show_path (rev initiators) ^ ")";
   290 
   290 
   291 fun load_thy time upd_time initiators dir name =
   291 fun load_thy time upd_time initiators name =
   292   let
   292   let
   293     val _ = priority ("Loading theory " ^ quote name ^ required_by " " initiators);
   293     val _ = priority ("Loading theory " ^ quote name ^ required_by " " initiators);
   294     val (pos, text, files) =
   294     val (pos, text, files) =
   295       (case get_deps name of
   295       (case get_deps name of
   296         SOME {master = SOME (master_path, _), text as _ :: _, files, ...} =>
   296         SOME {master = SOME (master_path, _), text as _ :: _, files, ...} =>
   298       | _ => error (loader_msg "corrupted dependency information" [name]));
   298       | _ => error (loader_msg "corrupted dependency information" [name]));
   299     val _ = touch_thy name;
   299     val _ = touch_thy name;
   300     val _ = CRITICAL (fn () =>
   300     val _ = CRITICAL (fn () =>
   301       change_deps name (Option.map (fn {master, text, parents, files, ...} =>
   301       change_deps name (Option.map (fn {master, text, parents, files, ...} =>
   302         make_deps upd_time master text parents files)));
   302         make_deps upd_time master text parents files)));
   303     val _ = OuterSyntax.load_thy dir name pos text (time orelse ! Output.timing);
   303     val _ = OuterSyntax.load_thy name pos text (time orelse ! Output.timing);
   304   in
   304   in
   305     CRITICAL (fn () =>
   305     CRITICAL (fn () =>
   306      (change_deps name
   306      (change_deps name
   307         (Option.map (fn {update_time, master, parents, files, ...} =>
   307         (Option.map (fn {update_time, master, parents, files, ...} =>
   308           make_deps update_time master [] parents files));
   308           make_deps update_time master [] parents files));
   433           val _ = change_thys (new_deps name parent_names entry);
   433           val _ = change_thys (new_deps name parent_names entry);
   434 
   434 
   435           val upd_time = serial ();
   435           val upd_time = serial ();
   436           val tasks_graph'' = tasks_graph' |> new_deps name parent_names
   436           val tasks_graph'' = tasks_graph' |> new_deps name parent_names
   437            (if all_current then Finished
   437            (if all_current then Finished
   438             else Task (fn () => load_thy time upd_time initiators dir' name));
   438             else Task (fn () => load_thy time upd_time initiators name));
   439           val tasks_len'' = if all_current then tasks_len' else tasks_len' + 1;
   439           val tasks_len'' = if all_current then tasks_len' else tasks_len' + 1;
   440         in (all_current, (tasks_graph'', tasks_len'')) end)
   440         in (all_current, (tasks_graph'', tasks_len'')) end)
   441   end;
   441   end;
   442 
   442 
   443 end;
   443 end;