浏览代码

Add check for void return in typed functions

Taddeus Kroes 10 年之前
父节点
当前提交
5451737e00
共有 1 个文件被更改,包括 4 次插入 和 0 次删除
  1. 4 0
      phases/typecheck.ml

+ 4 - 0
phases/typecheck.ml

@@ -186,6 +186,10 @@ let rec typecheck node =
           "function \"%s\" has return type %s, got %s"
           "function \"%s\" has return type %s, got %s"
           name (type2str ret_type) (type2str (typeof value)))]
           name (type2str ret_type) (type2str (typeof value)))]
 
 
+      | Return (None, _) as ret when ret_type <> Void ->
+        ret, [NodeMsg (ret, sprintf "expected return value of type %s"
+          (type2str ret_type))]
+
       | node -> traverse_list check_types node
       | node -> traverse_list check_types node
     in
     in
     let err =
     let err =