| Index: src/hydrogen-instructions.h
|
| diff --git a/src/hydrogen-instructions.h b/src/hydrogen-instructions.h
|
| index 9bd0b90b4c3b55b0b958cfeb0ee4b59e7dd52a42..adf088d61ce3d72ce0e52634269165cf49bf58cf 100644
|
| --- a/src/hydrogen-instructions.h
|
| +++ b/src/hydrogen-instructions.h
|
| @@ -2289,19 +2289,38 @@ class HCallNamed V8_FINAL : public HUnaryCall {
|
| };
|
|
|
|
|
| +enum CallMode {
|
| + NORMAL_CALL,
|
| + TAIL_CALL
|
| +};
|
| +
|
| +
|
| class HCallFunction V8_FINAL : public HBinaryCall {
|
| public:
|
| DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P2(HCallFunction, HValue*, int);
|
| + DECLARE_INSTRUCTION_WITH_CONTEXT_FACTORY_P3(
|
| + HCallFunction, HValue*, int, CallMode);
|
| +
|
| + bool IsTailCall() const { return call_mode_ == TAIL_CALL; }
|
|
|
| HValue* context() { return first(); }
|
| HValue* function() { return second(); }
|
|
|
| DECLARE_CONCRETE_INSTRUCTION(CallFunction)
|
|
|
| + virtual int argument_delta() const V8_OVERRIDE {
|
| + if (IsTailCall()) return 0;
|
| + return -argument_count();
|
| + }
|
| +
|
| private:
|
| - HCallFunction(HValue* context, HValue* function, int argument_count)
|
| - : HBinaryCall(context, function, argument_count) {
|
| + HCallFunction(HValue* context,
|
| + HValue* function,
|
| + int argument_count,
|
| + CallMode mode = NORMAL_CALL)
|
| + : HBinaryCall(context, function, argument_count), call_mode_(mode) {
|
| }
|
| + CallMode call_mode_;
|
| };
|
|
|
|
|
| @@ -7183,6 +7202,8 @@ class HCheckMapValue V8_FINAL : public HTemplateInstruction<2> {
|
| DECLARE_CONCRETE_INSTRUCTION(CheckMapValue)
|
|
|
| protected:
|
| + virtual int RedefinedOperandIndex() { return 0; }
|
| +
|
| virtual bool DataEquals(HValue* other) V8_OVERRIDE {
|
| return true;
|
| }
|
|
|