X-Git-Url: https://git.xandkar.net/?p=tiger.ml.git;a=blobdiff_plain;f=compiler%2Fsrc%2Flib%2Ftiger%2Ftiger_semant.ml;fp=compiler%2Fsrc%2Flib%2Ftiger%2Ftiger_semant.ml;h=a3893fa89a49f5650e3e0da9cc973d5a9c99a684;hp=8d0ca11a4d8c6afadcc92a7bcf743b46a51e10f1;hb=54e838f482844369048d4f88e87a092a87162b72;hpb=1d155dc1b6399ec69573fc8043f2ec2a96490b50 diff --git a/compiler/src/lib/tiger/tiger_semant.ml b/compiler/src/lib/tiger/tiger_semant.ml index 8d0ca11..a3893fa 100644 --- a/compiler/src/lib/tiger/tiger_semant.ml +++ b/compiler/src/lib/tiger/tiger_semant.ml @@ -90,10 +90,20 @@ end = struct | A.CallExp {func; args; pos} -> (match env_get_val ~sym:func ~env ~pos with | Value.Fun {formals; result} -> - List.iter2 formals args ~f:(fun ty_expected exp_given -> - check_same (return (actual_ty ~pos ty_expected)) (trexp exp_given) ~pos; - ); - return (actual_ty ~pos result) + let expected = List.length formals in + let given = List.length args in + if given = expected then + begin + List.iter2 formals args ~f:(fun ty_expected exp_given -> + check_same + (return (actual_ty ~pos ty_expected)) + (trexp exp_given) + ~pos; + ); + return (actual_ty ~pos result) + end + else + E.raise (E.Wrong_number_of_args {func; expected; given; pos}) | Value.Var _ -> E.raise (E.Id_not_a_function {id=func; pos}) )