You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by gr...@apache.org on 2019/01/08 08:12:25 UTC
[royale-asjs] 01/02: Avoid an undefined reference error in
javascript (excludeObject)
This is an automated email from the ASF dual-hosted git repository.
gregdove pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
commit 6c5565d2aa5b9dc24700c269a1b95547463d3d7d
Author: greg-dove <gr...@gmail.com>
AuthorDate: Tue Jan 8 20:14:56 2019 +1300
Avoid an undefined reference error in javascript (excludeObject)
---
.../src/main/royale/mx/utils/ObjectUtil.as | 357 +++++++++++----------
1 file changed, 179 insertions(+), 178 deletions(-)
diff --git a/frameworks/projects/MXRoyale/src/main/royale/mx/utils/ObjectUtil.as b/frameworks/projects/MXRoyale/src/main/royale/mx/utils/ObjectUtil.as
index 4c4dc96..39ea4bd 100644
--- a/frameworks/projects/MXRoyale/src/main/royale/mx/utils/ObjectUtil.as
+++ b/frameworks/projects/MXRoyale/src/main/royale/mx/utils/ObjectUtil.as
@@ -44,19 +44,19 @@ import org.apache.royale.reflection.getQualifiedClassName;
* The ObjectUtil class is an all-static class with methods for
* working with Objects within Flex.
* You do not create instances of ObjectUtil;
- * instead you simply call static methods such as the
+ * instead you simply call static methods such as the
* <code>ObjectUtil.isSimple()</code> method.
- *
+ *
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
public class ObjectUtil
-{
+{
/**
* Array of properties to exclude from debugging output.
- *
+ *
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
@@ -71,7 +71,7 @@ public class ObjectUtil
//--------------------------------------------------------------------------
/**
- * Compares the Objects and returns an integer value
+ * Compares the Objects and returns an integer value
* indicating if the first item is less than, greater than, or equal to
* the second item.
* This method will recursively compare properties on nested objects and
@@ -84,25 +84,25 @@ public class ObjectUtil
*
* @param b Object.
*
- * @param depth Indicates how many levels should be
+ * @param depth Indicates how many levels should be
* recursed when performing the comparison.
- * Set this value to 0 for a shallow comparison of only the primitive
+ * Set this value to 0 for a shallow comparison of only the primitive
* representation of each property.
* For example:<pre>
* var a:Object = {name:"Bob", info:[1,2,3]};
* var b:Object = {name:"Alice", info:[5,6,7]};
* var c:int = ObjectUtil.compare(a, b, 0);</pre>
*
- * <p>In the above example the complex properties of <code>a</code> and
+ * <p>In the above example the complex properties of <code>a</code> and
* <code>b</code> will be flattened by a call to <code>toString()</code>
* when doing the comparison.
* In this case the <code>info</code> property will be turned into a string
* when performing the comparison.</p>
*
* @return Return 0 if a and b are equal, or both null or NaN.
- * Return 1 if a is null or greater than b.
- * Return -1 if b is null or greater than a.
- *
+ * Return 1 if a is null or greater than b.
+ * Return -1 if b is null or greater than a.
+ *
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
@@ -114,27 +114,27 @@ public class ObjectUtil
return 0;
//return internalCompare(a, b, 0, depth, new Dictionary(true));
}
-
+
/**
* Copies the specified Object and returns a reference to the copy.
- * The copy is made using a native serialization technique.
+ * The copy is made using a native serialization technique.
* This means that custom serialization will be respected during the copy.
*
- * <p>This method is designed for copying data objects,
- * such as elements of a collection. It is not intended for copying
- * a UIComponent object, such as a TextInput control. If you want to create copies
- * of specific UIComponent objects, you can create a subclass of the component and implement
+ * <p>This method is designed for copying data objects,
+ * such as elements of a collection. It is not intended for copying
+ * a UIComponent object, such as a TextInput control. If you want to create copies
+ * of specific UIComponent objects, you can create a subclass of the component and implement
* a <code>clone()</code> method, or other method to perform the copy.</p>
- *
+ *
* @param value Object that should be copied.
- *
+ *
* @return Copy of the specified Object.
- *
+ *
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
- */
+ */
public static function copy(value:Object):Object
{
trace("copy not implemented");
@@ -148,26 +148,26 @@ public class ObjectUtil
/**
* Clones the specified Object and returns a reference to the clone.
- * The clone is made using a native serialization technique.
+ * The clone is made using a native serialization technique.
* This means that custom serialization will be respected during the
* cloning. clone() differs from copy() in that the uid property of
* each object instance is retained.
*
- * <p>This method is designed for cloning data objects,
- * such as elements of a collection. It is not intended for cloning
+ * <p>This method is designed for cloning data objects,
+ * such as elements of a collection. It is not intended for cloning
* a UIComponent object, such as a TextInput control. If you want to clone
* specific UIComponent objects, you can create a subclass of the component
* and implement a <code>clone()</code> method.</p>
- *
+ *
* @param value Object that should be cloned.
- *
+ *
* @return Clone of the specified Object.
- *
+ *
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 4
- */
+ */
public static function clone(value:Object):Object
{
trace("clone not implemented");
@@ -178,9 +178,9 @@ public class ObjectUtil
}
/**
- * Recursive helper used by the public clone method.
+ * Recursive helper used by the public clone method.
* @private
- */
+ */
private static function cloneInternal(result:Object, value:Object):void
{
trace("cloneInternal not implemented");
@@ -189,14 +189,14 @@ public class ObjectUtil
//
// var classInfo:Object = getClassInfo(value);
// var v:Object;
-// for each (var p:* in classInfo.properties)
+// for each (var p:* in classInfo.properties)
// {
// v = value[p];
-// if (v && v.hasOwnProperty("uid"))
+// if (v && v.hasOwnProperty("uid"))
// cloneInternal(result[p], v);
// }
}
-
+
/**
* Returns <code>true</code> if the object reference specified
* is a simple data type. The simple data types include the following:
@@ -214,7 +214,7 @@ public class ObjectUtil
*
* @return <code>true</code> if the object specified
* is one of the types above; <code>false</code> otherwise.
- *
+ *
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
@@ -243,17 +243,17 @@ public class ObjectUtil
/**
* Compares two numeric values.
- *
+ *
* @param a First number.
- *
+ *
* @param b Second number.
*
- * @return 0 is both numbers are NaN.
+ * @return 0 is both numbers are NaN.
* 1 if only <code>a</code> is a NaN.
* -1 if only <code>b</code> is a NaN.
* -1 if <code>a</code> is less than <code>b</code>.
* 1 if <code>a</code> is greater than <code>b</code>.
- *
+ *
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
@@ -281,20 +281,20 @@ public class ObjectUtil
/**
* Compares two String values.
- *
+ *
* @param a First String value.
- *
+ *
* @param b Second String value.
*
- * @param caseInsensitive Specifies to perform a case insensitive compare,
+ * @param caseInsensitive Specifies to perform a case insensitive compare,
* <code>true</code>, or not, <code>false</code>.
*
- * @return 0 is both Strings are null.
+ * @return 0 is both Strings are null.
* 1 if only <code>a</code> is null.
* -1 if only <code>b</code> is null.
* -1 if <code>a</code> precedes <code>b</code>.
* 1 if <code>b</code> precedes <code>a</code>.
- *
+ *
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
@@ -320,7 +320,7 @@ public class ObjectUtil
}
var result:int = a.localeCompare(b);
-
+
if (result < -1)
result = -1;
else if (result > 1)
@@ -330,8 +330,8 @@ public class ObjectUtil
}
/**
- * Compares the two Date objects and returns an integer value
- * indicating if the first Date object is before, equal to,
+ * Compares the two Date objects and returns an integer value
+ * indicating if the first Date object is before, equal to,
* or after the second item.
*
* @param a Date object.
@@ -346,8 +346,8 @@ public class ObjectUtil
* (or <code>a</code> is <code>null</code>);
* 0 is both dates getTime's are NaN;
* 1 if only <code>a</code> getTime is a NaN;
- * -1 if only <code>b</code> getTime is a NaN.
- *
+ * -1 if only <code>b</code> getTime is a NaN.
+ *
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
@@ -366,25 +366,25 @@ public class ObjectUtil
var na:Number = a.getTime();
var nb:Number = b.getTime();
-
+
if (na < nb)
return -1;
if (na > nb)
return 1;
-
+
if (isNaN(na) && isNaN(nb))
return 0;
-
+
if (isNaN(na))
return 1;
-
+
if (isNaN(nb))
return -1;
return 0;
}
-
+
/**
* Pretty-prints the specified Object into a String.
* All properties will be in alpha ordering.
@@ -404,27 +404,27 @@ public class ObjectUtil
* public class MyCustomClass {
* public var clazz:Class;
* }</pre>
- *
+ *
* <p>With the <code>clazz</code> property assigned to <code>Date</code>
* will display as shown below:</p>
- *
+ *
* <pre>
* (somepackage::MyCustomClass)#0
* clazz = (Date)</pre>
*
* @param value Object to be pretty printed.
- *
- * @param namespaceURIs Array of namespace URIs for properties
+ *
+ * @param namespaceURIs Array of namespace URIs for properties
* that should be included in the output.
* By default only properties in the public namespace will be included in
* the output.
- * To get all properties regardless of namespace pass an array with a
+ * To get all properties regardless of namespace pass an array with a
* single element of "*".
- *
- * @param exclude Array of the property names that should be
+ *
+ * @param exclude Array of the property names that should be
* excluded from the output.
* Use this to remove data from the formatted string.
- *
+ *
* @return String containing the formatted version
* of the specified object.
*
@@ -523,7 +523,7 @@ public class ObjectUtil
* deeper2 = (Object)#6
* deeperStill = (Object)#7
* yetDeeper = (Object)#0
- *
+ *
* // example 3 with Dictionary
* var point:Point = new Point(100, 100);
* var point2:Point = new Point(100, 100);
@@ -534,7 +534,7 @@ public class ObjectUtil
* obj["two"] = { name: "2", num: 2};
* obj[3] = 3;
* trace(ObjectUtil.toString(obj));
- *
+ *
* // will output to flashlog.txt
* (flash.utils::Dictionary)#0
* {(flash.geom::Point)#1
@@ -552,40 +552,40 @@ public class ObjectUtil
* {"two"} = (Object)#4
* name = "2"
* num = 2
- *
+ *
* </pre>
- *
+ *
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
- public static function toString(value:Object,
- namespaceURIs:Array = null,
+ public static function toString(value:Object,
+ namespaceURIs:Array = null,
exclude:Array = null):String
{
if (exclude == null)
{
exclude = defaultToStringExcludes;
}
-
+
refCount = 0;
return internalToString(value, 0, null, namespaceURIs, exclude);
}
-
+
/**
* This method cleans up all of the additional parameters that show up in AsDoc
* code hinting tools that developers shouldn't ever see.
* @private
*/
- private static function internalToString(value:Object,
+ private static function internalToString(value:Object,
indent:int = 0,
refs:Object = null,
- namespaceURIs:Array = null,
+ namespaceURIs:Array = null,
exclude:Array = null):String
{
trace("internalToString not implemented");
-
+
return "(unknown)";
}
@@ -598,38 +598,38 @@ public class ObjectUtil
{
var result:String = str;
result += "\n";
-
+
for (var i:int = 0; i < n; i++)
{
result += " ";
}
return result;
}
-
+
private static function internalCompare(a:Object, b:Object,
currentDepth:int, desiredDepth:int,
/*refs:Dictionary*/ refs:Object):int
{
if (a == null && b == null)
return 0;
-
+
if (a == null)
return 1;
-
+
if (b == null)
return -1;
-
+
// if (a is ObjectProxy)
// a = ObjectProxy(a).object_proxy::object;
-//
+//
// if (b is ObjectProxy)
// b = ObjectProxy(b).object_proxy::object;
-
+
var typeOfA:String = typeof(a);
var typeOfB:String = typeof(b);
-
+
var result:int = 0;
-
+
if (typeOfA == typeOfB)
{
switch(typeOfA)
@@ -637,39 +637,39 @@ public class ObjectUtil
case "boolean":
result = numericCompare(Number(a), Number(b));
break;
-
+
case "number":
result = numericCompare(a as Number, b as Number);
break;
-
+
case "string":
result = stringCompare(a as String, b as String);
break;
-
+
case "object":
var newDepth:int = desiredDepth > 0 ? desiredDepth -1 : desiredDepth;
-
+
// refs help us avoid circular reference infinite recursion.
var aRef:Object = getRef(a,refs);
var bRef:Object = getRef(b,refs);
-
+
if (aRef == bRef)
return 0;
- // the cool thing about our dictionary is that if
+ // the cool thing about our dictionary is that if
// we've seen objects and determined that they are unequal, then
- // we would've already exited out of this compare() call. So the
+ // we would've already exited out of this compare() call. So the
// only info in the dictionary are sets of equal items
-
+
// let's first define them as equal
// this stops an "infinite loop" problem where A.i = B and B.i = A
- // if we later find that an object (one of the subobjects) is in fact unequal,
+ // if we later find that an object (one of the subobjects) is in fact unequal,
// then we will return false and quit out of everything. These refs are thrown away
// so it doesn't matter if it's correct.
refs[bRef] = aRef;
-
+
if (desiredDepth != -1 && (currentDepth > desiredDepth))
{
- // once we try to go beyond the desired depth we should
+ // once we try to go beyond the desired depth we should
// toString() our way out
result = stringCompare(a.toString(), b.toString());
}
@@ -691,7 +691,7 @@ public class ObjectUtil
return 1;
}
break;
-
+
default:
break;
}
@@ -703,7 +703,7 @@ public class ObjectUtil
return result;
}
-
+
/**
* Returns information about the class, and properties of the class, for
* the specified Object.
@@ -711,28 +711,28 @@ public class ObjectUtil
* @param obj The Object to inspect.
*
* @param excludes Array of Strings specifying the property names that should be
- * excluded from the returned result. For example, you could specify
- * <code>["currentTarget", "target"]</code> for an Event object since these properties
+ * excluded from the returned result. For example, you could specify
+ * <code>["currentTarget", "target"]</code> for an Event object since these properties
* can cause the returned result to become large.
*
- * @param options An Object containing one or more properties
- * that control the information returned by this method.
+ * @param options An Object containing one or more properties
+ * that control the information returned by this method.
* The properties include the following:
*
* <ul>
- * <li><code>includeReadOnly</code>: If <code>false</code>,
- * exclude Object properties that are read-only.
+ * <li><code>includeReadOnly</code>: If <code>false</code>,
+ * exclude Object properties that are read-only.
* The default value is <code>true</code>.</li>
- * <li><code>includeTransient</code>: If <code>false</code>,
+ * <li><code>includeTransient</code>: If <code>false</code>,
* exclude Object properties and variables that have <code>[Transient]</code> metadata.
* The default value is <code>true</code>.</li>
* <li><code>uris</code>: Array of Strings of all namespaces that should be included in the output.
- * It does allow for a wildcard of "~~".
- * By default, it is null, meaning no namespaces should be included.
- * For example, you could specify <code>["mx_internal", "mx_object"]</code>
+ * It does allow for a wildcard of "~~".
+ * By default, it is null, meaning no namespaces should be included.
+ * For example, you could specify <code>["mx_internal", "mx_object"]</code>
* or <code>["~~"]</code>.</li>
* </ul>
- *
+ *
* @return An Object containing the following properties:
* <ul>
* <li><code>name</code>: String containing the name of the class.</li>
@@ -740,7 +740,7 @@ public class ObjectUtil
* or references to the original key if the specified object is a Dictionary. The individual
* array elements are QName instances, which contain both the local name of the property as well as the URI.</li>
* </ul>
- *
+ *
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
@@ -749,29 +749,29 @@ public class ObjectUtil
public static function getClassInfo(obj:Object,
excludes:Array = null,
options:Object = null):Object
- {
+ {
COMPILE::SWF
{
var n:int;
var i:int;
-
+
//if (obj is ObjectProxy)
// obj = ObjectProxy(obj).object_proxy::object;
-
+
if (options == null)
options = { includeReadOnly: true, uris: null, includeTransient: true };
-
+
var result:Object;
var propertyNames:Array = [];
var cacheKey:String;
-
+
var className:String;
var classAlias:String;
var properties:XMLList;
var prop:XML;
var isDynamic:Boolean = false;
var metadataInfo:Object;
-
+
if (typeof(obj) == "xml")
{
className = "XML";
@@ -786,15 +786,15 @@ public class ObjectUtil
className = classInfo.@name.toString();
classAlias = classInfo.@alias.toString();
isDynamic = classInfo.@isDynamic.toString() == "true";
-
+
if (options.includeReadOnly)
properties = classInfo..accessor.(@access != "writeonly") + classInfo..variable;
else
properties = classInfo..accessor.(@access == "readwrite") + classInfo..variable;
-
+
var numericIndex:Boolean = false;
}
-
+
// If type is not dynamic, check our cache for class info...
if (!isDynamic)
{
@@ -803,14 +803,14 @@ public class ObjectUtil
if (result != null)
return result;
}
-
+
result = {};
result["name"] = className;
result["alias"] = classAlias;
result["properties"] = propertyNames;
result["dynamic"] = isDynamic;
// result["metadata"] = metadataInfo = recordMetadata(properties);
-
+
var excludeObject:Object = {};
if (excludes)
{
@@ -820,10 +820,10 @@ public class ObjectUtil
excludeObject[excludes[i]] = 1;
}
}
-
+
var isArray:Boolean = (obj is Array);
/*var isDict:Boolean = (obj is Dictionary);
-
+
if (isDict)
{
// dictionaries can have multiple keys of the same type,
@@ -856,7 +856,7 @@ public class ObjectUtil
}
numericIndex = isArray && !isNaN(Number(p));
}
-
+
if (isArray /*|| isDict */|| className == "Object")
{
// Do nothing since we've already got the dynamic members
@@ -882,17 +882,17 @@ public class ObjectUtil
prop = properties[i];
p = prop.@name.toString();
uri = prop.@uri.toString();
-
+
if (excludeObject[p] == 1)
continue;
-
+
//if (!options.includeTransient && internalHasMetadata(metadataInfo, p, "Transient"))
// continue;
-
+
if (uris != null)
{
if (uris.length == 1 && uris[0] == "*")
- {
+ {
qName = new QName(uri, p);
try
{
@@ -901,7 +901,7 @@ public class ObjectUtil
}
catch(e:Error)
{
- // don't keep property name
+ // don't keep property name
}
}
else
@@ -919,7 +919,7 @@ public class ObjectUtil
}
catch(e:Error)
{
- // don't keep property name
+ // don't keep property name
}
}
}
@@ -935,14 +935,14 @@ public class ObjectUtil
}
catch(e:Error)
{
- // don't keep property name
+ // don't keep property name
}
}
}
}
-
+
propertyNames.sort(Array.CASEINSENSITIVE | (numericIndex ? Array.NUMERIC : 0));
-
+
// dictionary keys can be indexed by an object reference
// there's a possibility that two keys will have the same toString()
// so we don't want to remove duplicates
@@ -961,7 +961,7 @@ public class ObjectUtil
}
}
//}
-
+
// For normal, non-dynamic classes we cache the class info
// Don't cache XML as it can be dynamic
if (!isDynamic && className != "XML")
@@ -969,29 +969,39 @@ public class ObjectUtil
cacheKey = getCacheKey(obj, excludes, options);
CLASS_INFO_CACHE[cacheKey] = result;
}
-
+
return result;
}
COMPILE::JS
{
var n:int;
var i:int;
-
+
//if (obj is ObjectProxy)
// obj = ObjectProxy(obj).object_proxy::object;
-
+
if (options == null)
options = { includeReadOnly: true, uris: null, includeTransient: true };
-
+
var result:Object;
var propertyNames:Array = [];
var cacheKey:String;
-
+
var className:String;
var classAlias:String;
var isDynamic:Boolean = false;
var metadataInfo:Object;
-
+
+ var excludeObject:Object = {};
+ if (excludes)
+ {
+ n = excludes.length;
+ for (i = 0; i < n; i++)
+ {
+ excludeObject[excludes[i]] = 1;
+ }
+ }
+
if (obj is XML)
{
className = "XML";
@@ -1021,7 +1031,7 @@ public class ObjectUtil
className = classInfo.qualifiedName;
//classAlias = classInfo.@alias.toString();
//isDynamic = classInfo.@isDynamic.toString() == "true";
-
+
var accessors:Array = classInfo.accessors;
for each (var accessor:AccessorDefinition in accessors)
{
@@ -1035,7 +1045,7 @@ public class ObjectUtil
else
{
if (accessor.access != "readwrite")
- propertyNames.push(accessor.name);
+ propertyNames.push(accessor.name);
}
}
var variables:Array = classInfo.variables;
@@ -1045,11 +1055,11 @@ public class ObjectUtil
continue;
propertyNames.push(variable.name);
}
-
+
var numericIndex:Boolean = false;
}
}
-
+
// If type is not dynamic, check our cache for class info...
if (!isDynamic)
{
@@ -1058,24 +1068,15 @@ public class ObjectUtil
if (result != null)
return result;
}
-
+
result = {};
result["name"] = className;
result["alias"] = classAlias;
result["properties"] = propertyNames;
result["dynamic"] = isDynamic;
// result["metadata"] = metadataInfo = recordMetadata(properties);
-
- var excludeObject:Object = {};
- if (excludes)
- {
- n = excludes.length;
- for (i = 0; i < n; i++)
- {
- excludeObject[excludes[i]] = 1;
- }
- }
-
+
+
var isArray:Boolean = (obj is Array);
if (isDynamic)
{
@@ -1099,9 +1100,9 @@ public class ObjectUtil
}
numericIndex = isArray && !isNaN(Number(p));
}
-
+
propertyNames.sort(Array.CASEINSENSITIVE | (numericIndex ? Array.NUMERIC : 0));
-
+
// for Arrays, etc., on the other hand...
// remove any duplicates, i.e. any items that can't be distingushed by toString()
for (i = 0; i < propertyNames.length - 1; i++)
@@ -1114,7 +1115,7 @@ public class ObjectUtil
i--; // back up
}
}
-
+
// For normal, non-dynamic classes we cache the class info
// Don't cache XML as it can be dynamic
if (!isDynamic && className != "XML")
@@ -1122,31 +1123,31 @@ public class ObjectUtil
cacheKey = getCacheKey(obj, excludes, options);
CLASS_INFO_CACHE[cacheKey] = result;
}
-
- return result;
+
+ return result;
}
}
/**
* Uses <code>getClassInfo</code> and examines the metadata information to
- * determine whether a property on a given object has the specified
+ * determine whether a property on a given object has the specified
* metadata.
- *
+ *
* @param obj The object holding the property.
* @param propName The property to check for metadata.
* @param metadataName The name of the metadata to check on the property.
* @param excludes If any properties need to be excluded when generating class info. (Optional)
* @param options If any options flags need to changed when generating class info. (Optional)
* @return true if the property has the specified metadata.
- *
+ *
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
* @productversion Flex 3
*/
- public static function hasMetadata(obj:Object,
- propName:String,
- metadataName:String,
+ public static function hasMetadata(obj:Object,
+ propName:String,
+ metadataName:String,
excludes:Array = null,
options:Object = null):Boolean
{
@@ -1163,7 +1164,7 @@ public class ObjectUtil
* @param object The object.
*
* @return <code>true</code> if the object is an instance of a dynamic class.
- *
+ *
* @langversion 3.0
* @playerversion Flash 9
* @playerversion AIR 1.1
@@ -1173,8 +1174,8 @@ public class ObjectUtil
{
try
{
- // this test for checking whether an object is dynamic or not is
- // pretty hacky, but it assumes that no-one actually has a
+ // this test for checking whether an object is dynamic or not is
+ // pretty hacky, but it assumes that no-one actually has a
// property defined called "wootHackwoot"
var o:* = object["wootHackwoot"];
}
@@ -1357,7 +1358,7 @@ public class ObjectUtil
private static function getCacheKey(o:Object, excludes:Array = null, options:Object = null):String
{
var key:String = getQualifiedClassName(o);
-
+
if (excludes != null)
{
var length:int = excludes.length;
@@ -1368,7 +1369,7 @@ public class ObjectUtil
key += excl;
}
}
-
+
if (options != null)
{
for (var flag:String in options)
@@ -1428,17 +1429,17 @@ public class ObjectUtil
return result;
}
-
+
/**
* @private
*/
// private static function byteArrayCompare(a:ByteArray, b:ByteArray):int
// {
// var result:int = 0;
-//
+//
// if (a == b)
// return result;
-//
+//
// if (a.length != b.length)
// {
// if (a.length < b.length)
@@ -1463,7 +1464,7 @@ public class ObjectUtil
/**
* @private
*/
- private static function listCompare(a:IList, b:IList, currentDepth:int,
+ private static function listCompare(a:IList, b:IList, currentDepth:int,
desiredDepth:int, /*refs:Dictionary*/ refs:Object):int
{
var result:int = 0;
@@ -1479,7 +1480,7 @@ public class ObjectUtil
{
for (var i:int = 0; i < a.length; i++)
{
- result = internalCompare(a.getItemAt(i), b.getItemAt(i),
+ result = internalCompare(a.getItemAt(i), b.getItemAt(i),
currentDepth+1, desiredDepth, refs);
if (result != 0)
{
@@ -1490,7 +1491,7 @@ public class ObjectUtil
return result;
}
-
+
/**
* @private
* This is the "find" for our union-find algorithm when doing object searches.
@@ -1498,7 +1499,7 @@ public class ObjectUtil
*/
private static function getRef(o:Object, /*refs:Dictionary*/ refs:Object):Object
{
- var oRef:Object = refs[o];
+ var oRef:Object = refs[o];
while (oRef && oRef != refs[oRef])
{
oRef = refs[oRef];
@@ -1507,10 +1508,10 @@ public class ObjectUtil
oRef = o;
if (oRef != refs[o])
refs[o] = oRef;
-
+
return oRef;
}
-
+
/**
* @private
*/
@@ -1518,7 +1519,7 @@ public class ObjectUtil
/**
* @private
- */
+ */
private static var CLASS_INFO_CACHE:Object = {};
}