Browse Source

fixed invalid Std.instance check on ArrayBase (close #5865)

Nicolas Cannasse 8 years ago
parent
commit
5998acbf86
3 changed files with 10 additions and 2 deletions
  1. 2 2
      std/hl/_std/Type.hx
  2. 4 0
      std/hl/types/ArrayBase.hx
  3. 4 0
      std/hl/types/ArrayObj.hx

+ 2 - 2
std/hl/_std/Type.hx

@@ -121,13 +121,13 @@ class Type {
 			return v;
 		}
 		var a : hl.types.ArrayDyn = cast params;
-		var aobj = Std.instance(@:privateAccess a.array, hl.types.ArrayObj);
 		var narr;
-		if( aobj == null ) {
+		if( @:privateAccess !a.array.isArrayObj() ) {
 			narr = new hl.NativeArray<Dynamic>(a.length);
 			for( i in 0...a.length )
 				narr[i] = @:privateAccess a.array.getDyn(i);
 		} else {
+			var aobj : hl.types.ArrayObj<Dynamic> = cast @:privateAccess a.array;
 			narr = @:privateAccess aobj.array;
 		}
 		var v = @:privateAccess e.__type__.allocEnum(index, narr, a.length);

+ 4 - 0
std/hl/types/ArrayBase.hx

@@ -107,6 +107,10 @@ class ArrayBase extends ArrayAccess {
 		return null;
 	}
 
+	function isArrayObj() {
+		return false;
+	}
+
 	public static function allocI32( bytes : BytesAccess<Int>, length : Int ) @:privateAccess {
 		var a : ArrayBytes.ArrayI32 = untyped $new(ArrayBytes.ArrayI32);
 		a.length = length;

+ 4 - 0
std/hl/types/ArrayObj.hx

@@ -47,6 +47,10 @@ class ArrayObj<T> extends ArrayBase {
 		return b.toString();
 	}
 
+	override function isArrayObj() {
+		return true;
+	}
+
 	public function pop() : Null<T> {
 		if( length == 0 )
 			return null;