소스 검색

give proper errors for Void expressions in value places (closes #4754)

Simon Krajewski 9 년 전
부모
커밋
c94b34784d

+ 2 - 4
analyzer.ml

@@ -950,8 +950,6 @@ module TexprTransformer = struct
 				value bb e1
 			| TBlock _ | TIf _ | TSwitch _ | TTry _ ->
 				bind_to_temp bb false e
-			| TFor _ | TWhile _ ->
-				assert false
 			| TCall({eexpr = TLocal v},el) when is_really_unbound v ->
 				check_unbound_call v el;
 				bb,e
@@ -1018,8 +1016,8 @@ module TexprTransformer = struct
 				error "Cannot use abstract as value" e.epos
 			| TConst _ | TTypeExpr _ ->
 				bb,e
-			| TContinue | TBreak | TThrow _ | TReturn _ | TVar _ ->
-				assert false
+			| TContinue | TBreak | TThrow _ | TReturn _ | TVar _ | TFor _ | TWhile _ ->
+				error "Cannot use this expression as value" e.epos
 		and ordered_value_list bb el =
 			let might_be_affected,collect_modified_locals = Optimizer.create_affection_checker() in
 			let rec can_be_optimized e = match e.eexpr with

+ 1 - 1
tests/misc/compile.hxml

@@ -1,3 +1,3 @@
 -cp src
 #-D MISC_TEST_FILTER=3802
---run Main
+--run Main

+ 5 - 0
tests/misc/projects/Issue4754/Main1.hx

@@ -0,0 +1,5 @@
+class Main1 {
+	static function main() {
+		"" + var str = "";
+	}
+}

+ 2 - 0
tests/misc/projects/Issue4754/compile1-fail.hxml

@@ -0,0 +1,2 @@
+-main Main1
+--interp

+ 1 - 0
tests/misc/projects/Issue4754/compile1-fail.hxml.stderr

@@ -0,0 +1 @@
+Main1.hx:3: characters 7-10 : Cannot use this expression as value

+ 1 - 1
tests/misc/projects/Issue4775/Main1.hx

@@ -2,7 +2,7 @@
 	public function new(t:T) { }
 }
 
-class Main {
+class Main1 {
 	static function main() {
 		new Contain(new Main());
 	}