src/Pure/Thy/thy_load.ML
changeset 51268 fcc4b89a600d
parent 51228 dff3471dd8bc
child 51273 d54ee0cad2ab
--- a/src/Pure/Thy/thy_load.ML	Sun Feb 24 14:14:07 2013 +0100
+++ b/src/Pure/Thy/thy_load.ML	Sun Feb 24 17:29:55 2013 +0100
@@ -218,18 +218,30 @@
   let
     val immediate = not (Goal.future_enabled ());
 
-    fun put_timing tr = Toplevel.put_timing (last_timing tr) tr;
-    fun put_timings (tr, trs) = (put_timing tr, map put_timing trs);
+    fun prepare_span span =
+      Thy_Syntax.span_content span
+      |> Outer_Syntax.read_span (#2 (Outer_Syntax.get_syntax ()))
+      |> Toplevel.modify_init init
+      |> (fn tr => Toplevel.put_timing (last_timing tr) tr);
 
-    fun proof_result (tr, trs) (st, _) =
+    fun element_result span_elem (st, _) =
       let
-        val (result, st') = Toplevel.proof_result immediate (tr, trs) st;
-        val pos' = Toplevel.pos_of (List.last (tr :: trs));
-      in (result, (st', pos')) end;
+        val tr_elem = Thy_Syntax.map_element prepare_span span_elem;
+        val Thy_Syntax.Element (tr, opt_proof) = tr_elem;
+        val proof_trs =
+          (case opt_proof of
+            NONE => []
+          | SOME (a, b) => (maps Thy_Syntax.flat_element a @ [b]) |> filter_out Toplevel.is_ignored);
 
-    fun element_result elem x =
-      fold_map (proof_result o put_timings)
-        (Outer_Syntax.read_element (#2 (Outer_Syntax.get_syntax ())) init elem) x;
+        val elems =
+          if Toplevel.is_ignored tr then map (rpair []) proof_trs
+          else if Keyword.is_schematic_goal (Toplevel.name_of tr)
+          then map (rpair []) (tr :: proof_trs)
+          else [(tr, proof_trs)];
+
+        val (results, st') = fold_map (Toplevel.proof_result immediate) elems st;
+        val pos' = Toplevel.pos_of (Thy_Syntax.last_element tr_elem);
+      in (results, (st', pos')) end;
 
     val (results, (end_state, end_pos)) =
       fold_map element_result elements (Toplevel.toplevel, Position.none);