Remove some unused bindings
[tiger.ml.git] / compiler / src / lib / tiger / tiger_semant.ml
index 8d0ca11..2181695 100644 (file)
@@ -3,7 +3,6 @@ module List = ListLabels
 module A         = Tiger_absyn
 module Env       = Tiger_env
 module E         = Tiger_error
-module Symbol    = Tiger_symbol
 module Translate = Tiger_translate
 module Type      = Tiger_env_type
 module Value     = Tiger_env_value
@@ -90,10 +89,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})
           )
@@ -285,7 +294,7 @@ end = struct
         List.iter typedecs ~f:(fun (A.TypeDec {name; ty=ty_exp; pos}) ->
           let ty = transTy ~env ty_exp in
           (match env_get_typ ~sym:name ~env ~pos with
-          | Type.Name (name, ty_opt_ref) ->
+          | Type.Name (_, ty_opt_ref) ->
               ty_opt_ref := Some ty
           | Type.Unit
           | Type.Nil
This page took 0.0226 seconds and 4 git commands to generate.