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

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

Issue 1165003005: [es6] Array.prototype.find and findIndex should include holes (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 6 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 | « no previous file | test/mjsunit/harmony/array-find.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 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 } 93 }
94 94
95 var needs_wrapper = false; 95 var needs_wrapper = false;
96 if (IS_NULL(thisArg)) { 96 if (IS_NULL(thisArg)) {
97 if (%IsSloppyModeFunction(predicate)) thisArg = UNDEFINED; 97 if (%IsSloppyModeFunction(predicate)) thisArg = UNDEFINED;
98 } else if (!IS_UNDEFINED(thisArg)) { 98 } else if (!IS_UNDEFINED(thisArg)) {
99 needs_wrapper = SHOULD_CREATE_WRAPPER(predicate, thisArg); 99 needs_wrapper = SHOULD_CREATE_WRAPPER(predicate, thisArg);
100 } 100 }
101 101
102 for (var i = 0; i < length; i++) { 102 for (var i = 0; i < length; i++) {
103 if (i in array) { 103 var element = array[i];
104 var element = array[i]; 104 var newThisArg = needs_wrapper ? $toObject(thisArg) : thisArg;
105 var newThisArg = needs_wrapper ? $toObject(thisArg) : thisArg; 105 if (%_CallFunction(newThisArg, element, i, array, predicate)) {
106 if (%_CallFunction(newThisArg, element, i, array, predicate)) { 106 return element;
107 return element;
108 }
109 } 107 }
110 } 108 }
111 109
112 return; 110 return;
113 } 111 }
114 112
115 // ES6 draft 07-15-13, section 15.4.3.23 113 // ES6 draft 07-15-13, section 15.4.3.23
116 function ArrayFind(predicate, thisArg) { 114 function ArrayFind(predicate, thisArg) {
117 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.find"); 115 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.find");
118 116
119 var array = $toObject(this); 117 var array = $toObject(this);
120 var length = $toInteger(array.length); 118 var length = $toInteger(array.length);
121 119
122 return InnerArrayFind(predicate, thisArg, array, length); 120 return InnerArrayFind(predicate, thisArg, array, length);
123 } 121 }
124 122
125 function InnerArrayFindIndex(predicate, thisArg, array, length) { 123 function InnerArrayFindIndex(predicate, thisArg, array, length) {
126 if (!IS_SPEC_FUNCTION(predicate)) { 124 if (!IS_SPEC_FUNCTION(predicate)) {
127 throw MakeTypeError(kCalledNonCallable, predicate); 125 throw MakeTypeError(kCalledNonCallable, predicate);
128 } 126 }
129 127
130 var needs_wrapper = false; 128 var needs_wrapper = false;
131 if (IS_NULL(thisArg)) { 129 if (IS_NULL(thisArg)) {
132 if (%IsSloppyModeFunction(predicate)) thisArg = UNDEFINED; 130 if (%IsSloppyModeFunction(predicate)) thisArg = UNDEFINED;
133 } else if (!IS_UNDEFINED(thisArg)) { 131 } else if (!IS_UNDEFINED(thisArg)) {
134 needs_wrapper = SHOULD_CREATE_WRAPPER(predicate, thisArg); 132 needs_wrapper = SHOULD_CREATE_WRAPPER(predicate, thisArg);
135 } 133 }
136 134
137 for (var i = 0; i < length; i++) { 135 for (var i = 0; i < length; i++) {
138 if (i in array) { 136 var element = array[i];
139 var element = array[i]; 137 var newThisArg = needs_wrapper ? $toObject(thisArg) : thisArg;
140 var newThisArg = needs_wrapper ? $toObject(thisArg) : thisArg; 138 if (%_CallFunction(newThisArg, element, i, array, predicate)) {
141 if (%_CallFunction(newThisArg, element, i, array, predicate)) { 139 return i;
142 return i;
143 }
144 } 140 }
145 } 141 }
146 142
147 return -1; 143 return -1;
148 } 144 }
149 145
150 // ES6 draft 07-15-13, section 15.4.3.24 146 // ES6 draft 07-15-13, section 15.4.3.24
151 function ArrayFindIndex(predicate, thisArg) { 147 function ArrayFindIndex(predicate, thisArg) {
152 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.findIndex"); 148 CHECK_OBJECT_COERCIBLE(this, "Array.prototype.findIndex");
153 149
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
308 304
309 utils.Export(function(to) { 305 utils.Export(function(to) {
310 to.ArrayFrom = ArrayFrom; 306 to.ArrayFrom = ArrayFrom;
311 to.InnerArrayCopyWithin = InnerArrayCopyWithin; 307 to.InnerArrayCopyWithin = InnerArrayCopyWithin;
312 to.InnerArrayFill = InnerArrayFill; 308 to.InnerArrayFill = InnerArrayFill;
313 to.InnerArrayFind = InnerArrayFind; 309 to.InnerArrayFind = InnerArrayFind;
314 to.InnerArrayFindIndex = InnerArrayFindIndex; 310 to.InnerArrayFindIndex = InnerArrayFindIndex;
315 }); 311 });
316 312
317 }) 313 })
OLDNEW
« no previous file with comments | « no previous file | test/mjsunit/harmony/array-find.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698