@@ -1333,13 +1333,45 @@ let pr_frame = function
13331333 str " Extn " ++ str (Tac2dyn.Arg. repr tag) ++ str " :" ++ spc () ++
13341334 obj.Tac2env. ml_print env sigma arg
13351335
1336- let () = register_handler begin function
1337- | Tac2interp. LtacError (kn , args ) ->
1336+ let print_raw_error kn args =
13381337 let t_exn = KerName. make Tac2env. rocq_prefix (Id. of_string " exn" ) in
13391338 let v = Tac2ffi. of_open (kn, args) in
13401339 let t = GTypRef (Other t_exn, [] ) in
13411340 let c = Tac2print. pr_valexpr (Global. env () ) Evd. empty v t in
1342- Some (hov 0 (str " Uncaught Ltac2 exception:" ++ spc () ++ hov 0 c))
1341+ hov 0 (str " Uncaught Ltac2 exception:" ++ spc () ++ hov 0 c)
1342+
1343+ let print_error kn args =
1344+ let env = Global. env() in
1345+ let sigma = Evd. from_env env in
1346+ let user_print = KerName. make Tac2quote.Refs. control_prefix (Id. of_string " print_exn" ) in
1347+ let user_print = Tac2interp. eval_global user_print in
1348+ let user_print = Tac2ffi. (to_fun1 of_exn (to_option to_pp)) user_print in
1349+ let user_print () =
1350+ let res, _, _, _, _ =
1351+ Proofview. apply ~name: (Id. of_string_soft " ltac2 error printing" ) ~poly: PolyFlags. default
1352+ env
1353+ (user_print (Tac2interp. LtacError (kn, args), Exninfo. null))
1354+ (snd @@ Proofview. init sigma [] )
1355+ in
1356+ res
1357+ in
1358+ match user_print() with
1359+ | Some msg -> msg
1360+ | None -> print_raw_error kn args
1361+ | exception e when CErrors. noncritical e ->
1362+ let e = Exninfo. capture e in
1363+ let ppe = match e with
1364+ | Tac2interp. LtacError (kn' , args' ), _info ->
1365+ (* don't use iprint: high risk of looping *)
1366+ (* XXX print the info? currently CErrors.print_extra is not exposed *)
1367+ print_raw_error kn' args'
1368+ | _ -> CErrors. iprint e
1369+ in
1370+ print_raw_error kn args ++ fnl() ++
1371+ hov 2 (str " Custom Ltac2 printer failed:" ++ spc() ++ ppe)
1372+
1373+ let () = register_handler begin function
1374+ | Tac2interp. LtacError (kn , args ) -> Some (print_error kn args)
13431375| _ -> None
13441376end
13451377
0 commit comments