Chromium Code Reviews| Index: src/harmony-array.js |
| diff --git a/src/harmony-array.js b/src/harmony-array.js |
| index 88b878f0a76ef594f64f7905d61459c05749724b..c4b69c75817710b1884d88be6deab1bc44606cc5 100644 |
| --- a/src/harmony-array.js |
| +++ b/src/harmony-array.js |
| @@ -27,15 +27,15 @@ function ArrayFind(predicate /* thisArg */) { // length == 1 |
| } |
| if (IS_NULL_OR_UNDEFINED(thisArg)) { |
| - thisArg = %GetDefaultReceiver(predicate) || thisArg; |
| - } else if (!IS_SPEC_OBJECT(thisArg) && %IsSloppyModeFunction(predicate)) { |
| - thisArg = ToObject(thisArg); |
| + thisArg = %GetDefaultthisArg(predicate) || thisArg; |
|
wingo
2014/09/30 16:01:36
Typo. Did these tests pass for you? :)
|
| } |
| + var needs_wrapper = SHOULD_CREATE_WRAPPER(predicate, thisArg); |
|
wingo
2014/09/30 16:01:36
Here we are adding a test; SHOULD_CREATE_WRAPPER l
|
| for (var i = 0; i < length; i++) { |
| if (i in array) { |
| var element = array[i]; |
| - if (%_CallFunction(thisArg, element, i, array, predicate)) { |
| + var newThisArg = needs_wrapper ? ToObject(thisArg) : thisArg; |
| + if (%_CallFunction(newThisArg, element, i, array, predicate)) { |
| return element; |
| } |
| } |
| @@ -62,15 +62,15 @@ function ArrayFindIndex(predicate /* thisArg */) { // length == 1 |
| } |
| if (IS_NULL_OR_UNDEFINED(thisArg)) { |
| - thisArg = %GetDefaultReceiver(predicate) || thisArg; |
| - } else if (!IS_SPEC_OBJECT(thisArg) && %IsSloppyModeFunction(predicate)) { |
| - thisArg = ToObject(thisArg); |
| + thisArg = %GetDefaultthisArg(predicate) || thisArg; |
| } |
| + var needs_wrapper = SHOULD_CREATE_WRAPPER(predicate, thisArg); |
|
wingo
2014/09/30 16:01:36
same here and in similar places in the patch
|
| for (var i = 0; i < length; i++) { |
| if (i in array) { |
| var element = array[i]; |
| - if (%_CallFunction(thisArg, element, i, array, predicate)) { |
| + var newThisArg = needs_wrapper ? ToObject(thisArg) : thisArg; |
| + if (%_CallFunction(newThisArg, element, i, array, predicate)) { |
| return i; |
| } |
| } |