Procházet zdrojové kódy

don't lose static modifier in ExprTools.map

closes #12030
Simon Krajewski před 4 měsíci
rodič
revize
5cbaaf875c

+ 2 - 0
std/haxe/macro/ExprTools.hx

@@ -161,6 +161,8 @@ class ExprTools {
 						var v2:Var = {name: v.name, type: v.type, expr: opt(v.expr, f)};
 						if (v.isFinal != null)
 							v2.isFinal = v.isFinal;
+						if (v.isStatic != null)
+							v2.isStatic = v.isStatic;
 						ret.push(v2);
 					}
 					EVars(ret);

+ 26 - 0
tests/unit/src/unit/issues/Issue12030.hx

@@ -0,0 +1,26 @@
+package unit.issues;
+
+import utest.Assert;
+
+@:build(unit.issues.misc.Issue12030Macro.build())
+private class Foo {
+	public function new() {}
+
+	public function bar() {
+		static var last = 0;
+		if (last == 0) {
+			last = 1;
+			return 'A';
+		} else {
+			return 'B';
+		}
+	}
+}
+
+class Issue12030 extends Test {
+	function test() {
+		var foo = new Foo();
+		eq('A', foo.bar());
+		eq('B', foo.bar());
+	}
+}

+ 16 - 0
tests/unit/src/unit/issues/misc/Issue12030Macro.hx

@@ -0,0 +1,16 @@
+package unit.issues.misc;
+
+class Issue12030Macro {
+	public static function build() {
+		var fields = haxe.macro.Context.getBuildFields();
+		function identity(e)
+			return haxe.macro.ExprTools.map(e, identity);
+		for (f in fields)
+			switch f.kind {
+				case FFun(f):
+					f.expr = identity(f.expr);
+				case _:
+			};
+		return fields;
+	}
+}