Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Unified Diff: src/v8natives.js

Issue 12342003: Use InternalArray in Object.getOwnPropertyNames() implementation (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Reworked concat usage Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/v8natives.js
diff --git a/src/v8natives.js b/src/v8natives.js
index 9a8e4e37d81729858228ba62d25eff84ad1635e6..0c3d7cb1d526bdf9e9645464e5b2a397d737bc13 100644
--- a/src/v8natives.js
+++ b/src/v8natives.js
@@ -1014,38 +1014,45 @@ function ObjectGetOwnPropertyNames(obj) {
return ToStringArray(names, "getOwnPropertyNames");
}
+ 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);
}
}
+ var propertyNames = %Apply(InternalArray.prototype.concat,
+ new InternalArray(),
+ nameArrays,
+ 0,
+ nameArrays.length);
+
// Property names are expected to be unique strings,
// but interceptors can interfere with that assumption.
if (interceptorInfo != 0) {
@@ -1065,7 +1072,9 @@ function ObjectGetOwnPropertyNames(obj) {
propertyNames.length = j;
}
- return propertyNames;
+ var result = new $Array();
+ %MoveArrayContents(propertyNames, result);
Michael Starzinger 2013/03/12 12:09:06 This call to MoveArrayContents has become obsolete
adamk 2013/03/12 18:25:19 Done.
+ return result;
}
« src/array.js ('K') | « src/array.js ('k') | test/mjsunit/object-get-own-property-names.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698