src/Pure/Isar/outer_syntax.ML
changeset 43621 e8858190cccd
parent 42129 c17508a61f49
child 43711 608d1b451f67
equal deleted inserted replaced
43620:43a195a0279b 43621:e8858190cccd
   247     | [] => (Toplevel.ignored range_pos, false)
   247     | [] => (Toplevel.ignored range_pos, false)
   248     | _ => (Toplevel.malformed range_pos not_singleton, true))
   248     | _ => (Toplevel.malformed range_pos not_singleton, true))
   249     handle ERROR msg => (Toplevel.malformed range_pos msg, true)
   249     handle ERROR msg => (Toplevel.malformed range_pos msg, true)
   250   end;
   250   end;
   251 
   251 
   252 fun prepare_atom commands init (cmd, proof, proper_proof) =
   252 fun prepare_element commands init {head, proof, proper_proof} =
   253   let
   253   let
   254     val (tr, proper_cmd) = prepare_span commands cmd |>> Toplevel.modify_init init;
   254     val (tr, proper_head) = prepare_span commands head |>> Toplevel.modify_init init;
   255     val proof_trs = map (prepare_span commands) proof |> filter #2 |> map #1;
   255     val proof_trs = map (prepare_span commands) proof |> filter #2 |> map #1;
   256   in
   256   in
   257     if proper_cmd andalso proper_proof then [(tr, proof_trs)]
   257     if proper_head andalso proper_proof then [(tr, proof_trs)]
   258     else map (rpair []) (if proper_cmd then tr :: proof_trs else proof_trs)
   258     else map (rpair []) (if proper_head then tr :: proof_trs else proof_trs)
   259   end;
   259   end;
   260 
   260 
   261 fun prepare_command pos str =
   261 fun prepare_command pos str =
   262   let val (lexs, commands) = get_syntax () in
   262   let val (lexs, commands) = get_syntax () in
   263     (case Thy_Syntax.parse_spans lexs pos str of
   263     (case Thy_Syntax.parse_spans lexs pos str of
   276     val _ = Present.init_theory name;
   276     val _ = Present.init_theory name;
   277 
   277 
   278     val toks = Source.exhausted (Thy_Syntax.token_source lexs pos (Source.of_string text));
   278     val toks = Source.exhausted (Thy_Syntax.token_source lexs pos (Source.of_string text));
   279     val spans = Source.exhaust (Thy_Syntax.span_source toks);
   279     val spans = Source.exhaust (Thy_Syntax.span_source toks);
   280     val _ = List.app Thy_Syntax.report_span spans;  (* FIXME ?? *)
   280     val _ = List.app Thy_Syntax.report_span spans;  (* FIXME ?? *)
   281     val atoms = Source.exhaust (Thy_Syntax.atom_source (Source.of_list spans))
   281     val elements = Source.exhaust (Thy_Syntax.element_source (Source.of_list spans))
   282       |> Par_List.map_name "Outer_Syntax.prepare_atom" (prepare_atom commands init) |> flat;
   282       |> Par_List.map_name "Outer_Syntax.prepare_element" (prepare_element commands init) |> flat;
   283 
   283 
   284     val _ = Present.theory_source name
   284     val _ = Present.theory_source name
   285       (fn () => HTML.html_mode (implode o map Thy_Syntax.present_span) spans);
   285       (fn () => HTML.html_mode (implode o map Thy_Syntax.present_span) spans);
   286 
   286 
   287     val _ = if time then writeln ("\n**** Starting theory " ^ quote name ^ " ****") else ();
   287     val _ = if time then writeln ("\n**** Starting theory " ^ quote name ^ " ****") else ();
   288     val (results, thy) = cond_timeit time "" (fn () => Toplevel.excursion atoms);
   288     val (results, thy) = cond_timeit time "" (fn () => Toplevel.excursion elements);
   289     val _ = if time then writeln ("**** Finished theory " ^ quote name ^ " ****\n") else ();
   289     val _ = if time then writeln ("**** Finished theory " ^ quote name ^ " ****\n") else ();
   290 
   290 
   291     val present =
   291     val present =
   292       singleton (Future.cond_forks {name = "Outer_Syntax.present:" ^ name, group = NONE,
   292       singleton (Future.cond_forks {name = "Outer_Syntax.present:" ^ name, group = NONE,
   293         deps = map Future.task_of results, pri = 0})
   293         deps = map Future.task_of results, pri = 0})