Browse Source

move array get and set to ArrayImpl

frabbit 11 years ago
parent
commit
d453d20c15
2 changed files with 19 additions and 22 deletions
  1. 16 8
      std/python/internal/ArrayImpl.hx
  2. 3 14
      std/python/internal/HxOverrides.hx

+ 16 - 8
std/python/internal/ArrayImpl.hx

@@ -139,17 +139,25 @@ class ArrayImpl {
 		return Syntax.callField(a, "reverse");
 		return Syntax.callField(a, "reverse");
 	}
 	}
 
 
-	@:keep private static inline function __get<T>(x:Array<T>, idx:Int):T {
 
 
-		if (idx >= x.length || idx < 0)
-			return null;
-		else
-			return x[idx];
-	}
 
 
-	@:keep private static inline function __set<T>(x:Array<T>, idx:Int, v:T):T {
+	@:keep private static inline function __get<T>(x:Array<T>, idx:Int):T
+	{
+		return if (idx < x.length && idx > -1) Syntax.arrayAccess(x, idx) else null;
+	}
 
 
-		x[idx] = v;
+	@:keep private static inline function __set<T>(x:Array<T>, idx:Int, v:T):T
+	{
+		var l = x.length;
+		while (l < idx) {
+			x.push(null);
+			l+=1;
+		}
+		if (l == idx) {
+			x.push(v);
+		} else {
+			Syntax.assign(Syntax.arrayAccess(x, idx), v);
+		}
 		return v;
 		return v;
 	}
 	}
 
 

+ 3 - 14
std/python/internal/HxOverrides.hx

@@ -6,6 +6,7 @@ import python.Syntax.untypedPython in py;
 
 
 @:keep
 @:keep
 @:native("HxOverrides")
 @:native("HxOverrides")
+@:access(python.internal.ArrayImpl)
 class HxOverrides {
 class HxOverrides {
 
 
 	// this two cases iterator and shift are like all methods in String and Array and are already handled in Reflect
 	// this two cases iterator and shift are like all methods in String and Array and are already handled in Reflect
@@ -36,8 +37,7 @@ class HxOverrides {
 
 
 	static public function hx_array_get<T>(a:Dynamic, i:Int):Dynamic {
 	static public function hx_array_get<T>(a:Dynamic, i:Int):Dynamic {
 		if (Std.is(a, Array)) {
 		if (Std.is(a, Array)) {
-			var a : Array<Dynamic> = a;
-			return if (i < a.length && i > -1) Syntax.arrayAccess(a, i) else null;
+			return ArrayImpl.__get(a, i);
 		} else {
 		} else {
 			return Syntax.arrayAccess(a, i);
 			return Syntax.arrayAccess(a, i);
 		}
 		}
@@ -45,18 +45,7 @@ class HxOverrides {
 
 
 	static public function hx_array_set(a:Dynamic, i:Int, v:Dynamic) {
 	static public function hx_array_set(a:Dynamic, i:Int, v:Dynamic) {
 		if (Std.is(a, Array)) {
 		if (Std.is(a, Array)) {
-			var a:Array<Dynamic> = a;
-			var l = a.length;
-			while (l < i) {
-				a.push(null);
-				l+=1;
-			}
-			if (l == i) {
-				a.push(v);
-			} else {
-				Syntax.assign(Syntax.arrayAccess(a, i), v);
-			}
-			return v;
+			return ArrayImpl.__set(a, i, v);
 		} else {
 		} else {
 			Syntax.assign(Syntax.arrayAccess(a, i), v);
 			Syntax.assign(Syntax.arrayAccess(a, i), v);
 			return v;
 			return v;