| Index: src/compiler/js-inlining.cc
|
| diff --git a/src/compiler/js-inlining.cc b/src/compiler/js-inlining.cc
|
| index c199620364b1bd48a7563861c88816c9cadaf5db..622b09543c6758894855a089bb594570b13506ee 100644
|
| --- a/src/compiler/js-inlining.cc
|
| +++ b/src/compiler/js-inlining.cc
|
| @@ -290,6 +290,26 @@ namespace {
|
| // function, which either returns the map set from the CheckMaps or
|
| // a singleton set from a StoreField.
|
| bool NeedsConvertReceiver(Node* receiver, Node* effect) {
|
| + // Check if the {receiver} is already a JSReceiver.
|
| + switch (receiver->opcode()) {
|
| + case IrOpcode::kJSConstruct:
|
| + case IrOpcode::kJSConstructWithSpread:
|
| + case IrOpcode::kJSCreate:
|
| + case IrOpcode::kJSCreateArguments:
|
| + case IrOpcode::kJSCreateArray:
|
| + case IrOpcode::kJSCreateClosure:
|
| + case IrOpcode::kJSCreateIterResultObject:
|
| + case IrOpcode::kJSCreateKeyValueArray:
|
| + case IrOpcode::kJSCreateLiteralArray:
|
| + case IrOpcode::kJSCreateLiteralObject:
|
| + case IrOpcode::kJSCreateLiteralRegExp:
|
| + case IrOpcode::kJSConvertReceiver:
|
| + case IrOpcode::kJSGetSuperConstructor:
|
| + case IrOpcode::kJSToObject:
|
| + return false;
|
| + default:
|
| + break;
|
| + }
|
| for (Node* dominator = effect;;) {
|
| if (dominator->opcode() == IrOpcode::kCheckMaps &&
|
| NodeProperties::IsSame(dominator->InputAt(0), receiver)) {
|
|
|