Procházet zdrojové kódy

Do not traverse into local functions when checking return types

Taddeus Kroes před 10 roky
rodič
revize
970d7b6b8d
1 změnil soubory, kde provedl 3 přidání a 0 odebrání
  1. 3 0
      phases/typecheck.ml

+ 3 - 0
phases/typecheck.ml

@@ -190,6 +190,9 @@ let rec typecheck node =
         ret, [NodeMsg (ret, sprintf "expected return value of type %s"
         ret, [NodeMsg (ret, sprintf "expected return value of type %s"
           (type2str ret_type))]
           (type2str ret_type))]
 
 
+      (* do not traverse into local functions for return statements *)
+      | FunDef _ as node -> node, []
+
       | node -> traverse_list check_types node
       | node -> traverse_list check_types node
     in
     in
     let err =
     let err =