@@ -59,7 +59,7 @@ type comment = {
59
59
type parsing_error = {
60
60
start : int ;
61
61
stop : int ;
62
- msg : string Loc .located ;
62
+ msg : Pp .t Loc .located ;
63
63
qf : Quickfix .t list option ;
64
64
}
65
65
@@ -248,7 +248,8 @@ let add_sentence parsed parsing_start start stop (ast: sentence_state) synterp_s
248
248
let id = Stateid. fresh () in
249
249
let scheduler_state_after, schedule =
250
250
match ast with
251
- | Error _ -> scheduler_state_before, parsed.schedule (* If the sentence has a parsing error we do not schedule it *)
251
+ | Error {msg} ->
252
+ scheduler_state_before, Scheduler. schedule_errored_sentence id msg parsed.schedule
252
253
| Parsed ast ->
253
254
let ast' = (ast.ast, ast.classification, synterp_state) in
254
255
Scheduler. schedule_sentence (id, ast') scheduler_state_before parsed.schedule
@@ -397,7 +398,8 @@ let patch_sentence parsed scheduler_state_before id ({ parsing_start; ast; start
397
398
log @@ Format. sprintf " Patching sentence %s , %s" (Stateid. to_string id) (string_of_parsed_ast old_sentence.ast);
398
399
let scheduler_state_after, schedule =
399
400
match ast with
400
- | Error _ -> scheduler_state_before, parsed.schedule
401
+ | Error {msg} ->
402
+ scheduler_state_before, Scheduler. schedule_errored_sentence id msg parsed.schedule
401
403
| Parsed ast ->
402
404
let ast = (ast.ast, ast.classification, synterp_state) in
403
405
Scheduler. schedule_sentence (id,ast) scheduler_state_before parsed.schedule
@@ -531,11 +533,10 @@ let get_entry ast =
531
533
[%% endif]
532
534
533
535
534
- let handle_parse_error start parsing_start msg qf ({stream; errors; parsed} as parse_state ) =
536
+ let handle_parse_error start parsing_start msg qf ({stream; errors; parsed; } as parse_state ) synterp_state =
535
537
log @@ " handling parse error at " ^ string_of_int start;
536
538
let stop = Stream. count stream in
537
539
let parsing_error = { msg; start; stop; qf} in
538
- let synterp_state = Vernacstate.Synterp. freeze () in
539
540
let sentence = { parsing_start; ast = Error parsing_error; start; stop; synterp_state } in
540
541
let parsed = sentence :: parsed in
541
542
let errors = parsing_error :: errors in
@@ -579,24 +580,26 @@ let handle_parse_more ({loc; synterp_state; stream; raw; parsed; parsed_comments
579
580
let e, info = Exninfo. capture exn in
580
581
let loc = get_loc_from_info_or_exn e info in
581
582
let qf = Result. value ~default: [] @@ Quickfix. from_exception e in
582
- handle_parse_error start begin_char (loc, Pp. string_of_ppcmds @@ CErrors. iprint_no_report (e,info)) (Some qf) parse_state
583
+ handle_parse_error start begin_char (loc, CErrors. iprint_no_report (e,info)) (Some qf) parse_state synterp_state
583
584
end
584
- | exception (E msg as exn ) ->
585
- let loc = Loc. get_loc @@ Exninfo. info exn in
586
- let qf = Result. value ~default: [] @@ Quickfix. from_exception exn in
585
+ | exception (E _ as exn ) ->
586
+ let e, info = Exninfo. capture exn in
587
+ let loc = get_loc_from_info_or_exn e info in
588
+ let qf = Result. value ~default: [] @@ Quickfix. from_exception e in
587
589
junk_sentence_end stream;
588
- handle_parse_error start start (loc,msg) (Some qf) {parse_state with stream}
589
- | exception (CLexer.Error. E e as exn ) -> (* May be more problematic to handle for the diff *)
590
- let loc = Loc. get_loc @@ Exninfo. info exn in
590
+ handle_parse_error start start (loc, CErrors. iprint_no_report (e, info)) (Some qf) {parse_state with stream} synterp_state
591
+ | exception (CLexer.Error. E _ as exn ) -> (* May be more problematic to handle for the diff *)
592
+ let e, info = Exninfo. capture exn in
593
+ let loc = get_loc_from_info_or_exn e info in
591
594
let qf = Result. value ~default: [] @@ Quickfix. from_exception exn in
592
595
junk_sentence_end stream;
593
- handle_parse_error start start (loc,CLexer.Error. to_string e) (Some qf) {parse_state with stream}
596
+ handle_parse_error start start (loc,CErrors. iprint_no_report (e, info)) (Some qf) {parse_state with stream} synterp_state
594
597
| exception exn ->
595
598
let e, info = Exninfo. capture exn in
596
599
let loc = Loc. get_loc @@ info in
597
600
let qf = Result. value ~default: [] @@ Quickfix. from_exception exn in
598
601
junk_sentence_end stream;
599
- handle_parse_error start start (loc, " Unexpected parse error: " ^ Pp. string_of_ppcmds @@ CErrors. iprint_no_report (e,info)) (Some qf) {parse_state with stream}
602
+ handle_parse_error start start (loc, CErrors. iprint_no_report (e,info)) (Some qf) {parse_state with stream} synterp_state
600
603
end
601
604
602
605
let rec unchanged_id id = function
@@ -726,9 +729,9 @@ module Internal = struct
726
729
sentence.stop
727
730
728
731
let string_of_error error =
729
- let (_, str ) = error.msg in
732
+ let (_, pp ) = error.msg in
730
733
Format. sprintf " [parsing error] [%s] (%i -> %i)"
731
- str
734
+ ( Pp. string_of_ppcmds pp)
732
735
error.start
733
736
error.stop
734
737
0 commit comments