Skip to content
This repository was archived by the owner on Apr 25, 2025. It is now read-only.

Commit cfcd13e

Browse files
committed
Improve runtime pretty printing
1 parent 418220a commit cfcd13e

File tree

4 files changed

+24
-8
lines changed

4 files changed

+24
-8
lines changed

interpreter/exec/eval.ml

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -653,10 +653,14 @@ let rec step (c : config) : config =
653653
Ref r :: vs', []
654654
| FuncRef f when Rtt.match_rtt (Func.read_rtt f) rtt ->
655655
Ref r :: vs', []
656-
| Data.DataRef _ | FuncRef _ ->
656+
| Data.DataRef d ->
657657
vs', [Trapping ("cast failure, expected " ^
658-
string_of_def_type (Rtt.def_type_of rtt) ^ " but got " ^
659-
string_of_value (Ref r)) @@ e.at]
658+
Rtt.string_of_rtt rtt ^ " but got " ^
659+
Rtt.string_of_rtt (Data.read_rtt d)) @@ e.at]
660+
| FuncRef f ->
661+
vs', [Trapping ("cast failure, expected " ^
662+
Rtt.string_of_rtt rtt ^ " but got " ^
663+
Rtt.string_of_rtt (Func.read_rtt f)) @@ e.at]
660664
| _ ->
661665
Crash.error e.at "wrong reference type"
662666
)

interpreter/runtime/rtt.ml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,13 @@ let rec match_rtt rtt1 rtt2 =
3131
| Rtt (_, None) -> false
3232
| Rtt (_, Some rtt1') -> match_rtt rtt1' rtt2
3333

34+
let rec string_of_rtt (Rtt (x, sup)) =
35+
string_of_var (SemVar x) ^
36+
(match sup with
37+
| None -> ""
38+
| Some rtt' -> " (sub " ^ string_of_rtt rtt' ^ ")"
39+
)
40+
3441

3542
let () =
3643
let eq_ref' = !Value.eq_ref' in

interpreter/runtime/rtt.mli

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,5 @@ val def_type_of : rtt -> def_type
1313
val depth : rtt -> int32
1414

1515
val match_rtt : rtt -> rtt -> bool
16+
17+
val string_of_rtt : rtt -> string

interpreter/syntax/types.ml

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -250,18 +250,21 @@ let string_of_name n =
250250
Buffer.contents b
251251

252252
let rec string_of_var =
253-
let inner = ref 0 in
253+
let inner = ref [] in
254254
function
255255
| SynVar x -> I32.to_string_u x
256256
| SemVar x ->
257-
if !inner > 3 then "..." else
258-
( incr inner;
257+
let h = Hashtbl.hash x in
258+
string_of_int h ^
259+
if List.mem h !inner then "" else
260+
( inner := h :: !inner;
259261
try
260262
let s = string_of_def_type (def_of x) in
261-
decr inner; "(" ^ s ^ ")"
262-
with exn -> inner := 0; raise exn
263+
inner := List.tl !inner; "=(" ^ s ^ ")"
264+
with exn -> inner := []; raise exn
263265
)
264266

267+
265268
and string_of_nullability = function
266269
| NonNullable -> ""
267270
| Nullable -> "null "

0 commit comments

Comments
 (0)