perf(library/init/lean/frontend): do not hold on to outputs (syntax trees etc.) by default
This commit is contained in:
parent
473e998ef6
commit
a37dd02a41
2 changed files with 1731 additions and 1260 deletions
|
|
@ -24,12 +24,13 @@ do t ← parser.mk_token_trie $
|
|||
trailing_term_parsers := term.builtin_trailing_parsers,
|
||||
}
|
||||
|
||||
meta def run_frontend (filename input : string) (print_msg : message → except_t string io unit) :
|
||||
meta def run_frontend (filename input : string) (print_msg : message → except_t string io unit) (collect_outputs : bool) :
|
||||
except_t string io (list module_parser_output) := do
|
||||
parser_cfg ← monad_except.lift_except $ mk_config filename input,
|
||||
let expander_cfg : expander_config := {filename := filename, input := input, transformers := builtin_transformers},
|
||||
let parser_k := parser.run parser_cfg input (λ st _, module.parser st),
|
||||
let elab_k := elaborator.run {filename := filename, input := input, initial_parser_cfg := parser_cfg},
|
||||
let add_output (out : module_parser_output) outs := if collect_outputs then out::outs else [],
|
||||
io.prim.iterate_eio (parser_k, elab_k, parser_cfg, expander_cfg, ([] : list module_parser_output)) $ λ ⟨parser_k, elab_k, parser_cfg, expander_cfg, outs⟩, do
|
||||
let pos := match outs with out::_ := out.pos | [] := default _,
|
||||
r ← monad_lift $ profileit_pure "parsing" pos $ λ _, parser_k.resume parser_cfg,
|
||||
|
|
@ -63,14 +64,14 @@ meta def run_frontend (filename input : string) (print_msg : message → except_
|
|||
pos := ⟨1, 0⟩,
|
||||
text := "parser cache hit rate: " ++ to_string out.cache.hit ++ "/" ++
|
||||
to_string (out.cache.hit + out.cache.miss)},-/
|
||||
pure $ sum.inr (out::outs).reverse
|
||||
pure $ sum.inr (add_output out outs).reverse
|
||||
}
|
||||
| coroutine_result_core.yielded elab_out elab_k := do {
|
||||
elab_out.messages.to_list.mfor print_msg,
|
||||
pure (sum.inl (parser_k, elab_k, elab_out.parser_cfg, elab_out.expander_cfg, out :: outs))
|
||||
pure (sum.inl (parser_k, elab_k, elab_out.parser_cfg, elab_out.expander_cfg, add_output out outs))
|
||||
}
|
||||
}
|
||||
| except.error e := print_msg e *> pure (sum.inl (parser_k, elab_k, parser_cfg, expander_cfg, out :: outs))
|
||||
| except.error e := print_msg e *> pure (sum.inl (parser_k, elab_k, parser_cfg, expander_cfg, add_output out outs))
|
||||
}
|
||||
|
||||
@[export lean_process_file]
|
||||
|
|
@ -87,7 +88,7 @@ meta def process_file (f s : string) (json : bool) : io bool := do
|
|||
", \"caption\": " ++ repr msg.caption ++
|
||||
", \"text\": " ++ repr msg.text ++ "}"
|
||||
else io.println msg.to_string,
|
||||
ex ← (run_frontend f s print_msg).run,
|
||||
ex ← (run_frontend f s print_msg ff).run,
|
||||
match ex with
|
||||
| except.ok _ := pure tt
|
||||
| except.error e := do
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
Loading…
Add table
Reference in a new issue