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

Side by Side Diff: src/compiler/js-inlining.cc

Issue 2671203003: [turbofan] Mark {JSCreate} as potentially throwing. (Closed)
Patch Set: Created 3 years, 10 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/compiler/js-create-lowering.cc ('k') | src/compiler/js-operator.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 2014 the V8 project authors. All rights reserved. 1 // Copyright 2014 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/compiler/js-inlining.h" 5 #include "src/compiler/js-inlining.h"
6 6
7 #include "src/ast/ast.h" 7 #include "src/ast/ast.h"
8 #include "src/compilation-info.h" 8 #include "src/compilation-info.h"
9 #include "src/compiler.h" 9 #include "src/compiler.h"
10 #include "src/compiler/all-nodes.h" 10 #include "src/compiler/all-nodes.h"
(...skipping 618 matching lines...) Expand 10 before | Expand all | Expand 10 after
629 // Inline {JSConstruct} requires some additional magic. 629 // Inline {JSConstruct} requires some additional magic.
630 if (node->opcode() == IrOpcode::kJSConstruct) { 630 if (node->opcode() == IrOpcode::kJSConstruct) {
631 // Insert nodes around the call that model the behavior required for a 631 // Insert nodes around the call that model the behavior required for a
632 // constructor dispatch (allocate implicit receiver and check return value). 632 // constructor dispatch (allocate implicit receiver and check return value).
633 // This models the behavior usually accomplished by our {JSConstructStub}. 633 // This models the behavior usually accomplished by our {JSConstructStub}.
634 // Note that the context has to be the callers context (input to call node). 634 // Note that the context has to be the callers context (input to call node).
635 Node* receiver = jsgraph()->TheHoleConstant(); // Implicit receiver. 635 Node* receiver = jsgraph()->TheHoleConstant(); // Implicit receiver.
636 if (NeedsImplicitReceiver(shared_info)) { 636 if (NeedsImplicitReceiver(shared_info)) {
637 Node* frame_state_before = NodeProperties::FindFrameStateBefore(node); 637 Node* frame_state_before = NodeProperties::FindFrameStateBefore(node);
638 Node* effect = NodeProperties::GetEffectInput(node); 638 Node* effect = NodeProperties::GetEffectInput(node);
639 Node* control = NodeProperties::GetControlInput(node);
639 Node* context = NodeProperties::GetContextInput(node); 640 Node* context = NodeProperties::GetContextInput(node);
640 Node* create = graph()->NewNode(javascript()->Create(), call.target(), 641 Node* create = graph()->NewNode(javascript()->Create(), call.target(),
641 call.new_target(), context, 642 call.new_target(), context,
642 frame_state_before, effect); 643 frame_state_before, effect, control);
644 Node* success = graph()->NewNode(common()->IfSuccess(), create);
645 uncaught_subcalls.push_back(create); // Adds {IfException}.
646 NodeProperties::ReplaceControlInput(node, success);
643 NodeProperties::ReplaceEffectInput(node, create); 647 NodeProperties::ReplaceEffectInput(node, create);
644 // Insert a check of the return value to determine whether the return 648 // Insert a check of the return value to determine whether the return
645 // value or the implicit receiver should be selected as a result of the 649 // value or the implicit receiver should be selected as a result of the
646 // call. 650 // call.
647 Node* check = graph()->NewNode(simplified()->ObjectIsReceiver(), node); 651 Node* check = graph()->NewNode(simplified()->ObjectIsReceiver(), node);
648 Node* select = 652 Node* select =
649 graph()->NewNode(common()->Select(MachineRepresentation::kTagged), 653 graph()->NewNode(common()->Select(MachineRepresentation::kTagged),
650 check, node, create); 654 check, node, create);
651 NodeProperties::ReplaceUses(node, select, node, node, node); 655 NodeProperties::ReplaceUses(node, select, node, node, node);
652 // Fix-up inputs that have been mangled by the {ReplaceUses} call above. 656 // Fix-up inputs that have been mangled by the {ReplaceUses} call above.
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
722 726
723 CommonOperatorBuilder* JSInliner::common() const { return jsgraph()->common(); } 727 CommonOperatorBuilder* JSInliner::common() const { return jsgraph()->common(); }
724 728
725 SimplifiedOperatorBuilder* JSInliner::simplified() const { 729 SimplifiedOperatorBuilder* JSInliner::simplified() const {
726 return jsgraph()->simplified(); 730 return jsgraph()->simplified();
727 } 731 }
728 732
729 } // namespace compiler 733 } // namespace compiler
730 } // namespace internal 734 } // namespace internal
731 } // namespace v8 735 } // namespace v8
OLDNEW
« no previous file with comments | « src/compiler/js-create-lowering.cc ('k') | src/compiler/js-operator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698