@@ -233,6 +233,8 @@ let check_stack (c : context) ts1 ts2 at =
233
233
" but stack has " ^ string_of_result_type ts1)
234
234
235
235
let pop c (ell1 , ts1 ) (ell2 , ts2 ) at =
236
+ Printf. eprintf " [pop] %s\n %!"
237
+ (String. concat " " (List. map string_of_val_type ts1));
236
238
let n1 = List. length ts1 in
237
239
let n2 = List. length ts2 in
238
240
let n = min n1 n2 in
@@ -241,6 +243,8 @@ let pop c (ell1, ts1) (ell2, ts2) at =
241
243
(ell2, if ell1 = Ellipses then [] else Lib.List. take (n2 - n) ts2)
242
244
243
245
let push c (ell1 , ts1 ) (ell2 , ts2 ) =
246
+ Printf. eprintf " [push] %s\n %!"
247
+ (String. concat " " (List. map string_of_val_type ts1));
244
248
assert (ell1 = NoEllipses || ts2 = [] );
245
249
(if ell1 = Ellipses || ell2 = Ellipses then Ellipses else NoEllipses ),
246
250
ts2 @ ts1
@@ -891,12 +895,14 @@ and check_seq (c : context) (s : infer_result_type) (es : instr list)
891
895
s, []
892
896
893
897
| e ::es' ->
898
+ Printf. eprintf " ---- %s%!" (Sexpr. to_string 80 (Arrange. instr e));
894
899
let {ins; outs}, xs = check_instr c e s in
895
900
check_seq (init_locals c xs) (push c outs (pop c ins s e.at)) es'
896
901
897
902
and check_block (c : context ) (es : instr list ) (it : instr_type ) at =
898
903
let InstrT (ts1, ts2, _xs) = it in
899
904
let s, xs' = check_seq c (stack ts1) es in
905
+ Printf. eprintf " ---- end\n %!" ;
900
906
let s' = pop c (stack ts2) s at in
901
907
require (snd s' = [] ) at
902
908
(" type mismatch: block requires " ^ string_of_result_type ts2 ^
0 commit comments