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

Unified Diff: src/array.js

Issue 7990: Implement Array::concat function in C++.... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 12 years, 2 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
« no previous file with comments | « no previous file | src/factory.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/array.js
===================================================================
--- src/array.js (revision 611)
+++ src/array.js (working copy)
@@ -373,48 +373,15 @@
function ArrayConcat(arg1) { // length == 1
- var arg_number = 0, arg_count = %_ArgumentsLength();
- var n = 0;
-
- var A = $Array(1 + arg_count);
- var E = this;
-
- while (true) {
- if (IS_ARRAY(E)) {
- // This is an array of intervals or an array of keys. Keys are
- // represented by non-negative integers. Intervals are represented by
- // negative integers, followed by positive counts. The interval start
- // is determined by subtracting the entry from -1. There may also be
- // undefined entries in the array which should be skipped.
- var intervals = %GetArrayKeys(E, E.length);
- var length = intervals.length;
- for (var k = 0; k < length; k++) {
- var key = intervals[k];
- if (key < 0) {
- var j = -1 - key;
- var limit = j + intervals[++k];
- for (; j < limit; j++) {
- if (j in E) {
- A[n + j] = E[j];
- }
- }
- } else {
- // The case where key is undefined also ends here.
- if (!IS_UNDEFINED(key)) {
- A[n + key] = E[key];
- }
- }
- }
- n += E.length;
- } else {
- A[n++] = E;
- }
- if (arg_number == arg_count) break;
- E = %_Arguments(arg_number++);
+ // TODO: can we just use arguments?
+ var arg_count = %_ArgumentsLength();
+ var arrays = new $Array(1 + arg_count);
+ arrays[0] = this;
+ for (var i = 0; i < arg_count; i++) {
+ arrays[i + 1] = %_Arguments(i);
}
- A.length = n; // may contain empty arrays
- return A;
+ return %ArrayConcat(arrays);
}
« no previous file with comments | « no previous file | src/factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698