Browse Source

[js] don't add __class__ to Array.prototype (closes #2060, closes #1909)

Dan Korostelev 11 years ago
parent
commit
712898bb4a
2 changed files with 7 additions and 4 deletions
  1. 6 3
      std/js/Boot.hx
  2. 1 1
      std/js/_std/Std.hx

+ 6 - 3
std/js/Boot.hx

@@ -68,7 +68,10 @@ class Boot {
 	}
 	}
 
 
 	static inline function getClass(o:Dynamic) : Dynamic {
 	static inline function getClass(o:Dynamic) : Dynamic {
-		return untyped __define_feature__("js.Boot.getClass", o.__class__);
+		if (Std.is(o, Array))
+			return Array;
+		else
+			return untyped __define_feature__("js.Boot.getClass", o.__class__);
 	}
 	}
 
 
 	@:ifFeature("has_enum")
 	@:ifFeature("has_enum")
@@ -171,6 +174,8 @@ class Boot {
 			return (untyped __js__("typeof"))(o) == "boolean";
 			return (untyped __js__("typeof"))(o) == "boolean";
 		case String:
 		case String:
 			return (untyped __js__("typeof"))(o) == "string";
 			return (untyped __js__("typeof"))(o) == "string";
+		case Array:
+			return (untyped __js__("(o instanceof Array)")) && o.__enum__ == null;
 		case Dynamic:
 		case Dynamic:
 			return true;
 			return true;
 		default:
 		default:
@@ -178,8 +183,6 @@ class Boot {
 				// Check if o is an instance of a Haxe class
 				// Check if o is an instance of a Haxe class
 				if( (untyped __js__("typeof"))(cl) == "function" ) {
 				if( (untyped __js__("typeof"))(cl) == "function" ) {
 					if( untyped __js__("o instanceof cl") ) {
 					if( untyped __js__("o instanceof cl") ) {
-						if( cl == Array )
-							return (o.__enum__ == null);
 						return true;
 						return true;
 					}
 					}
 					if( __interfLoop(getClass(o),cl) )
 					if( __interfLoop(getClass(o),cl) )

+ 1 - 1
std/js/_std/Std.hx

@@ -61,7 +61,7 @@ import js.Boot;
 	static function __init__() : Void untyped {
 	static function __init__() : Void untyped {
 		__feature__("js.Boot.getClass",String.prototype.__class__ = __feature__("Type.resolveClass",$hxClasses["String"] = String,String));
 		__feature__("js.Boot.getClass",String.prototype.__class__ = __feature__("Type.resolveClass",$hxClasses["String"] = String,String));
 		__feature__("js.Boot.isClass",String.__name__ = __feature__("Type.getClassName",["String"],true));
 		__feature__("js.Boot.isClass",String.__name__ = __feature__("Type.getClassName",["String"],true));
-		__feature__("js.Boot.getClass",Array.prototype.__class__ = __feature__("Type.resolveClass",$hxClasses["Array"] = Array,Array));
+		__feature__("Type.resolveClass",$hxClasses["Array"] = Array);
 		__feature__("js.Boot.isClass",Array.__name__ = __feature__("Type.getClassName",["Array"],true));
 		__feature__("js.Boot.isClass",Array.__name__ = __feature__("Type.getClassName",["Array"],true));
 		__feature__("Date.*", {
 		__feature__("Date.*", {
 			__feature__("js.Boot.getClass",__js__('Date').prototype.__class__ = __feature__("Type.resolveClass",$hxClasses["Date"] = __js__('Date'),__js__('Date')));
 			__feature__("js.Boot.getClass",__js__('Date').prototype.__class__ = __feature__("Type.resolveClass",$hxClasses["Date"] = __js__('Date'),__js__('Date')));