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

Side by Side Diff: src/harmony-array.js

Issue 1378533002: [es6] Introduce %ToInteger and %ToLength. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 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 unified diff | Download patch
« no previous file with comments | « src/globals.h ('k') | src/harmony-array-includes.js » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 (function(global, utils) { 5 (function(global, utils) {
6 6
7 'use strict'; 7 'use strict';
8 8
9 %CheckIsBootstrapping(); 9 %CheckIsBootstrapping();
10 10
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 } 78 }
79 79
80 return array; 80 return array;
81 } 81 }
82 82
83 // ES6 draft 03-17-15, section 22.1.3.3 83 // ES6 draft 03-17-15, section 22.1.3.3
84 function ArrayCopyWithin(target, start, end) { 84 function ArrayCopyWithin(target, start, end) {
85 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.copyWithin"); 85 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.copyWithin");
86 86
87 var array = TO_OBJECT(this); 87 var array = TO_OBJECT(this);
88 var length = $toLength(array.length); 88 var length = TO_LENGTH(array.length);
89 89
90 return InnerArrayCopyWithin(target, start, end, array, length); 90 return InnerArrayCopyWithin(target, start, end, array, length);
91 } 91 }
92 92
93 function InnerArrayFind(predicate, thisArg, array, length) { 93 function InnerArrayFind(predicate, thisArg, array, length) {
94 if (!IS_CALLABLE(predicate)) { 94 if (!IS_CALLABLE(predicate)) {
95 throw MakeTypeError(kCalledNonCallable, predicate); 95 throw MakeTypeError(kCalledNonCallable, predicate);
96 } 96 }
97 97
98 for (var i = 0; i < length; i++) { 98 for (var i = 0; i < length; i++) {
99 var element = array[i]; 99 var element = array[i];
100 if (%_Call(predicate, thisArg, element, i, array)) { 100 if (%_Call(predicate, thisArg, element, i, array)) {
101 return element; 101 return element;
102 } 102 }
103 } 103 }
104 104
105 return; 105 return;
106 } 106 }
107 107
108 // ES6 draft 07-15-13, section 15.4.3.23 108 // ES6 draft 07-15-13, section 15.4.3.23
109 function ArrayFind(predicate, thisArg) { 109 function ArrayFind(predicate, thisArg) {
110 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.find"); 110 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.find");
111 111
112 var array = TO_OBJECT(this); 112 var array = TO_OBJECT(this);
113 var length = $toInteger(array.length); 113 var length = TO_INTEGER(array.length);
114 114
115 return InnerArrayFind(predicate, thisArg, array, length); 115 return InnerArrayFind(predicate, thisArg, array, length);
116 } 116 }
117 117
118 function InnerArrayFindIndex(predicate, thisArg, array, length) { 118 function InnerArrayFindIndex(predicate, thisArg, array, length) {
119 if (!IS_CALLABLE(predicate)) { 119 if (!IS_CALLABLE(predicate)) {
120 throw MakeTypeError(kCalledNonCallable, predicate); 120 throw MakeTypeError(kCalledNonCallable, predicate);
121 } 121 }
122 122
123 for (var i = 0; i < length; i++) { 123 for (var i = 0; i < length; i++) {
124 var element = array[i]; 124 var element = array[i];
125 if (%_Call(predicate, thisArg, element, i, array)) { 125 if (%_Call(predicate, thisArg, element, i, array)) {
126 return i; 126 return i;
127 } 127 }
128 } 128 }
129 129
130 return -1; 130 return -1;
131 } 131 }
132 132
133 // ES6 draft 07-15-13, section 15.4.3.24 133 // ES6 draft 07-15-13, section 15.4.3.24
134 function ArrayFindIndex(predicate, thisArg) { 134 function ArrayFindIndex(predicate, thisArg) {
135 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.findIndex"); 135 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.findIndex");
136 136
137 var array = TO_OBJECT(this); 137 var array = TO_OBJECT(this);
138 var length = $toInteger(array.length); 138 var length = TO_INTEGER(array.length);
139 139
140 return InnerArrayFindIndex(predicate, thisArg, array, length); 140 return InnerArrayFindIndex(predicate, thisArg, array, length);
141 } 141 }
142 142
143 // ES6, draft 04-05-14, section 22.1.3.6 143 // ES6, draft 04-05-14, section 22.1.3.6
144 function InnerArrayFill(value, start, end, array, length) { 144 function InnerArrayFill(value, start, end, array, length) {
145 var i = IS_UNDEFINED(start) ? 0 : TO_INTEGER(start); 145 var i = IS_UNDEFINED(start) ? 0 : TO_INTEGER(start);
146 var end = IS_UNDEFINED(end) ? length : TO_INTEGER(end); 146 var end = IS_UNDEFINED(end) ? length : TO_INTEGER(end);
147 147
148 if (i < 0) { 148 if (i < 0) {
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 nextValue = next.value; 226 nextValue = next.value;
227 if (mapping) { 227 if (mapping) {
228 mappedValue = %_Call(mapfn, receiver, nextValue, k); 228 mappedValue = %_Call(mapfn, receiver, nextValue, k);
229 } else { 229 } else {
230 mappedValue = nextValue; 230 mappedValue = nextValue;
231 } 231 }
232 AddArrayElement(this, result, k, mappedValue); 232 AddArrayElement(this, result, k, mappedValue);
233 k++; 233 k++;
234 } 234 }
235 } else { 235 } else {
236 var len = $toLength(items.length); 236 var len = TO_LENGTH(items.length);
237 result = %IsConstructor(this) ? new this(len) : new GlobalArray(len); 237 result = %IsConstructor(this) ? new this(len) : new GlobalArray(len);
238 238
239 for (k = 0; k < len; ++k) { 239 for (k = 0; k < len; ++k) {
240 nextValue = items[k]; 240 nextValue = items[k];
241 if (mapping) { 241 if (mapping) {
242 mappedValue = %_Call(mapfn, receiver, nextValue, k); 242 mappedValue = %_Call(mapfn, receiver, nextValue, k);
243 } else { 243 } else {
244 mappedValue = nextValue; 244 mappedValue = nextValue;
245 } 245 }
246 AddArrayElement(this, result, k, mappedValue); 246 AddArrayElement(this, result, k, mappedValue);
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 291
292 utils.Export(function(to) { 292 utils.Export(function(to) {
293 to.ArrayFrom = ArrayFrom; 293 to.ArrayFrom = ArrayFrom;
294 to.InnerArrayCopyWithin = InnerArrayCopyWithin; 294 to.InnerArrayCopyWithin = InnerArrayCopyWithin;
295 to.InnerArrayFill = InnerArrayFill; 295 to.InnerArrayFill = InnerArrayFill;
296 to.InnerArrayFind = InnerArrayFind; 296 to.InnerArrayFind = InnerArrayFind;
297 to.InnerArrayFindIndex = InnerArrayFindIndex; 297 to.InnerArrayFindIndex = InnerArrayFindIndex;
298 }); 298 });
299 299
300 }) 300 })
OLDNEW
« no previous file with comments | « src/globals.h ('k') | src/harmony-array-includes.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698