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

[python] don't modify _hx_fields of a superclass, make a copy instead (closes #6147)

Dan Korostelev 8 лет назад
Родитель
Сommit
90aa2c82a5
2 измененных файлов с 20 добавлено и 3 удалено
  1. 1 3
      std/python/Boot.hx
  2. 19 0
      tests/unit/src/unit/issues/Issue6147.hx

+ 1 - 3
std/python/Boot.hx

@@ -338,10 +338,8 @@ class Boot {
 			return f;
 		} else {
 
-			var scArr = getInstanceFields(sc);
+			var scArr = getInstanceFields(sc).copy();
 			var scMap = new Set(scArr);
-			//var scMap = [for (f in scArr) f => f];
-			var res = [];
 			for (f1 in f) {
 				if (!scMap.has(f1)) {
 					scArr.push(f1);

+ 19 - 0
tests/unit/src/unit/issues/Issue6147.hx

@@ -0,0 +1,19 @@
+package unit.issues;
+
+@:keep
+private class A {
+	var a:Int;
+}
+
+@:keep
+private class B extends A {
+	var b:Int;
+}
+
+class Issue6147 extends unit.Test {
+	function test() {
+		aeq(['a'], Type.getInstanceFields(A));
+		aeq(['a','b'], Type.getInstanceFields(B));
+		aeq(['a'], Type.getInstanceFields(A));
+	}
+}