| Index: src/hydrogen.cc
|
| diff --git a/src/hydrogen.cc b/src/hydrogen.cc
|
| index 800f7c50a4103f15933ffe4db889ef6c682587cf..d6b8d64db67893b77badd7795c404ee9362531e8 100644
|
| --- a/src/hydrogen.cc
|
| +++ b/src/hydrogen.cc
|
| @@ -4911,8 +4911,8 @@ void HOptimizedGraphBuilder::HandlePropertyAssignment(Assignment* expr) {
|
| Add<HDeoptimize>("Insufficient type feedback for property assignment",
|
| Deoptimizer::SOFT);
|
| }
|
| - return BuildStoreNamed(expr, expr->id(), expr->position(),
|
| - expr->AssignmentId(), prop, object, value);
|
| + return BuildStoreNamed(
|
| + expr, expr->id(), expr->AssignmentId(), prop, object, value);
|
| } else {
|
| // Keyed store.
|
| CHECK_ALIVE(VisitForValue(prop->key()));
|
| @@ -4980,7 +4980,6 @@ void HOptimizedGraphBuilder::HandleGlobalVariableAssignment(
|
|
|
| void HOptimizedGraphBuilder::BuildStoreNamed(Expression* expr,
|
| BailoutId id,
|
| - int position,
|
| BailoutId assignment_id,
|
| Property* prop,
|
| HValue* object,
|
| @@ -5020,14 +5019,14 @@ void HOptimizedGraphBuilder::BuildStoreNamed(Expression* expr,
|
| } else if (types != NULL && types->length() > 1) {
|
| Drop(2);
|
| return HandlePolymorphicStoreNamedField(
|
| - position, id, object, value, types, name);
|
| + expr->position(), id, object, value, types, name);
|
| } else {
|
| Drop(2);
|
| instr = BuildStoreNamedGeneric(object, name, value);
|
| }
|
|
|
| if (!ast_context()->IsEffect()) Push(value);
|
| - instr->set_position(position);
|
| + instr->set_position(expr->position());
|
| AddInstruction(instr);
|
| if (instr->HasObservableSideEffects()) {
|
| Add<HSimulate>(id, REMOVABLE_SIMULATE);
|
| @@ -5122,7 +5121,7 @@ void HOptimizedGraphBuilder::HandleCompoundAssignment(Assignment* expr) {
|
| // Named property.
|
| CHECK_ALIVE(VisitForValue(prop->obj()));
|
| HValue* object = Top();
|
| - PushLoad(prop, object, expr->position());
|
| + CHECK_ALIVE(PushLoad(prop, object, expr->position()));
|
|
|
| CHECK_ALIVE(VisitForValue(expr->value()));
|
| HValue* right = Pop();
|
| @@ -5134,8 +5133,8 @@ void HOptimizedGraphBuilder::HandleCompoundAssignment(Assignment* expr) {
|
| Add<HSimulate>(operation->id(), REMOVABLE_SIMULATE);
|
| }
|
|
|
| - return BuildStoreNamed(expr, expr->id(), expr->position(),
|
| - expr->AssignmentId(), prop, object, instr);
|
| + return BuildStoreNamed(
|
| + expr, expr->id(), expr->AssignmentId(), prop, object, instr);
|
| } else {
|
| // Keyed property.
|
| CHECK_ALIVE(VisitForValue(prop->obj()));
|
| @@ -7475,6 +7474,19 @@ HInstruction* HOptimizedGraphBuilder::BuildIncrement(
|
| }
|
|
|
|
|
| +void HOptimizedGraphBuilder::BuildStoreInEffect(Expression* expr,
|
| + Property* prop,
|
| + BailoutId ast_id,
|
| + BailoutId return_id,
|
| + HValue* object,
|
| + HValue* value) {
|
| + EffectContext for_effect(this);
|
| + Push(object);
|
| + Push(value);
|
| + BuildStoreNamed(expr, ast_id, return_id, prop, object, value);
|
| +}
|
| +
|
| +
|
| void HOptimizedGraphBuilder::VisitCountOperation(CountOperation* expr) {
|
| ASSERT(!HasStackOverflow());
|
| ASSERT(current_block() != NULL);
|
| @@ -7561,7 +7573,7 @@ void HOptimizedGraphBuilder::VisitCountOperation(CountOperation* expr) {
|
|
|
| CHECK_ALIVE(VisitForValue(prop->obj()));
|
| HValue* object = Top();
|
| - PushLoad(prop, object, expr->position());
|
| + CHECK_ALIVE(PushLoad(prop, object, expr->position()));
|
|
|
| after = BuildIncrement(returns_original_input, expr);
|
|
|
| @@ -7569,18 +7581,13 @@ void HOptimizedGraphBuilder::VisitCountOperation(CountOperation* expr) {
|
| HValue* result = Pop();
|
| HValue* object = Pop();
|
| environment()->SetExpressionStackAt(0, result);
|
| - {
|
| - EffectContext for_effect(this);
|
| - Push(object);
|
| - Push(after);
|
| - BuildStoreNamed(expr, expr->id(), expr->position(),
|
| - expr->AssignmentId(), prop, object, after);
|
| - }
|
| + CHECK_ALIVE(BuildStoreInEffect(
|
| + expr, prop, expr->id(), expr->AssignmentId(), object, after));
|
| return ast_context()->ReturnValue(Pop());
|
| }
|
|
|
| - return BuildStoreNamed(expr, expr->id(), expr->position(),
|
| - expr->AssignmentId(), prop, object, after);
|
| + return BuildStoreNamed(
|
| + expr, expr->id(), expr->AssignmentId(), prop, object, after);
|
| } else {
|
| // Keyed property.
|
| if (returns_original_input) Push(graph()->GetConstantUndefined());
|
|
|