| Index: src/compiler/ast-graph-builder.cc
|
| diff --git a/src/compiler/ast-graph-builder.cc b/src/compiler/ast-graph-builder.cc
|
| index 50a3720c58e9c333e8ce6bb373b28568711b9988..b97260111ea45ffb0ea1683b4347183bb90be733 100644
|
| --- a/src/compiler/ast-graph-builder.cc
|
| +++ b/src/compiler/ast-graph-builder.cc
|
| @@ -642,11 +642,14 @@ void AstGraphBuilder::VisitForInStatement(ForInStatement* stmt) {
|
| // Convert object to jsobject.
|
| // PrepareForBailoutForId(stmt->PrepareId(), TOS_REG);
|
| obj = NewNode(javascript()->ToObject(), obj);
|
| + PrepareFrameState(obj, stmt->ToObjectId(), OutputFrameStateCombine::Push());
|
| environment()->Push(obj);
|
| // TODO(dcarney): should do a fast enum cache check here to skip runtime.
|
| environment()->Push(obj);
|
| Node* cache_type = ProcessArguments(
|
| javascript()->CallRuntime(Runtime::kGetPropertyNamesFast, 1), 1);
|
| + PrepareFrameState(cache_type, stmt->EnumId(),
|
| + OutputFrameStateCombine::Push());
|
| // TODO(dcarney): these next runtime calls should be removed in favour of
|
| // a few simplified instructions.
|
| environment()->Push(obj);
|
| @@ -882,6 +885,8 @@ void AstGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
|
| const Operator* op =
|
| javascript()->CallRuntime(Runtime::kCreateObjectLiteral, 4);
|
| Node* literal = NewNode(op, literals_array, literal_index, constants, flags);
|
| + PrepareFrameState(literal, expr->CreateLiteralId(),
|
| + OutputFrameStateCombine::Push());
|
|
|
| // The object is expected on the operand stack during computation of the
|
| // property values and is the value of the entire expression.
|
| @@ -943,7 +948,10 @@ void AstGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
|
| if (property->emit_store()) {
|
| const Operator* op =
|
| javascript()->CallRuntime(Runtime::kInternalSetPrototype, 2);
|
| - NewNode(op, receiver, value);
|
| + Node* set_prototype = NewNode(op, receiver, value);
|
| + // SetPrototype should not lazy deopt on an object
|
| + // literal.
|
| + PrepareFrameState(set_prototype, BailoutId::None());
|
| }
|
| break;
|
| }
|
| @@ -970,7 +978,8 @@ void AstGraphBuilder::VisitObjectLiteral(ObjectLiteral* expr) {
|
| const Operator* op =
|
| javascript()->CallRuntime(Runtime::kDefineAccessorPropertyUnchecked, 5);
|
| Node* call = NewNode(op, literal, name, getter, setter, attr);
|
| - PrepareFrameState(call, it->first->id());
|
| + // This should not lazy deopt on a new literal.
|
| + PrepareFrameState(call, BailoutId::None());
|
| }
|
|
|
| // Transform literals that contain functions to fast properties.
|
| @@ -1237,7 +1246,7 @@ void AstGraphBuilder::VisitCall(Call* expr) {
|
| receiver_value = NewNode(common()->Projection(1), pair);
|
|
|
| PrepareFrameState(pair, expr->EvalOrLookupId(),
|
| - OutputFrameStateCombine::Push());
|
| + OutputFrameStateCombine::Push(2));
|
| break;
|
| }
|
| case Call::PROPERTY_CALL: {
|
|
|