Sfoglia il codice sorgente

Error reporting: better call stack (#11957)

* Error reporting: merge 'Called from here' messages in call stack

* [tests] Update tests
Rudy Ges 6 mesi fa
parent
commit
21f63d12ed

+ 8 - 1
src/macro/eval/evalExceptions.ml

@@ -192,8 +192,15 @@ let catch_exceptions ctx ?(final=(fun() -> ())) f p =
 				| _ ->
 					(if p' = null_pos then p else p'),stack
 			in
+			let stack = List.fold_left (fun stack p -> match stack with
+				| (hd,n) :: stack when hd = p -> (hd,n+1) :: stack
+				| stack -> (p,1) :: stack
+			) [] stack in
 			Error.raise_error (Error.make_error
-				~sub:(List.map (fun p -> Error.make_error (Error.Custom "Called from here") p) (List.rev stack))
+				~sub:(List.map (fun (p, n) ->
+					let suf = if n > 1 then (Printf.sprintf " (%i times)" n) else "" in
+					Error.make_error (Error.Custom ("Called from here" ^ suf)) p
+				) stack)
 				(Error.Custom ("Uncaught exception " ^ (value_string v)))
 				p
 			)

+ 2 - 18
tests/misc/projects/Issue8303/compile-fail.hxml.stderr

@@ -1,20 +1,4 @@
 Main.hx:1: character 1 : Uncaught exception Stack overflow
-Main.hx:8: characters 4-9 : Called from here
-Main.hx:8: characters 4-9 : Called from here
-Main.hx:8: characters 4-9 : Called from here
-Main.hx:8: characters 4-9 : Called from here
-Main.hx:8: characters 4-9 : Called from here
-Main.hx:8: characters 4-9 : Called from here
-Main.hx:8: characters 4-9 : Called from here
-Main.hx:8: characters 4-9 : Called from here
-Main.hx:8: characters 4-9 : Called from here
-Main.hx:8: characters 4-9 : Called from here
-Main.hx:8: characters 4-9 : Called from here
-Main.hx:8: characters 4-9 : Called from here
-Main.hx:8: characters 4-9 : Called from here
-Main.hx:8: characters 4-9 : Called from here
-Main.hx:8: characters 4-9 : Called from here
-Main.hx:8: characters 4-9 : Called from here
-Main.hx:8: characters 4-9 : Called from here
+Main.hx:8: characters 4-9 : Called from here (17 times)
 Main.hx:10: characters 3-8 : Called from here
-Main.hx:3: characters 3-9 : Called from here
+Main.hx:3: characters 3-9 : Called from here

+ 1 - 17
tests/misc/projects/Issue8303/indent-fail.hxml.stderr

@@ -1,20 +1,4 @@
 Main.hx:1: character 1 : Uncaught exception Stack overflow
-  Main.hx:8: characters 4-9 : Called from here
-  Main.hx:8: characters 4-9 : Called from here
-  Main.hx:8: characters 4-9 : Called from here
-  Main.hx:8: characters 4-9 : Called from here
-  Main.hx:8: characters 4-9 : Called from here
-  Main.hx:8: characters 4-9 : Called from here
-  Main.hx:8: characters 4-9 : Called from here
-  Main.hx:8: characters 4-9 : Called from here
-  Main.hx:8: characters 4-9 : Called from here
-  Main.hx:8: characters 4-9 : Called from here
-  Main.hx:8: characters 4-9 : Called from here
-  Main.hx:8: characters 4-9 : Called from here
-  Main.hx:8: characters 4-9 : Called from here
-  Main.hx:8: characters 4-9 : Called from here
-  Main.hx:8: characters 4-9 : Called from here
-  Main.hx:8: characters 4-9 : Called from here
-  Main.hx:8: characters 4-9 : Called from here
+  Main.hx:8: characters 4-9 : Called from here (17 times)
   Main.hx:10: characters 3-8 : Called from here
   Main.hx:3: characters 3-9 : Called from here

+ 1 - 33
tests/misc/projects/Issue8303/pretty-fail.hxml.stderr

@@ -4,39 +4,7 @@
 
      8 |    log();
        |    ^^^^^
-       | Called from here
-
-       | Called from here
-
-       | Called from here
-
-       | Called from here
-
-       | Called from here
-
-       | Called from here
-
-       | Called from here
-
-       | Called from here
-
-       | Called from here
-
-       | Called from here
-
-       | Called from here
-
-       | Called from here
-
-       | Called from here
-
-       | Called from here
-
-       | Called from here
-
-       | Called from here
-
-       | Called from here
+       | Called from here (17 times)
 
     10 |   log();
        |   ^^^^^