소스 검색

changed "fields" (again).

Nicolas Cannasse 19 년 전
부모
커밋
7f4fe3886c
1개의 변경된 파일18개의 추가작업 그리고 20개의 파일을 삭제
  1. 18 20
      std/Reflect.hx

+ 18 - 20
std/Reflect.hx

@@ -255,7 +255,7 @@ class Reflect {
 	**/
 	public static function fields( o : Dynamic ) : Array<String> {
 		if( o == null ) return new Array();
-		return untyped {
+		untyped {
 		#if flash
 			var a : Array<String> = __keys__(o);
 			var i = 0;
@@ -265,30 +265,28 @@ class Reflect {
 				else
 					++i;
 			}
-			a;
+			return a;
 		#else js
 			var a = new Array();
 			var t;
 			try{ t = o.__proto__; }catch(e : Dynamic){ t = null; }
-			if( t != null ) o.__proto__ = null;
-			untyped __js__("
-				for(var i in o)
-					if( i != \"__proto__\" )
-						a.push(i);
-			");
-			if( t != null ) o.__proto__ = t;
-			var i = 0;
-			if( o.hasOwnProperty != null )
-				while( i < a.length ) {
-					if( !o.hasOwnProperty(a[i]) )
-						a.splice(i,1);
-					else
-						++i;
-				}
-			a;
+			if( t != null ) {
+				untyped __js__("
+					for(var i in o)
+						if( o[i] !== t[i] && i != \"__proto__\" )
+							a.push(i);
+				");
+			} else {
+				untyped __js__("
+					for(var i in o)
+						if( o.hasOwnProperty(i) )
+							a.push(i);
+				");
+			}
+			return a;
 		#else neko
 			if( __dollar__typeof(o) != __dollar__tobject )
-				new Array<String>();
+				return new Array<String>();
 			else {
 				var a = __dollar__objfields(o);
 				var i = 0, j = 0;
@@ -307,7 +305,7 @@ class Reflect {
 					a[i] = null;
 					i++;
 				}
-				Array.new1(a,j);
+				return Array.new1(a,j);
 			}
 		#else error
 		#end