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

Side by Side Diff: src/collection.js

Issue 1325573004: [runtime] Replace many buggy uses of %_CallFunction with %_Call. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Address feedback. Created 5 years, 3 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/array.js ('k') | src/compiler/linkage.cc » ('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 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 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 var $getHash; 5 var $getHash;
6 var $getExistingHash; 6 var $getExistingHash;
7 7
8 (function(global, utils) { 8 (function(global, utils) {
9 "use strict"; 9 "use strict";
10 10
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 132
133 %_SetInitialize(this); 133 %_SetInitialize(this);
134 134
135 if (!IS_NULL_OR_UNDEFINED(iterable)) { 135 if (!IS_NULL_OR_UNDEFINED(iterable)) {
136 var adder = this.add; 136 var adder = this.add;
137 if (!IS_CALLABLE(adder)) { 137 if (!IS_CALLABLE(adder)) {
138 throw MakeTypeError(kPropertyNotFunction, 'add', this); 138 throw MakeTypeError(kPropertyNotFunction, 'add', this);
139 } 139 }
140 140
141 for (var value of iterable) { 141 for (var value of iterable) {
142 %_CallFunction(this, value, adder); 142 %_Call(adder, this, value);
143 } 143 }
144 } 144 }
145 } 145 }
146 146
147 147
148 function SetAdd(key) { 148 function SetAdd(key) {
149 if (!IS_SET(this)) { 149 if (!IS_SET(this)) {
150 throw MakeTypeError(kIncompatibleMethodReceiver, 'Set.prototype.add', this); 150 throw MakeTypeError(kIncompatibleMethodReceiver, 'Set.prototype.add', this);
151 } 151 }
152 // Normalize -0 to +0 as required by the spec. 152 // Normalize -0 to +0 as required by the spec.
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 } 239 }
240 240
241 241
242 function SetForEach(f, receiver) { 242 function SetForEach(f, receiver) {
243 if (!IS_SET(this)) { 243 if (!IS_SET(this)) {
244 throw MakeTypeError(kIncompatibleMethodReceiver, 244 throw MakeTypeError(kIncompatibleMethodReceiver,
245 'Set.prototype.forEach', this); 245 'Set.prototype.forEach', this);
246 } 246 }
247 247
248 if (!IS_CALLABLE(f)) throw MakeTypeError(kCalledNonCallable, f); 248 if (!IS_CALLABLE(f)) throw MakeTypeError(kCalledNonCallable, f);
249 var needs_wrapper = false;
250 if (IS_NULL(receiver)) {
251 if (%IsSloppyModeFunction(f)) receiver = UNDEFINED;
252 } else if (!IS_UNDEFINED(receiver)) {
253 needs_wrapper = SHOULD_CREATE_WRAPPER(f, receiver);
254 }
255 249
256 var iterator = new SetIterator(this, ITERATOR_KIND_VALUES); 250 var iterator = new SetIterator(this, ITERATOR_KIND_VALUES);
257 var key; 251 var key;
258 var stepping = DEBUG_IS_ACTIVE && %DebugCallbackSupportsStepping(f); 252 var stepping = DEBUG_IS_ACTIVE && %DebugCallbackSupportsStepping(f);
259 var value_array = [UNDEFINED]; 253 var value_array = [UNDEFINED];
260 while (%SetIteratorNext(iterator, value_array)) { 254 while (%SetIteratorNext(iterator, value_array)) {
261 if (stepping) %DebugPrepareStepInIfStepping(f); 255 if (stepping) %DebugPrepareStepInIfStepping(f);
262 key = value_array[0]; 256 key = value_array[0];
263 var new_receiver = needs_wrapper ? TO_OBJECT(receiver) : receiver; 257 %_Call(f, receiver, key, key, this);
264 %_CallFunction(new_receiver, key, key, this, f);
265 } 258 }
266 } 259 }
267 260
268 // ------------------------------------------------------------------- 261 // -------------------------------------------------------------------
269 262
270 %SetCode(GlobalSet, SetConstructor); 263 %SetCode(GlobalSet, SetConstructor);
271 %FunctionSetLength(GlobalSet, 0); 264 %FunctionSetLength(GlobalSet, 0);
272 %FunctionSetPrototype(GlobalSet, new GlobalObject()); 265 %FunctionSetPrototype(GlobalSet, new GlobalObject());
273 %AddNamedProperty(GlobalSet.prototype, "constructor", GlobalSet, DONT_ENUM); 266 %AddNamedProperty(GlobalSet.prototype, "constructor", GlobalSet, DONT_ENUM);
274 %AddNamedProperty(GlobalSet.prototype, toStringTagSymbol, "Set", 267 %AddNamedProperty(GlobalSet.prototype, toStringTagSymbol, "Set",
(...skipping 25 matching lines...) Expand all
300 if (!IS_NULL_OR_UNDEFINED(iterable)) { 293 if (!IS_NULL_OR_UNDEFINED(iterable)) {
301 var adder = this.set; 294 var adder = this.set;
302 if (!IS_CALLABLE(adder)) { 295 if (!IS_CALLABLE(adder)) {
303 throw MakeTypeError(kPropertyNotFunction, 'set', this); 296 throw MakeTypeError(kPropertyNotFunction, 'set', this);
304 } 297 }
305 298
306 for (var nextItem of iterable) { 299 for (var nextItem of iterable) {
307 if (!IS_SPEC_OBJECT(nextItem)) { 300 if (!IS_SPEC_OBJECT(nextItem)) {
308 throw MakeTypeError(kIteratorValueNotAnObject, nextItem); 301 throw MakeTypeError(kIteratorValueNotAnObject, nextItem);
309 } 302 }
310 %_CallFunction(this, nextItem[0], nextItem[1], adder); 303 %_Call(adder, this, nextItem[0], nextItem[1]);
311 } 304 }
312 } 305 }
313 } 306 }
314 307
315 308
316 function MapGet(key) { 309 function MapGet(key) {
317 if (!IS_MAP(this)) { 310 if (!IS_MAP(this)) {
318 throw MakeTypeError(kIncompatibleMethodReceiver, 311 throw MakeTypeError(kIncompatibleMethodReceiver,
319 'Map.prototype.get', this); 312 'Map.prototype.get', this);
320 } 313 }
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 } 423 }
431 424
432 425
433 function MapForEach(f, receiver) { 426 function MapForEach(f, receiver) {
434 if (!IS_MAP(this)) { 427 if (!IS_MAP(this)) {
435 throw MakeTypeError(kIncompatibleMethodReceiver, 428 throw MakeTypeError(kIncompatibleMethodReceiver,
436 'Map.prototype.forEach', this); 429 'Map.prototype.forEach', this);
437 } 430 }
438 431
439 if (!IS_CALLABLE(f)) throw MakeTypeError(kCalledNonCallable, f); 432 if (!IS_CALLABLE(f)) throw MakeTypeError(kCalledNonCallable, f);
440 var needs_wrapper = false;
441 if (IS_NULL(receiver)) {
442 if (%IsSloppyModeFunction(f)) receiver = UNDEFINED;
443 } else if (!IS_UNDEFINED(receiver)) {
444 needs_wrapper = SHOULD_CREATE_WRAPPER(f, receiver);
445 }
446 433
447 var iterator = new MapIterator(this, ITERATOR_KIND_ENTRIES); 434 var iterator = new MapIterator(this, ITERATOR_KIND_ENTRIES);
448 var stepping = DEBUG_IS_ACTIVE && %DebugCallbackSupportsStepping(f); 435 var stepping = DEBUG_IS_ACTIVE && %DebugCallbackSupportsStepping(f);
449 var value_array = [UNDEFINED, UNDEFINED]; 436 var value_array = [UNDEFINED, UNDEFINED];
450 while (%MapIteratorNext(iterator, value_array)) { 437 while (%MapIteratorNext(iterator, value_array)) {
451 if (stepping) %DebugPrepareStepInIfStepping(f); 438 if (stepping) %DebugPrepareStepInIfStepping(f);
452 var new_receiver = needs_wrapper ? TO_OBJECT(receiver) : receiver; 439 %_Call(f, receiver, value_array[1], value_array[0], this);
453 %_CallFunction(new_receiver, value_array[1], value_array[0], this, f);
454 } 440 }
455 } 441 }
456 442
457 // ------------------------------------------------------------------- 443 // -------------------------------------------------------------------
458 444
459 %SetCode(GlobalMap, MapConstructor); 445 %SetCode(GlobalMap, MapConstructor);
460 %FunctionSetLength(GlobalMap, 0); 446 %FunctionSetLength(GlobalMap, 0);
461 %FunctionSetPrototype(GlobalMap, new GlobalObject()); 447 %FunctionSetPrototype(GlobalMap, new GlobalObject());
462 %AddNamedProperty(GlobalMap.prototype, "constructor", GlobalMap, DONT_ENUM); 448 %AddNamedProperty(GlobalMap.prototype, "constructor", GlobalMap, DONT_ENUM);
463 %AddNamedProperty( 449 %AddNamedProperty(
(...skipping 15 matching lines...) Expand all
479 // Expose to the global scope. 465 // Expose to the global scope.
480 $getHash = GetHash; 466 $getHash = GetHash;
481 $getExistingHash = GetExistingHash; 467 $getExistingHash = GetExistingHash;
482 468
483 function MapFromArray(array) { 469 function MapFromArray(array) {
484 var map = new GlobalMap; 470 var map = new GlobalMap;
485 var length = array.length; 471 var length = array.length;
486 for (var i = 0; i < length; i += 2) { 472 for (var i = 0; i < length; i += 2) {
487 var key = array[i]; 473 var key = array[i];
488 var value = array[i + 1]; 474 var value = array[i + 1];
489 %_CallFunction(map, key, value, MapSet); 475 %_Call(MapSet, map, key, value);
490 } 476 }
491 return map; 477 return map;
492 }; 478 };
493 479
494 function SetFromArray(array) { 480 function SetFromArray(array) {
495 var set = new GlobalSet; 481 var set = new GlobalSet;
496 var length = array.length; 482 var length = array.length;
497 for (var i = 0; i < length; ++i) { 483 for (var i = 0; i < length; ++i) {
498 %_CallFunction(set, array[i], SetAdd); 484 %_Call(SetAdd, set, array[i]);
499 } 485 }
500 return set; 486 return set;
501 }; 487 };
502 488
503 // ----------------------------------------------------------------------- 489 // -----------------------------------------------------------------------
504 // Exports 490 // Exports
505 491
506 %InstallToContext([ 492 %InstallToContext([
507 "map_get", MapGet, 493 "map_get", MapGet,
508 "map_set", MapSet, 494 "map_set", MapSet,
509 "map_has", MapHas, 495 "map_has", MapHas,
510 "map_delete", MapDelete, 496 "map_delete", MapDelete,
511 "set_add", SetAdd, 497 "set_add", SetAdd,
512 "set_has", SetHas, 498 "set_has", SetHas,
513 "set_delete", SetDelete, 499 "set_delete", SetDelete,
514 "map_from_array", MapFromArray, 500 "map_from_array", MapFromArray,
515 "set_from_array",SetFromArray, 501 "set_from_array",SetFromArray,
516 ]); 502 ]);
517 503
518 }) 504 })
OLDNEW
« no previous file with comments | « src/array.js ('k') | src/compiler/linkage.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698