Просмотр исходного кода

Revert "[analyzer] don't mark overridden fields as pure (#9029)"

This reverts commit 752edad5ab9d60997513d5b4033ad40df5a1be63.
Aleksandr Kuzmenko 5 лет назад
Родитель
Сommit
042358bf9d

+ 6 - 9
src/optimization/analyzerTexpr.ml

@@ -1213,7 +1213,7 @@ module Purity = struct
 		taint node;
 		taint node;
 		raise Exit
 		raise Exit
 
 
-	let apply_to_field com is_ctor is_static c cf =
+	let apply_to_field com is_ctor c cf =
 		let node = get_node c cf in
 		let node = get_node c cf in
 		let check_field c cf =
 		let check_field c cf =
 			let node' = get_node c cf in
 			let node' = get_node c cf in
@@ -1233,9 +1233,8 @@ module Purity = struct
 					taint_raise node
 					taint_raise node
 			end
 			end
 		and loop e = match e.eexpr with
 		and loop e = match e.eexpr with
-			| TMeta((Meta.Pure,_,_) as m,_) ->
-				if get_purity_from_meta [m] = Impure then taint_raise node
-				else ()
+			| TMeta((Meta.Pure,_,_),_) ->
+				()
 			| TThrow _ ->
 			| TThrow _ ->
 				taint_raise node;
 				taint_raise node;
 			| TBinop((OpAssign | OpAssignOp _),e1,e2) ->
 			| TBinop((OpAssign | OpAssignOp _),e1,e2) ->
@@ -1270,8 +1269,6 @@ module Purity = struct
 		match cf.cf_kind with
 		match cf.cf_kind with
 			| Method MethDynamic | Var _ ->
 			| Method MethDynamic | Var _ ->
 				taint node;
 				taint node;
-			| _ when not (is_static || is_ctor) && FiltersCommon.is_overridden c cf ->
-				taint node
 			| _ ->
 			| _ ->
 				match cf.cf_expr with
 				match cf.cf_expr with
 				| None ->
 				| None ->
@@ -1290,9 +1287,9 @@ module Purity = struct
 						()
 						()
 
 
 	let apply_to_class com c =
 	let apply_to_class com c =
-		List.iter (apply_to_field com false false c) c.cl_ordered_fields;
-		List.iter (apply_to_field com false true c) c.cl_ordered_statics;
-		(match c.cl_constructor with Some cf -> apply_to_field com true false c cf | None -> ())
+		List.iter (apply_to_field com false c) c.cl_ordered_fields;
+		List.iter (apply_to_field com false c) c.cl_ordered_statics;
+		(match c.cl_constructor with Some cf -> apply_to_field com true c cf | None -> ())
 
 
 	let infer com =
 	let infer com =
 		Hashtbl.clear node_lut;
 		Hashtbl.clear node_lut;

+ 0 - 12
tests/server/src/Main.hx

@@ -265,18 +265,6 @@ class ServerTests extends HaxeServerTestCase {
 		Assert.isTrue(messages.exists(message -> r.match(message)));
 		Assert.isTrue(messages.exists(message -> r.match(message)));
 	}
 	}
 
 
-	function testIssue9029_analyzer_preventPurityOnOverridden() {
-		vfs.putContent("Main.hx", getTemplate("issues/Issue9029/Main.hx"));
-		vfs.putContent("Game.hx", getTemplate("issues/Issue9029/Game.hx"));
-		vfs.putContent("Screen.hx", getTemplate("issues/Issue9029/Screen.hx"));
-		var args = ["-main", "Main", "-D", "analyzer-optimize", "--interp"];
-		runHaxe(args);
-		vfs.putContent("Game.hx", getTemplate("issues/Issue9029/Game.hx.modified"));
-		runHaxeJson([], ServerMethods.Invalidate, {file: new FsPath("Game.hx")});
-		runHaxe(args);
-		assertSuccess();
-	}
-
 	// function testIssue8616() {
 	// function testIssue8616() {
 	// 	vfs.putContent("Main.hx", getTemplate("issues/Issue8616/Main.hx"));
 	// 	vfs.putContent("Main.hx", getTemplate("issues/Issue8616/Main.hx"));
 	// 	vfs.putContent("A.hx", getTemplate("issues/Issue8616/A.hx"));
 	// 	vfs.putContent("A.hx", getTemplate("issues/Issue8616/A.hx"));

+ 0 - 5
tests/server/test/templates/issues/Issue9029/Game.hx

@@ -1,5 +0,0 @@
-class Game extends Screen {
-	override function onStart() {
-		// trace(123);
-	}
-}

+ 0 - 5
tests/server/test/templates/issues/Issue9029/Game.hx.modified

@@ -1,5 +0,0 @@
-class Game extends Screen {
-	override function onStart() {
-		trace(123);
-	}
-}

+ 0 - 5
tests/server/test/templates/issues/Issue9029/Main.hx

@@ -1,5 +0,0 @@
-class Main {
-	static function main() {
-		final game = new Game();
-	}
-}

+ 0 - 7
tests/server/test/templates/issues/Issue9029/Screen.hx

@@ -1,7 +0,0 @@
-class Screen {
-	public function new() {
-		onStart();
-	}
-
-	function onStart():Void {}
-}