| Index: src/v8natives.js
|
| diff --git a/src/v8natives.js b/src/v8natives.js
|
| index cc2e1c5e4dc7193f1dc3fe526a73786a0a97cfd1..24ad22d96d1d530121452d1d83cb7bf21dff8344 100644
|
| --- a/src/v8natives.js
|
| +++ b/src/v8natives.js
|
| @@ -1014,39 +1014,44 @@ function ObjectGetOwnPropertyNames(obj) {
|
| return ToNameArray(names, "getOwnPropertyNames", true);
|
| }
|
|
|
| + var nameArrays = new InternalArray();
|
| +
|
| // Find all the indexed properties.
|
|
|
| // Get the local element names.
|
| - var propertyNames = %GetLocalElementNames(obj);
|
| - for (var i = 0; i < propertyNames.length; ++i) {
|
| - propertyNames[i] = %_NumberToString(propertyNames[i]);
|
| + var localElementNames = %GetLocalElementNames(obj);
|
| + for (var i = 0; i < localElementNames.length; ++i) {
|
| + localElementNames[i] = %_NumberToString(localElementNames[i]);
|
| }
|
| + nameArrays.push(localElementNames);
|
|
|
| // Get names for indexed interceptor properties.
|
| var interceptorInfo = %GetInterceptorInfo(obj);
|
| if ((interceptorInfo & 1) != 0) {
|
| - var indexedInterceptorNames =
|
| - %GetIndexedInterceptorElementNames(obj);
|
| - if (indexedInterceptorNames) {
|
| - propertyNames = propertyNames.concat(indexedInterceptorNames);
|
| + var indexedInterceptorNames = %GetIndexedInterceptorElementNames(obj);
|
| + if (!IS_UNDEFINED(indexedInterceptorNames)) {
|
| + nameArrays.push(indexedInterceptorNames);
|
| }
|
| }
|
|
|
| // Find all the named properties.
|
|
|
| // Get the local property names.
|
| - propertyNames = propertyNames.concat(%GetLocalPropertyNames(obj));
|
| + nameArrays.push(%GetLocalPropertyNames(obj));
|
|
|
| // Get names for named interceptor properties if any.
|
| if ((interceptorInfo & 2) != 0) {
|
| - var namedInterceptorNames =
|
| - %GetNamedInterceptorPropertyNames(obj);
|
| - if (namedInterceptorNames) {
|
| - propertyNames = propertyNames.concat(namedInterceptorNames);
|
| + var namedInterceptorNames = %GetNamedInterceptorPropertyNames(obj);
|
| + if (!IS_UNDEFINED(namedInterceptorNames)) {
|
| + nameArrays.push(namedInterceptorNames);
|
| }
|
| }
|
|
|
| - // Property names are expected to be unique names,
|
| + var propertyNames =
|
| + %Apply(InternalArray.prototype.concat,
|
| + nameArrays[0], nameArrays, 1, nameArrays.length - 1);
|
| +
|
| + // Property names are expected to be unique strings,
|
| // but interceptors can interfere with that assumption.
|
| if (interceptorInfo != 0) {
|
| var propertySet = { __proto__: null };
|
|
|