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}) |