瀏覽代碼

[js] optimize (?) Type.enumEq (see #7189)

Dan Korostelev 7 年之前
父節點
當前提交
f0e026ebde
共有 1 個文件被更改,包括 9 次插入5 次删除
  1. 9 5
      std/js/_std/Type.hx

+ 9 - 5
std/js/_std/Type.hx

@@ -226,6 +226,10 @@ enum ValueType {
 		if( a == b )
 		if( a == b )
 			return true;
 			return true;
 		try {
 		try {
+			var e = a.__enum__;
+			if( e == null || e != b.__enum__ )
+				return false;
+
 			#if js_enums_as_arrays
 			#if js_enums_as_arrays
 			if( a[0] != b[0] )
 			if( a[0] != b[0] )
 				return false;
 				return false;
@@ -235,16 +239,16 @@ enum ValueType {
 			#else
 			#else
 			if (a._hx_index != b._hx_index)
 			if (a._hx_index != b._hx_index)
 				return false;
 				return false;
-			for (f in Reflect.fields(a)){
+
+			var enm = $hxEnums[e];
+			var ctorName = enm.__constructs__[a._hx_index];
+			var params:Array<String> = enm[ctorName].__params__;
+			for (f in params) {
 				if ( !enumEq(a[f],b[f]) ){
 				if ( !enumEq(a[f],b[f]) ){
 					return false;
 					return false;
 				}
 				}
 			}
 			}
 			#end
 			#end
-			var e = a.__enum__;
-			if( e != b.__enum__ || e == null )
-				return false;
-
 		} catch( e : Dynamic ) {
 		} catch( e : Dynamic ) {
 			return false;
 			return false;
 		}
 		}