Index: src/compiler/ast-graph-builder.cc |
diff --git a/src/compiler/ast-graph-builder.cc b/src/compiler/ast-graph-builder.cc |
index 42f713417a1b65c60b86c950062fe19f945ec377..0434cb4def2d95a8457a29e9ef14cb33d9fefccb 100644 |
--- a/src/compiler/ast-graph-builder.cc |
+++ b/src/compiler/ast-graph-builder.cc |
@@ -1696,12 +1696,11 @@ void AstGraphBuilder::VisitClassLiteralContents(ClassLiteral* expr) { |
// Assign to class variable. |
if (expr->class_variable_proxy() != nullptr) { |
Variable* var = expr->class_variable_proxy()->var(); |
- FrameStateBeforeAndAfter states(this, BailoutId::None()); |
VectorSlotPair feedback = CreateVectorSlotPair( |
expr->NeedsProxySlot() ? expr->ProxySlot() |
: FeedbackVectorSlot::Invalid()); |
BuildVariableAssignment(var, literal, Token::INIT, feedback, |
- BailoutId::None(), states); |
+ BailoutId::None()); |
} |
ast_context()->ProduceValue(literal); |
} |
@@ -1736,7 +1735,7 @@ void AstGraphBuilder::VisitConditional(Conditional* expr) { |
void AstGraphBuilder::VisitVariableProxy(VariableProxy* expr) { |
VectorSlotPair pair = CreateVectorSlotPair(expr->VariableFeedbackSlot()); |
FrameStateBeforeAndAfter states(this, BeforeId(expr)); |
- Node* value = BuildVariableLoad(expr->var(), expr->id(), states, pair, |
+ Node* value = BuildVariableLoad(expr->var(), expr->id(), pair, |
ast_context()->GetStateCombine()); |
ast_context()->ProduceValue(value); |
} |
@@ -2034,7 +2033,7 @@ void AstGraphBuilder::VisitForInAssignment(Expression* expr, Node* value, |
FrameStateBeforeAndAfter states(this, bailout_id_before); |
value = environment()->Pop(); |
BuildVariableAssignment(var, value, Token::ASSIGN, feedback, |
- bailout_id_after, states); |
+ bailout_id_after); |
break; |
} |
case NAMED_PROPERTY: { |
@@ -2143,9 +2142,8 @@ void AstGraphBuilder::VisitAssignment(Assignment* expr) { |
VectorSlotPair pair = |
CreateVectorSlotPair(proxy->VariableFeedbackSlot()); |
FrameStateBeforeAndAfter states(this, BeforeId(proxy)); |
- old_value = |
- BuildVariableLoad(proxy->var(), expr->target()->id(), states, pair, |
- OutputFrameStateCombine::Push()); |
+ old_value = BuildVariableLoad(proxy->var(), expr->target()->id(), pair, |
+ OutputFrameStateCombine::Push()); |
break; |
} |
case NAMED_PROPERTY: { |
@@ -2227,7 +2225,7 @@ void AstGraphBuilder::VisitAssignment(Assignment* expr) { |
case VARIABLE: { |
Variable* variable = expr->target()->AsVariableProxy()->var(); |
BuildVariableAssignment(variable, value, expr->op(), feedback, expr->id(), |
- store_states, ast_context()->GetStateCombine()); |
+ ast_context()->GetStateCombine()); |
break; |
} |
case NAMED_PROPERTY: { |
@@ -2355,9 +2353,8 @@ void AstGraphBuilder::VisitCall(Call* expr) { |
VariableProxy* proxy = callee->AsVariableProxy(); |
VectorSlotPair pair = CreateVectorSlotPair(proxy->VariableFeedbackSlot()); |
FrameStateBeforeAndAfter states(this, BeforeId(proxy)); |
- callee_value = |
- BuildVariableLoad(proxy->var(), expr->expression()->id(), states, |
- pair, OutputFrameStateCombine::Push()); |
+ callee_value = BuildVariableLoad(proxy->var(), expr->expression()->id(), |
+ pair, OutputFrameStateCombine::Push()); |
receiver_hint = ConvertReceiverMode::kNullOrUndefined; |
receiver_value = jsgraph()->UndefinedConstant(); |
break; |
@@ -2663,9 +2660,8 @@ void AstGraphBuilder::VisitCountOperation(CountOperation* expr) { |
VariableProxy* proxy = expr->expression()->AsVariableProxy(); |
VectorSlotPair pair = CreateVectorSlotPair(proxy->VariableFeedbackSlot()); |
FrameStateBeforeAndAfter states(this, BeforeId(proxy)); |
- old_value = |
- BuildVariableLoad(proxy->var(), expr->expression()->id(), states, |
- pair, OutputFrameStateCombine::Push()); |
+ old_value = BuildVariableLoad(proxy->var(), expr->expression()->id(), |
+ pair, OutputFrameStateCombine::Push()); |
stack_depth = 0; |
break; |
} |
@@ -2764,7 +2760,7 @@ void AstGraphBuilder::VisitCountOperation(CountOperation* expr) { |
Variable* variable = expr->expression()->AsVariableProxy()->var(); |
environment()->Push(value); |
BuildVariableAssignment(variable, value, expr->op(), feedback, |
- expr->AssignmentId(), store_states); |
+ expr->AssignmentId()); |
environment()->Pop(); |
break; |
} |
@@ -3058,7 +3054,7 @@ void AstGraphBuilder::VisitTypeofExpression(Expression* expr) { |
VectorSlotPair pair = CreateVectorSlotPair(proxy->VariableFeedbackSlot()); |
FrameStateBeforeAndAfter states(this, BeforeId(proxy)); |
Node* load = |
- BuildVariableLoad(proxy->var(), expr->id(), states, pair, |
+ BuildVariableLoad(proxy->var(), expr->id(), pair, |
OutputFrameStateCombine::Push(), INSIDE_TYPEOF); |
environment()->Push(load); |
} else { |
@@ -3277,9 +3273,8 @@ Node* AstGraphBuilder::BuildArgumentsObject(Variable* arguments) { |
// Assign the object to the {arguments} variable. This should never lazy |
// deopt, so it is fine to send invalid bailout id. |
DCHECK(arguments->IsContextSlot() || arguments->IsStackAllocated()); |
- FrameStateBeforeAndAfter states(this, BailoutId::None()); |
BuildVariableAssignment(arguments, object, Token::ASSIGN, VectorSlotPair(), |
- BailoutId::None(), states); |
+ BailoutId::None()); |
return object; |
} |
@@ -3296,9 +3291,8 @@ Node* AstGraphBuilder::BuildRestArgumentsArray(Variable* rest, int index) { |
// Assign the object to the {rest} variable. This should never lazy |
// deopt, so it is fine to send invalid bailout id. |
DCHECK(rest->IsContextSlot() || rest->IsStackAllocated()); |
- FrameStateBeforeAndAfter states(this, BailoutId::None()); |
BuildVariableAssignment(rest, object, Token::ASSIGN, VectorSlotPair(), |
- BailoutId::None(), states); |
+ BailoutId::None()); |
return object; |
} |
@@ -3311,9 +3305,8 @@ Node* AstGraphBuilder::BuildThisFunctionVariable(Variable* this_function_var) { |
// Assign the object to the {.this_function} variable. This should never lazy |
// deopt, so it is fine to send invalid bailout id. |
- FrameStateBeforeAndAfter states(this, BailoutId::None()); |
BuildVariableAssignment(this_function_var, this_function, Token::INIT, |
- VectorSlotPair(), BailoutId::None(), states); |
+ VectorSlotPair(), BailoutId::None()); |
return this_function; |
} |
@@ -3326,9 +3319,8 @@ Node* AstGraphBuilder::BuildNewTargetVariable(Variable* new_target_var) { |
// Assign the object to the {new.target} variable. This should never lazy |
// deopt, so it is fine to send invalid bailout id. |
- FrameStateBeforeAndAfter states(this, BailoutId::None()); |
BuildVariableAssignment(new_target_var, object, Token::INIT, VectorSlotPair(), |
- BailoutId::None(), states); |
+ BailoutId::None()); |
return object; |
} |
@@ -3386,7 +3378,6 @@ Node* AstGraphBuilder::BuildThrowIfStaticPrototype(Node* name, |
Node* AstGraphBuilder::BuildVariableLoad(Variable* variable, |
BailoutId bailout_id, |
- FrameStateBeforeAndAfter& states, |
const VectorSlotPair& feedback, |
OutputFrameStateCombine combine, |
TypeofMode typeof_mode) { |
@@ -3399,7 +3390,7 @@ Node* AstGraphBuilder::BuildVariableLoad(Variable* variable, |
Handle<Name> name = variable->name(); |
if (Node* node = TryLoadGlobalConstant(name)) return node; |
Node* value = BuildGlobalLoad(name, feedback, typeof_mode); |
- states.AddToNode(value, bailout_id, combine); |
+ PrepareFrameState(value, bailout_id, combine); |
return value; |
} |
case VariableLocation::PARAMETER: |
@@ -3435,13 +3426,12 @@ Node* AstGraphBuilder::BuildVariableLoad(Variable* variable, |
case VariableLocation::LOOKUP: { |
// Dynamic lookup of context variable (anywhere in the chain). |
Handle<String> name = variable->name(); |
- if (Node* node = |
- TryLoadDynamicVariable(variable, name, bailout_id, states, |
- feedback, combine, typeof_mode)) { |
+ if (Node* node = TryLoadDynamicVariable(variable, name, bailout_id, |
+ feedback, combine, typeof_mode)) { |
return node; |
} |
Node* value = BuildDynamicLoad(name, typeof_mode); |
- states.AddToNode(value, bailout_id, combine); |
+ PrepareFrameState(value, bailout_id, combine); |
return value; |
} |
} |
@@ -3484,11 +3474,10 @@ Node* AstGraphBuilder::BuildVariableDelete(Variable* variable, |
return nullptr; |
} |
- |
Node* AstGraphBuilder::BuildVariableAssignment( |
Variable* variable, Node* value, Token::Value op, |
const VectorSlotPair& feedback, BailoutId bailout_id, |
- FrameStateBeforeAndAfter& states, OutputFrameStateCombine combine) { |
+ OutputFrameStateCombine combine) { |
Node* the_hole = jsgraph()->TheHoleConstant(); |
VariableMode mode = variable->mode(); |
switch (variable->location()) { |
@@ -3497,7 +3486,7 @@ Node* AstGraphBuilder::BuildVariableAssignment( |
// Global var, const, or let variable. |
Handle<Name> name = variable->name(); |
Node* store = BuildGlobalStore(name, value, feedback); |
- states.AddToNode(store, bailout_id, combine); |
+ PrepareFrameState(store, bailout_id, combine); |
return store; |
} |
case VariableLocation::PARAMETER: |
@@ -3757,11 +3746,11 @@ Node* AstGraphBuilder::BuildSetHomeObject(Node* value, Node* home_object, |
Expression* expr = property->value(); |
if (!FunctionLiteral::NeedsHomeObject(expr)) return value; |
Handle<Name> name = isolate()->factory()->home_object_symbol(); |
- FrameStateBeforeAndAfter states(this, BailoutId::None()); |
VectorSlotPair feedback = |
CreateVectorSlotPair(property->GetSlot(slot_number)); |
Node* store = BuildNamedStore(value, name, home_object, feedback); |
- states.AddToNode(store, BailoutId::None(), OutputFrameStateCombine::Ignore()); |
+ PrepareFrameState(store, BailoutId::None(), |
+ OutputFrameStateCombine::Ignore()); |
return store; |
} |
@@ -3898,11 +3887,12 @@ Node* AstGraphBuilder::TryLoadGlobalConstant(Handle<Name> name) { |
return nullptr; |
} |
- |
-Node* AstGraphBuilder::TryLoadDynamicVariable( |
- Variable* variable, Handle<String> name, BailoutId bailout_id, |
- FrameStateBeforeAndAfter& states, const VectorSlotPair& feedback, |
- OutputFrameStateCombine combine, TypeofMode typeof_mode) { |
+Node* AstGraphBuilder::TryLoadDynamicVariable(Variable* variable, |
+ Handle<String> name, |
+ BailoutId bailout_id, |
+ const VectorSlotPair& feedback, |
+ OutputFrameStateCombine combine, |
+ TypeofMode typeof_mode) { |
VariableMode mode = variable->mode(); |
if (mode == DYNAMIC_GLOBAL) { |
@@ -3935,7 +3925,7 @@ Node* AstGraphBuilder::TryLoadDynamicVariable( |
} else { |
// Perform global slot load. |
Node* fast = BuildGlobalLoad(name, feedback, typeof_mode); |
- states.AddToNode(fast, bailout_id, combine); |
+ PrepareFrameState(fast, bailout_id, combine); |
environment()->Push(fast); |
} |
slow_block.Break(); |
@@ -3944,7 +3934,7 @@ Node* AstGraphBuilder::TryLoadDynamicVariable( |
// Slow case, because variable potentially shadowed. Perform dynamic lookup. |
Node* slow = BuildDynamicLoad(name, typeof_mode); |
- states.AddToNode(slow, bailout_id, combine); |
+ PrepareFrameState(slow, bailout_id, combine); |
environment()->Push(slow); |
slow_block.EndBlock(); |
@@ -3978,8 +3968,8 @@ Node* AstGraphBuilder::TryLoadDynamicVariable( |
// Fast case, because variable is not shadowed. Perform context slot load. |
Variable* local = variable->local_if_not_shadowed(); |
DCHECK(local->location() == VariableLocation::CONTEXT); // Must be context. |
- Node* fast = BuildVariableLoad(local, bailout_id, states, feedback, combine, |
- typeof_mode); |
+ Node* fast = |
+ BuildVariableLoad(local, bailout_id, feedback, combine, typeof_mode); |
environment()->Push(fast); |
slow_block.Break(); |
environment()->Pop(); |
@@ -3987,7 +3977,7 @@ Node* AstGraphBuilder::TryLoadDynamicVariable( |
// Slow case, because variable potentially shadowed. Perform dynamic lookup. |
Node* slow = BuildDynamicLoad(name, typeof_mode); |
- states.AddToNode(slow, bailout_id, combine); |
+ PrepareFrameState(slow, bailout_id, combine); |
environment()->Push(slow); |
slow_block.EndBlock(); |