| Index: src/compiler/common-operator.h
|
| diff --git a/src/compiler/common-operator.h b/src/compiler/common-operator.h
|
| index d39cd3e8a563d7b35a044e0fe1842caef91dc9f5..65528e1d0c756189e03584fd3f6725559533aa79 100644
|
| --- a/src/compiler/common-operator.h
|
| +++ b/src/compiler/common-operator.h
|
| @@ -44,6 +44,28 @@ class CallOperator : public Operator1<CallDescriptor*> {
|
| }
|
| };
|
|
|
| +// Flag that describes how to combine the current environment with
|
| +// the output of a node to obtain a framestate for lazy bailout.
|
| +enum OutputFrameStateCombine {
|
| + kPushOutput, // Push the output on the expression stack.
|
| + kIgnoreOutput // Use the frame state as-is.
|
| +};
|
| +
|
| +
|
| +class FrameStateCallInfo {
|
| + public:
|
| + FrameStateCallInfo(BailoutId bailout_id,
|
| + OutputFrameStateCombine state_combine)
|
| + : bailout_id_(bailout_id), frame_state_combine_(state_combine) {}
|
| +
|
| + BailoutId bailout_id() const { return bailout_id_; }
|
| + OutputFrameStateCombine state_combine() const { return frame_state_combine_; }
|
| +
|
| + private:
|
| + BailoutId bailout_id_;
|
| + OutputFrameStateCombine frame_state_combine_;
|
| +};
|
| +
|
| // Interface for building common operators that can be used at any level of IR,
|
| // including JavaScript, mid-level, and low-level.
|
| // TODO(titzer): Move the mnemonics into SimpleOperator and Operator1 classes.
|
| @@ -67,13 +89,6 @@ class CommonOperatorBuilder {
|
| Operator* IfTrue() { CONTROL_OP(IfTrue, 0, 1); }
|
| Operator* IfFalse() { CONTROL_OP(IfFalse, 0, 1); }
|
| Operator* Throw() { CONTROL_OP(Throw, 1, 1); }
|
| - Operator* LazyDeoptimization() { CONTROL_OP(LazyDeoptimization, 0, 1); }
|
| - Operator* Continuation() { CONTROL_OP(Continuation, 0, 1); }
|
| -
|
| - Operator* Deoptimize() {
|
| - return new (zone_)
|
| - ControlOperator(IrOpcode::kDeoptimize, 0, 1, 0, 1, "Deoptimize");
|
| - }
|
|
|
| Operator* Return() {
|
| return new (zone_) ControlOperator(IrOpcode::kReturn, 0, 1, 0, 1, "Return");
|
| @@ -149,9 +164,10 @@ class CommonOperatorBuilder {
|
| return new (zone_) Operator1<int>(IrOpcode::kStateValues, Operator::kPure,
|
| arguments, 1, "StateValues", arguments);
|
| }
|
| - Operator* FrameState(BailoutId ast_id) {
|
| - return new (zone_) Operator1<BailoutId>(
|
| - IrOpcode::kFrameState, Operator::kPure, 3, 1, "FrameState", ast_id);
|
| + Operator* FrameState(BailoutId bailout_id, OutputFrameStateCombine combine) {
|
| + return new (zone_) Operator1<FrameStateCallInfo>(
|
| + IrOpcode::kFrameState, Operator::kPure, 4, 1, "FrameState",
|
| + FrameStateCallInfo(bailout_id, combine));
|
| }
|
| Operator* Call(CallDescriptor* descriptor) {
|
| return new (zone_) CallOperator(descriptor, "Call");
|
|
|