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

Side by Side Diff: src/builtins/builtins-object-gen.cc

Issue 2953913002: [builtins] Don't adapt arguments for Object.create. (Closed)
Patch Set: Created 3 years, 5 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/builtins/builtins-definitions.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2017 the V8 project authors. All rights reserved. 1 // Copyright 2017 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 #include "src/builtins/builtins-utils-gen.h" 5 #include "src/builtins/builtins-utils-gen.h"
6 #include "src/builtins/builtins.h" 6 #include "src/builtins/builtins.h"
7 #include "src/code-stub-assembler.h" 7 #include "src/code-stub-assembler.h"
8 8
9 namespace v8 { 9 namespace v8 {
10 namespace internal { 10 namespace internal {
(...skipping 392 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 // ES6 #sec-object.prototype.valueof 403 // ES6 #sec-object.prototype.valueof
404 TF_BUILTIN(ObjectPrototypeValueOf, CodeStubAssembler) { 404 TF_BUILTIN(ObjectPrototypeValueOf, CodeStubAssembler) {
405 Node* receiver = Parameter(Descriptor::kReceiver); 405 Node* receiver = Parameter(Descriptor::kReceiver);
406 Node* context = Parameter(Descriptor::kContext); 406 Node* context = Parameter(Descriptor::kContext);
407 407
408 Return(CallBuiltin(Builtins::kToObject, context, receiver)); 408 Return(CallBuiltin(Builtins::kToObject, context, receiver));
409 } 409 }
410 410
411 // ES #sec-object.create 411 // ES #sec-object.create
412 TF_BUILTIN(ObjectCreate, ObjectBuiltinsAssembler) { 412 TF_BUILTIN(ObjectCreate, ObjectBuiltinsAssembler) {
413 Node* prototype = Parameter(Descriptor::kPrototype); 413 int const kPrototypeArg = 0;
414 Node* properties = Parameter(Descriptor::kProperties); 414 int const kPropertiesArg = 1;
415 Node* context = Parameter(Descriptor::kContext); 415
416 Node* argc =
417 ChangeInt32ToIntPtr(Parameter(BuiltinDescriptor::kArgumentsCount));
418 CodeStubArguments args(this, argc);
419
420 Node* prototype = args.GetOptionalArgumentValue(kPrototypeArg);
421 Node* properties = args.GetOptionalArgumentValue(kPropertiesArg);
422 Node* context = Parameter(BuiltinDescriptor::kContext);
416 423
417 Label call_runtime(this, Label::kDeferred), prototype_valid(this), 424 Label call_runtime(this, Label::kDeferred), prototype_valid(this),
418 no_properties(this); 425 no_properties(this);
419 { 426 {
420 Comment("Argument 1 check: prototype"); 427 Comment("Argument 1 check: prototype");
421 GotoIf(WordEqual(prototype, NullConstant()), &prototype_valid); 428 GotoIf(WordEqual(prototype, NullConstant()), &prototype_valid);
422 BranchIfJSReceiver(prototype, &prototype_valid, &call_runtime); 429 BranchIfJSReceiver(prototype, &prototype_valid, &call_runtime);
423 } 430 }
424 431
425 BIND(&prototype_valid); 432 BIND(&prototype_valid);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 Node* weak_cell = 483 Node* weak_cell =
477 LoadObjectField(prototype_info, PrototypeInfo::kObjectCreateMap); 484 LoadObjectField(prototype_info, PrototypeInfo::kObjectCreateMap);
478 GotoIf(WordEqual(weak_cell, UndefinedConstant()), &call_runtime); 485 GotoIf(WordEqual(weak_cell, UndefinedConstant()), &call_runtime);
479 map.Bind(LoadWeakCellValue(weak_cell, &call_runtime)); 486 map.Bind(LoadWeakCellValue(weak_cell, &call_runtime));
480 Goto(&instantiate_map); 487 Goto(&instantiate_map);
481 } 488 }
482 489
483 BIND(&instantiate_map); 490 BIND(&instantiate_map);
484 { 491 {
485 Node* instance = AllocateJSObjectFromMap(map.value(), properties.value()); 492 Node* instance = AllocateJSObjectFromMap(map.value(), properties.value());
486 Return(instance); 493 args.PopAndReturn(instance);
487 } 494 }
488 } 495 }
489 496
490 BIND(&call_runtime); 497 BIND(&call_runtime);
491 { 498 {
492 Return(CallRuntime(Runtime::kObjectCreate, context, prototype, properties)); 499 Node* result =
500 CallRuntime(Runtime::kObjectCreate, context, prototype, properties);
501 args.PopAndReturn(result);
493 } 502 }
494 } 503 }
495 504
496 TF_BUILTIN(CreateIterResultObject, ObjectBuiltinsAssembler) { 505 TF_BUILTIN(CreateIterResultObject, ObjectBuiltinsAssembler) {
497 Node* const value = Parameter(Descriptor::kValue); 506 Node* const value = Parameter(Descriptor::kValue);
498 Node* const done = Parameter(Descriptor::kDone); 507 Node* const done = Parameter(Descriptor::kDone);
499 Node* const context = Parameter(Descriptor::kContext); 508 Node* const context = Parameter(Descriptor::kContext);
500 509
501 Node* const native_context = LoadNativeContext(context); 510 Node* const native_context = LoadNativeContext(context);
502 Node* const map = 511 Node* const map =
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 592
584 BIND(&runtime); 593 BIND(&runtime);
585 { 594 {
586 Return(CallRuntime(Runtime::kCreateJSGeneratorObject, context, closure, 595 Return(CallRuntime(Runtime::kCreateJSGeneratorObject, context, closure,
587 receiver)); 596 receiver));
588 } 597 }
589 } 598 }
590 599
591 } // namespace internal 600 } // namespace internal
592 } // namespace v8 601 } // namespace v8
OLDNEW
« no previous file with comments | « src/builtins/builtins-definitions.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698