X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=compiler%2Fsrc%2Flib%2Ftiger%2Ftiger_semant.ml;h=a3893fa89a49f5650e3e0da9cc973d5a9c99a684;hb=54e838f482844369048d4f88e87a092a87162b72;hp=8d0ca11a4d8c6afadcc92a7bcf743b46a51e10f1;hpb=cbb4ffb6428f52eaea42f6039332af0c392cdd0f;p=tiger.ml.git 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}) )