| Index: src/ia32/lithium-ia32.h
 | 
| diff --git a/src/ia32/lithium-ia32.h b/src/ia32/lithium-ia32.h
 | 
| index 7ae87a08c8dd72c377475eb2d50332f18699b90b..f35c7776b21d64eb6135f7cff1a498bd0b56a2b5 100644
 | 
| --- a/src/ia32/lithium-ia32.h
 | 
| +++ b/src/ia32/lithium-ia32.h
 | 
| @@ -188,13 +188,17 @@ class LCodeGen;
 | 
|    V(WrapReceiver)
 | 
|  
 | 
|  
 | 
| -#define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic)              \
 | 
| -  virtual Opcode opcode() const { return LInstruction::k##type; } \
 | 
| -  virtual void CompileToNative(LCodeGen* generator);              \
 | 
| -  virtual const char* Mnemonic() const { return mnemonic; }       \
 | 
| -  static L##type* cast(LInstruction* instr) {                     \
 | 
| -    ASSERT(instr->Is##type());                                    \
 | 
| -    return reinterpret_cast<L##type*>(instr);                     \
 | 
| +#define DECLARE_CONCRETE_INSTRUCTION(type, mnemonic)                        \
 | 
| +  virtual Opcode opcode() const V8_FINAL V8_OVERRIDE {                      \
 | 
| +    return LInstruction::k##type;                                           \
 | 
| +  }                                                                         \
 | 
| +  virtual void CompileToNative(LCodeGen* generator) V8_FINAL V8_OVERRIDE;   \
 | 
| +  virtual const char* Mnemonic() const V8_FINAL V8_OVERRIDE {               \
 | 
| +    return mnemonic;                                                        \
 | 
| +  }                                                                         \
 | 
| +  static L##type* cast(LInstruction* instr) {                               \
 | 
| +    ASSERT(instr->Is##type());                                              \
 | 
| +    return reinterpret_cast<L##type*>(instr);                               \
 | 
|    }
 | 
|  
 | 
|  
 | 
| @@ -204,7 +208,7 @@ class LCodeGen;
 | 
|    }
 | 
|  
 | 
|  
 | 
| -class LInstruction: public ZoneObject {
 | 
| +class LInstruction : public ZoneObject {
 | 
|   public:
 | 
|    LInstruction()
 | 
|        : environment_(NULL),
 | 
| @@ -213,7 +217,7 @@ class LInstruction: public ZoneObject {
 | 
|      set_position(RelocInfo::kNoPosition);
 | 
|    }
 | 
|  
 | 
| -  virtual ~LInstruction() { }
 | 
| +  virtual ~LInstruction() {}
 | 
|  
 | 
|    virtual void CompileToNative(LCodeGen* generator) = 0;
 | 
|    virtual const char* Mnemonic() const = 0;
 | 
| @@ -319,11 +323,13 @@ class LInstruction: public ZoneObject {
 | 
|  // I = number of input operands.
 | 
|  // T = number of temporary operands.
 | 
|  template<int R, int I, int T>
 | 
| -class LTemplateInstruction: public LInstruction {
 | 
| +class LTemplateInstruction : public LInstruction {
 | 
|   public:
 | 
|    // Allow 0 or 1 output operands.
 | 
|    STATIC_ASSERT(R == 0 || R == 1);
 | 
| -  virtual bool HasResult() const { return R != 0 && result() != NULL; }
 | 
| +  virtual bool HasResult() const V8_FINAL V8_OVERRIDE {
 | 
| +    return R != 0 && result() != NULL;
 | 
| +  }
 | 
|    void set_result(LOperand* operand) { results_[0] = operand; }
 | 
|    LOperand* result() const { return results_[0]; }
 | 
|  
 | 
| @@ -334,15 +340,15 @@ class LTemplateInstruction: public LInstruction {
 | 
|  
 | 
|   private:
 | 
|    // Iterator support.
 | 
| -  virtual int InputCount() { return I; }
 | 
| -  virtual LOperand* InputAt(int i) { return inputs_[i]; }
 | 
| +  virtual int InputCount() V8_FINAL V8_OVERRIDE { return I; }
 | 
| +  virtual LOperand* InputAt(int i) V8_FINAL V8_OVERRIDE { return inputs_[i]; }
 | 
|  
 | 
| -  virtual int TempCount() { return T; }
 | 
| -  virtual LOperand* TempAt(int i) { return temps_[i]; }
 | 
| +  virtual int TempCount() V8_FINAL V8_OVERRIDE { return T; }
 | 
| +  virtual LOperand* TempAt(int i) V8_FINAL V8_OVERRIDE { return temps_[i]; }
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LGap: public LTemplateInstruction<0, 0, 0> {
 | 
| +class LGap : public LTemplateInstruction<0, 0, 0> {
 | 
|   public:
 | 
|    explicit LGap(HBasicBlock* block) : block_(block) {
 | 
|      parallel_moves_[BEFORE] = NULL;
 | 
| @@ -352,8 +358,8 @@ class LGap: public LTemplateInstruction<0, 0, 0> {
 | 
|    }
 | 
|  
 | 
|    // Can't use the DECLARE-macro here because of sub-classes.
 | 
| -  virtual bool IsGap() const { return true; }
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual bool IsGap() const V8_FINAL V8_OVERRIDE { return true; }
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|    static LGap* cast(LInstruction* instr) {
 | 
|      ASSERT(instr->IsGap());
 | 
|      return reinterpret_cast<LGap*>(instr);
 | 
| @@ -389,11 +395,11 @@ class LGap: public LTemplateInstruction<0, 0, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LInstructionGap: public LGap {
 | 
| +class LInstructionGap V8_FINAL : public LGap {
 | 
|   public:
 | 
|    explicit LInstructionGap(HBasicBlock* block) : LGap(block) { }
 | 
|  
 | 
| -  virtual bool HasInterestingComment(LCodeGen* gen) const {
 | 
| +  virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE {
 | 
|      return !IsRedundant();
 | 
|    }
 | 
|  
 | 
| @@ -401,14 +407,14 @@ class LInstructionGap: public LGap {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LGoto: public LTemplateInstruction<0, 0, 0> {
 | 
| +class LGoto V8_FINAL : public LTemplateInstruction<0, 0, 0> {
 | 
|   public:
 | 
|    explicit LGoto(int block_id) : block_id_(block_id) { }
 | 
|  
 | 
| -  virtual bool HasInterestingComment(LCodeGen* gen) const;
 | 
| +  virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE;
 | 
|    DECLARE_CONCRETE_INSTRUCTION(Goto, "goto")
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| -  virtual bool IsControl() const { return true; }
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
| +  virtual bool IsControl() const V8_OVERRIDE { return true; }
 | 
|  
 | 
|    int block_id() const { return block_id_; }
 | 
|  
 | 
| @@ -417,13 +423,13 @@ class LGoto: public LTemplateInstruction<0, 0, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LLazyBailout: public LTemplateInstruction<0, 0, 0> {
 | 
| +class LLazyBailout V8_FINAL : public LTemplateInstruction<0, 0, 0> {
 | 
|   public:
 | 
|    DECLARE_CONCRETE_INSTRUCTION(LazyBailout, "lazy-bailout")
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LDummyUse: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LDummyUse V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LDummyUse(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -432,22 +438,24 @@ class LDummyUse: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LDeoptimize: public LTemplateInstruction<0, 0, 0> {
 | 
| +class LDeoptimize V8_FINAL : public LTemplateInstruction<0, 0, 0> {
 | 
|   public:
 | 
|    DECLARE_CONCRETE_INSTRUCTION(Deoptimize, "deoptimize")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(Deoptimize)
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LLabel: public LGap {
 | 
| +class LLabel V8_FINAL : public LGap {
 | 
|   public:
 | 
|    explicit LLabel(HBasicBlock* block)
 | 
|        : LGap(block), replacement_(NULL) { }
 | 
|  
 | 
| -  virtual bool HasInterestingComment(LCodeGen* gen) const { return false; }
 | 
| +  virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE {
 | 
| +    return false;
 | 
| +  }
 | 
|    DECLARE_CONCRETE_INSTRUCTION(Label, "label")
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  
 | 
|    int block_id() const { return block()->block_id(); }
 | 
|    bool is_loop_header() const { return block()->IsLoopHeader(); }
 | 
| @@ -463,14 +471,16 @@ class LLabel: public LGap {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LParameter: public LTemplateInstruction<1, 0, 0> {
 | 
| +class LParameter V8_FINAL : public LTemplateInstruction<1, 0, 0> {
 | 
|   public:
 | 
| -  virtual bool HasInterestingComment(LCodeGen* gen) const { return false; }
 | 
| +  virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE {
 | 
| +    return false;
 | 
| +  }
 | 
|    DECLARE_CONCRETE_INSTRUCTION(Parameter, "parameter")
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LCallStub: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LCallStub V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LCallStub(LOperand* context) {
 | 
|      inputs_[0] = context;
 | 
| @@ -487,9 +497,11 @@ class LCallStub: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LUnknownOSRValue: public LTemplateInstruction<1, 0, 0> {
 | 
| +class LUnknownOSRValue V8_FINAL : public LTemplateInstruction<1, 0, 0> {
 | 
|   public:
 | 
| -  virtual bool HasInterestingComment(LCodeGen* gen) const { return false; }
 | 
| +  virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE {
 | 
| +    return false;
 | 
| +  }
 | 
|    DECLARE_CONCRETE_INSTRUCTION(UnknownOSRValue, "unknown-osr-value")
 | 
|  };
 | 
|  
 | 
| @@ -499,7 +511,7 @@ class LControlInstruction: public LTemplateInstruction<0, I, T> {
 | 
|   public:
 | 
|    LControlInstruction() : false_label_(NULL), true_label_(NULL) { }
 | 
|  
 | 
| -  virtual bool IsControl() const { return true; }
 | 
| +  virtual bool IsControl() const V8_FINAL V8_OVERRIDE { return true; }
 | 
|  
 | 
|    int SuccessorCount() { return hydrogen()->SuccessorCount(); }
 | 
|    HBasicBlock* SuccessorAt(int i) { return hydrogen()->SuccessorAt(i); }
 | 
| @@ -538,7 +550,7 @@ class LControlInstruction: public LTemplateInstruction<0, I, T> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LWrapReceiver: public LTemplateInstruction<1, 2, 1> {
 | 
| +class LWrapReceiver V8_FINAL : public LTemplateInstruction<1, 2, 1> {
 | 
|   public:
 | 
|    LWrapReceiver(LOperand* receiver,
 | 
|                  LOperand* function,
 | 
| @@ -556,7 +568,7 @@ class LWrapReceiver: public LTemplateInstruction<1, 2, 1> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LApplyArguments: public LTemplateInstruction<1, 4, 0> {
 | 
| +class LApplyArguments V8_FINAL : public LTemplateInstruction<1, 4, 0> {
 | 
|   public:
 | 
|    LApplyArguments(LOperand* function,
 | 
|                    LOperand* receiver,
 | 
| @@ -577,7 +589,7 @@ class LApplyArguments: public LTemplateInstruction<1, 4, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LAccessArgumentsAt: public LTemplateInstruction<1, 3, 0> {
 | 
| +class LAccessArgumentsAt V8_FINAL : public LTemplateInstruction<1, 3, 0> {
 | 
|   public:
 | 
|    LAccessArgumentsAt(LOperand* arguments, LOperand* length, LOperand* index) {
 | 
|      inputs_[0] = arguments;
 | 
| @@ -591,11 +603,11 @@ class LAccessArgumentsAt: public LTemplateInstruction<1, 3, 0> {
 | 
|  
 | 
|    DECLARE_CONCRETE_INSTRUCTION(AccessArgumentsAt, "access-arguments-at")
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LArgumentsLength: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LArgumentsLength V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LArgumentsLength(LOperand* elements) {
 | 
|      inputs_[0] = elements;
 | 
| @@ -607,20 +619,20 @@ class LArgumentsLength: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LArgumentsElements: public LTemplateInstruction<1, 0, 0> {
 | 
| +class LArgumentsElements V8_FINAL : public LTemplateInstruction<1, 0, 0> {
 | 
|   public:
 | 
|    DECLARE_CONCRETE_INSTRUCTION(ArgumentsElements, "arguments-elements")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(ArgumentsElements)
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LDebugBreak: public LTemplateInstruction<0, 0, 0> {
 | 
| +class LDebugBreak V8_FINAL : public LTemplateInstruction<0, 0, 0> {
 | 
|   public:
 | 
|    DECLARE_CONCRETE_INSTRUCTION(DebugBreak, "break")
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LModI: public LTemplateInstruction<1, 2, 1> {
 | 
| +class LModI V8_FINAL : public LTemplateInstruction<1, 2, 1> {
 | 
|   public:
 | 
|    LModI(LOperand* left, LOperand* right, LOperand* temp) {
 | 
|      inputs_[0] = left;
 | 
| @@ -637,7 +649,7 @@ class LModI: public LTemplateInstruction<1, 2, 1> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LDivI: public LTemplateInstruction<1, 2, 1> {
 | 
| +class LDivI V8_FINAL : public LTemplateInstruction<1, 2, 1> {
 | 
|   public:
 | 
|    LDivI(LOperand* left, LOperand* right, LOperand* temp) {
 | 
|      inputs_[0] = left;
 | 
| @@ -655,7 +667,7 @@ class LDivI: public LTemplateInstruction<1, 2, 1> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LMathFloorOfDiv: public LTemplateInstruction<1, 2, 1> {
 | 
| +class LMathFloorOfDiv V8_FINAL : public LTemplateInstruction<1, 2, 1> {
 | 
|   public:
 | 
|    LMathFloorOfDiv(LOperand* left,
 | 
|                    LOperand* right,
 | 
| @@ -674,7 +686,7 @@ class LMathFloorOfDiv: public LTemplateInstruction<1, 2, 1> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LMulI: public LTemplateInstruction<1, 2, 1> {
 | 
| +class LMulI V8_FINAL : public LTemplateInstruction<1, 2, 1> {
 | 
|   public:
 | 
|    LMulI(LOperand* left, LOperand* right, LOperand* temp) {
 | 
|      inputs_[0] = left;
 | 
| @@ -691,7 +703,7 @@ class LMulI: public LTemplateInstruction<1, 2, 1> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LCompareNumericAndBranch: public LControlInstruction<2, 0> {
 | 
| +class LCompareNumericAndBranch V8_FINAL : public LControlInstruction<2, 0> {
 | 
|   public:
 | 
|    LCompareNumericAndBranch(LOperand* left, LOperand* right) {
 | 
|      inputs_[0] = left;
 | 
| @@ -714,7 +726,7 @@ class LCompareNumericAndBranch: public LControlInstruction<2, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LMathFloor: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LMathFloor V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LMathFloor(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -727,7 +739,7 @@ class LMathFloor: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LMathRound: public LTemplateInstruction<1, 2, 1> {
 | 
| +class LMathRound V8_FINAL : public LTemplateInstruction<1, 2, 1> {
 | 
|   public:
 | 
|    LMathRound(LOperand* context, LOperand* value, LOperand* temp) {
 | 
|      inputs_[1] = context;
 | 
| @@ -744,7 +756,7 @@ class LMathRound: public LTemplateInstruction<1, 2, 1> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LMathAbs: public LTemplateInstruction<1, 2, 0> {
 | 
| +class LMathAbs V8_FINAL : public LTemplateInstruction<1, 2, 0> {
 | 
|   public:
 | 
|    LMathAbs(LOperand* context, LOperand* value) {
 | 
|      inputs_[1] = context;
 | 
| @@ -759,7 +771,7 @@ class LMathAbs: public LTemplateInstruction<1, 2, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LMathLog: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LMathLog V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LMathLog(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -771,7 +783,7 @@ class LMathLog: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LMathSin: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LMathSin V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LMathSin(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -783,7 +795,7 @@ class LMathSin: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LMathCos: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LMathCos V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LMathCos(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -795,7 +807,7 @@ class LMathCos: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LMathTan: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LMathTan V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LMathTan(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -807,7 +819,7 @@ class LMathTan: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LMathExp: public LTemplateInstruction<1, 1, 2> {
 | 
| +class LMathExp V8_FINAL : public LTemplateInstruction<1, 1, 2> {
 | 
|   public:
 | 
|    LMathExp(LOperand* value,
 | 
|             LOperand* temp1,
 | 
| @@ -826,7 +838,7 @@ class LMathExp: public LTemplateInstruction<1, 1, 2> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LMathSqrt: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LMathSqrt V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LMathSqrt(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -838,7 +850,7 @@ class LMathSqrt: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LMathPowHalf: public LTemplateInstruction<1, 2, 1> {
 | 
| +class LMathPowHalf V8_FINAL : public LTemplateInstruction<1, 2, 1> {
 | 
|   public:
 | 
|    LMathPowHalf(LOperand* context, LOperand* value, LOperand* temp) {
 | 
|      inputs_[1] = context;
 | 
| @@ -854,7 +866,7 @@ class LMathPowHalf: public LTemplateInstruction<1, 2, 1> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LCmpObjectEqAndBranch: public LControlInstruction<2, 0> {
 | 
| +class LCmpObjectEqAndBranch V8_FINAL : public LControlInstruction<2, 0> {
 | 
|   public:
 | 
|    LCmpObjectEqAndBranch(LOperand* left, LOperand* right) {
 | 
|      inputs_[0] = left;
 | 
| @@ -868,7 +880,7 @@ class LCmpObjectEqAndBranch: public LControlInstruction<2, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LCmpHoleAndBranch: public LControlInstruction<1, 0> {
 | 
| +class LCmpHoleAndBranch V8_FINAL : public LControlInstruction<1, 0> {
 | 
|   public:
 | 
|    explicit LCmpHoleAndBranch(LOperand* object) {
 | 
|      inputs_[0] = object;
 | 
| @@ -881,7 +893,7 @@ class LCmpHoleAndBranch: public LControlInstruction<1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LIsObjectAndBranch: public LControlInstruction<1, 1> {
 | 
| +class LIsObjectAndBranch V8_FINAL : public LControlInstruction<1, 1> {
 | 
|   public:
 | 
|    LIsObjectAndBranch(LOperand* value, LOperand* temp) {
 | 
|      inputs_[0] = value;
 | 
| @@ -893,11 +905,11 @@ class LIsObjectAndBranch: public LControlInstruction<1, 1> {
 | 
|  
 | 
|    DECLARE_CONCRETE_INSTRUCTION(IsObjectAndBranch, "is-object-and-branch")
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LIsNumberAndBranch: public LControlInstruction<1, 0> {
 | 
| +class LIsNumberAndBranch V8_FINAL : public LControlInstruction<1, 0> {
 | 
|   public:
 | 
|    explicit LIsNumberAndBranch(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -910,7 +922,7 @@ class LIsNumberAndBranch: public LControlInstruction<1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LIsStringAndBranch: public LControlInstruction<1, 1> {
 | 
| +class LIsStringAndBranch V8_FINAL : public LControlInstruction<1, 1> {
 | 
|   public:
 | 
|    LIsStringAndBranch(LOperand* value, LOperand* temp) {
 | 
|      inputs_[0] = value;
 | 
| @@ -923,11 +935,11 @@ class LIsStringAndBranch: public LControlInstruction<1, 1> {
 | 
|    DECLARE_CONCRETE_INSTRUCTION(IsStringAndBranch, "is-string-and-branch")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(IsStringAndBranch)
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LIsSmiAndBranch: public LControlInstruction<1, 0> {
 | 
| +class LIsSmiAndBranch V8_FINAL : public LControlInstruction<1, 0> {
 | 
|   public:
 | 
|    explicit LIsSmiAndBranch(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -938,11 +950,11 @@ class LIsSmiAndBranch: public LControlInstruction<1, 0> {
 | 
|    DECLARE_CONCRETE_INSTRUCTION(IsSmiAndBranch, "is-smi-and-branch")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(IsSmiAndBranch)
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LIsUndetectableAndBranch: public LControlInstruction<1, 1> {
 | 
| +class LIsUndetectableAndBranch V8_FINAL : public LControlInstruction<1, 1> {
 | 
|   public:
 | 
|    LIsUndetectableAndBranch(LOperand* value, LOperand* temp) {
 | 
|      inputs_[0] = value;
 | 
| @@ -956,11 +968,11 @@ class LIsUndetectableAndBranch: public LControlInstruction<1, 1> {
 | 
|                                 "is-undetectable-and-branch")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(IsUndetectableAndBranch)
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LStringCompareAndBranch: public LControlInstruction<3, 0> {
 | 
| +class LStringCompareAndBranch V8_FINAL : public LControlInstruction<3, 0> {
 | 
|   public:
 | 
|    LStringCompareAndBranch(LOperand* context, LOperand* left, LOperand* right) {
 | 
|      inputs_[0] = context;
 | 
| @@ -975,13 +987,13 @@ class LStringCompareAndBranch: public LControlInstruction<3, 0> {
 | 
|                                 "string-compare-and-branch")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(StringCompareAndBranch)
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  
 | 
|    Token::Value op() const { return hydrogen()->token(); }
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LHasInstanceTypeAndBranch: public LControlInstruction<1, 1> {
 | 
| +class LHasInstanceTypeAndBranch V8_FINAL : public LControlInstruction<1, 1> {
 | 
|   public:
 | 
|    LHasInstanceTypeAndBranch(LOperand* value, LOperand* temp) {
 | 
|      inputs_[0] = value;
 | 
| @@ -995,11 +1007,11 @@ class LHasInstanceTypeAndBranch: public LControlInstruction<1, 1> {
 | 
|                                 "has-instance-type-and-branch")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(HasInstanceTypeAndBranch)
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LGetCachedArrayIndex: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LGetCachedArrayIndex V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LGetCachedArrayIndex(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -1012,7 +1024,8 @@ class LGetCachedArrayIndex: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LHasCachedArrayIndexAndBranch: public LControlInstruction<1, 0> {
 | 
| +class LHasCachedArrayIndexAndBranch V8_FINAL
 | 
| +    : public LControlInstruction<1, 0> {
 | 
|   public:
 | 
|    explicit LHasCachedArrayIndexAndBranch(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -1023,11 +1036,11 @@ class LHasCachedArrayIndexAndBranch: public LControlInstruction<1, 0> {
 | 
|    DECLARE_CONCRETE_INSTRUCTION(HasCachedArrayIndexAndBranch,
 | 
|                                 "has-cached-array-index-and-branch")
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LIsConstructCallAndBranch: public LControlInstruction<0, 1> {
 | 
| +class LIsConstructCallAndBranch V8_FINAL : public LControlInstruction<0, 1> {
 | 
|   public:
 | 
|    explicit LIsConstructCallAndBranch(LOperand* temp) {
 | 
|      temps_[0] = temp;
 | 
| @@ -1040,7 +1053,7 @@ class LIsConstructCallAndBranch: public LControlInstruction<0, 1> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LClassOfTestAndBranch: public LControlInstruction<1, 2> {
 | 
| +class LClassOfTestAndBranch V8_FINAL : public LControlInstruction<1, 2> {
 | 
|   public:
 | 
|    LClassOfTestAndBranch(LOperand* value, LOperand* temp, LOperand* temp2) {
 | 
|      inputs_[0] = value;
 | 
| @@ -1056,11 +1069,11 @@ class LClassOfTestAndBranch: public LControlInstruction<1, 2> {
 | 
|                                 "class-of-test-and-branch")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(ClassOfTestAndBranch)
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LCmpT: public LTemplateInstruction<1, 3, 0> {
 | 
| +class LCmpT V8_FINAL : public LTemplateInstruction<1, 3, 0> {
 | 
|   public:
 | 
|    LCmpT(LOperand* context, LOperand* left, LOperand* right) {
 | 
|      inputs_[0] = context;
 | 
| @@ -1075,7 +1088,7 @@ class LCmpT: public LTemplateInstruction<1, 3, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LInstanceOf: public LTemplateInstruction<1, 3, 0> {
 | 
| +class LInstanceOf V8_FINAL : public LTemplateInstruction<1, 3, 0> {
 | 
|   public:
 | 
|    LInstanceOf(LOperand* context, LOperand* left, LOperand* right) {
 | 
|      inputs_[0] = context;
 | 
| @@ -1089,7 +1102,7 @@ class LInstanceOf: public LTemplateInstruction<1, 3, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LInstanceOfKnownGlobal: public LTemplateInstruction<1, 2, 1> {
 | 
| +class LInstanceOfKnownGlobal V8_FINAL : public LTemplateInstruction<1, 2, 1> {
 | 
|   public:
 | 
|    LInstanceOfKnownGlobal(LOperand* context, LOperand* value, LOperand* temp) {
 | 
|      inputs_[0] = context;
 | 
| @@ -1108,7 +1121,8 @@ class LInstanceOfKnownGlobal: public LTemplateInstruction<1, 2, 1> {
 | 
|    LEnvironment* GetDeferredLazyDeoptimizationEnvironment() {
 | 
|      return lazy_deopt_env_;
 | 
|    }
 | 
| -  virtual void SetDeferredLazyDeoptimizationEnvironment(LEnvironment* env) {
 | 
| +  virtual void SetDeferredLazyDeoptimizationEnvironment(
 | 
| +      LEnvironment* env) V8_OVERRIDE {
 | 
|      lazy_deopt_env_ = env;
 | 
|    }
 | 
|  
 | 
| @@ -1117,7 +1131,7 @@ class LInstanceOfKnownGlobal: public LTemplateInstruction<1, 2, 1> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LInstanceSize: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LInstanceSize V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LInstanceSize(LOperand* object) {
 | 
|      inputs_[0] = object;
 | 
| @@ -1130,7 +1144,7 @@ class LInstanceSize: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LBoundsCheck: public LTemplateInstruction<0, 2, 0> {
 | 
| +class LBoundsCheck V8_FINAL : public LTemplateInstruction<0, 2, 0> {
 | 
|   public:
 | 
|    LBoundsCheck(LOperand* index, LOperand* length) {
 | 
|      inputs_[0] = index;
 | 
| @@ -1145,7 +1159,7 @@ class LBoundsCheck: public LTemplateInstruction<0, 2, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LBitI: public LTemplateInstruction<1, 2, 0> {
 | 
| +class LBitI V8_FINAL : public LTemplateInstruction<1, 2, 0> {
 | 
|   public:
 | 
|    LBitI(LOperand* left, LOperand* right) {
 | 
|      inputs_[0] = left;
 | 
| @@ -1162,7 +1176,7 @@ class LBitI: public LTemplateInstruction<1, 2, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LShiftI: public LTemplateInstruction<1, 2, 0> {
 | 
| +class LShiftI V8_FINAL : public LTemplateInstruction<1, 2, 0> {
 | 
|   public:
 | 
|    LShiftI(Token::Value op, LOperand* left, LOperand* right, bool can_deopt)
 | 
|        : op_(op), can_deopt_(can_deopt) {
 | 
| @@ -1184,7 +1198,7 @@ class LShiftI: public LTemplateInstruction<1, 2, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LSubI: public LTemplateInstruction<1, 2, 0> {
 | 
| +class LSubI V8_FINAL : public LTemplateInstruction<1, 2, 0> {
 | 
|   public:
 | 
|    LSubI(LOperand* left, LOperand* right) {
 | 
|      inputs_[0] = left;
 | 
| @@ -1199,7 +1213,7 @@ class LSubI: public LTemplateInstruction<1, 2, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LConstantI: public LTemplateInstruction<1, 0, 0> {
 | 
| +class LConstantI V8_FINAL : public LTemplateInstruction<1, 0, 0> {
 | 
|   public:
 | 
|    DECLARE_CONCRETE_INSTRUCTION(ConstantI, "constant-i")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(Constant)
 | 
| @@ -1208,7 +1222,7 @@ class LConstantI: public LTemplateInstruction<1, 0, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LConstantS: public LTemplateInstruction<1, 0, 0> {
 | 
| +class LConstantS V8_FINAL : public LTemplateInstruction<1, 0, 0> {
 | 
|   public:
 | 
|    DECLARE_CONCRETE_INSTRUCTION(ConstantS, "constant-s")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(Constant)
 | 
| @@ -1217,7 +1231,7 @@ class LConstantS: public LTemplateInstruction<1, 0, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LConstantD: public LTemplateInstruction<1, 0, 1> {
 | 
| +class LConstantD V8_FINAL : public LTemplateInstruction<1, 0, 1> {
 | 
|   public:
 | 
|    explicit LConstantD(LOperand* temp) {
 | 
|      temps_[0] = temp;
 | 
| @@ -1232,7 +1246,7 @@ class LConstantD: public LTemplateInstruction<1, 0, 1> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LConstantE: public LTemplateInstruction<1, 0, 0> {
 | 
| +class LConstantE V8_FINAL : public LTemplateInstruction<1, 0, 0> {
 | 
|   public:
 | 
|    DECLARE_CONCRETE_INSTRUCTION(ConstantE, "constant-e")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(Constant)
 | 
| @@ -1243,7 +1257,7 @@ class LConstantE: public LTemplateInstruction<1, 0, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LConstantT: public LTemplateInstruction<1, 0, 0> {
 | 
| +class LConstantT V8_FINAL : public LTemplateInstruction<1, 0, 0> {
 | 
|   public:
 | 
|    DECLARE_CONCRETE_INSTRUCTION(ConstantT, "constant-t")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(Constant)
 | 
| @@ -1252,7 +1266,7 @@ class LConstantT: public LTemplateInstruction<1, 0, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LBranch: public LControlInstruction<1, 1> {
 | 
| +class LBranch V8_FINAL : public LControlInstruction<1, 1> {
 | 
|   public:
 | 
|    LBranch(LOperand* value, LOperand* temp) {
 | 
|      inputs_[0] = value;
 | 
| @@ -1265,11 +1279,11 @@ class LBranch: public LControlInstruction<1, 1> {
 | 
|    DECLARE_CONCRETE_INSTRUCTION(Branch, "branch")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(Branch)
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LCmpMapAndBranch: public LControlInstruction<1, 0> {
 | 
| +class LCmpMapAndBranch V8_FINAL : public LControlInstruction<1, 0> {
 | 
|   public:
 | 
|    explicit LCmpMapAndBranch(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -1284,7 +1298,7 @@ class LCmpMapAndBranch: public LControlInstruction<1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LMapEnumLength: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LMapEnumLength V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LMapEnumLength(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -1296,7 +1310,7 @@ class LMapEnumLength: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LElementsKind: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LElementsKind V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LElementsKind(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -1309,7 +1323,7 @@ class LElementsKind: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LValueOf: public LTemplateInstruction<1, 1, 1> {
 | 
| +class LValueOf V8_FINAL : public LTemplateInstruction<1, 1, 1> {
 | 
|   public:
 | 
|    LValueOf(LOperand* value, LOperand* temp) {
 | 
|      inputs_[0] = value;
 | 
| @@ -1324,7 +1338,7 @@ class LValueOf: public LTemplateInstruction<1, 1, 1> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LDateField: public LTemplateInstruction<1, 1, 1> {
 | 
| +class LDateField V8_FINAL : public LTemplateInstruction<1, 1, 1> {
 | 
|   public:
 | 
|    LDateField(LOperand* date, LOperand* temp, Smi* index)
 | 
|        : index_(index) {
 | 
| @@ -1345,7 +1359,7 @@ class LDateField: public LTemplateInstruction<1, 1, 1> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LSeqStringSetChar: public LTemplateInstruction<1, 3, 0> {
 | 
| +class LSeqStringSetChar V8_FINAL : public LTemplateInstruction<1, 3, 0> {
 | 
|   public:
 | 
|    LSeqStringSetChar(String::Encoding encoding,
 | 
|                      LOperand* string,
 | 
| @@ -1369,7 +1383,7 @@ class LSeqStringSetChar: public LTemplateInstruction<1, 3, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LThrow: public LTemplateInstruction<0, 2, 0> {
 | 
| +class LThrow V8_FINAL : public LTemplateInstruction<0, 2, 0> {
 | 
|   public:
 | 
|    LThrow(LOperand* context, LOperand* value) {
 | 
|      inputs_[0] = context;
 | 
| @@ -1383,7 +1397,7 @@ class LThrow: public LTemplateInstruction<0, 2, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LAddI: public LTemplateInstruction<1, 2, 0> {
 | 
| +class LAddI V8_FINAL : public LTemplateInstruction<1, 2, 0> {
 | 
|   public:
 | 
|    LAddI(LOperand* left, LOperand* right) {
 | 
|      inputs_[0] = left;
 | 
| @@ -1403,7 +1417,7 @@ class LAddI: public LTemplateInstruction<1, 2, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LMathMinMax: public LTemplateInstruction<1, 2, 0> {
 | 
| +class LMathMinMax V8_FINAL : public LTemplateInstruction<1, 2, 0> {
 | 
|   public:
 | 
|    LMathMinMax(LOperand* left, LOperand* right) {
 | 
|      inputs_[0] = left;
 | 
| @@ -1418,7 +1432,7 @@ class LMathMinMax: public LTemplateInstruction<1, 2, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LPower: public LTemplateInstruction<1, 2, 0> {
 | 
| +class LPower V8_FINAL : public LTemplateInstruction<1, 2, 0> {
 | 
|   public:
 | 
|    LPower(LOperand* left, LOperand* right) {
 | 
|      inputs_[0] = left;
 | 
| @@ -1433,7 +1447,7 @@ class LPower: public LTemplateInstruction<1, 2, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LRandom: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LRandom V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LRandom(LOperand* global_object) {
 | 
|      inputs_[0] = global_object;
 | 
| @@ -1446,7 +1460,7 @@ class LRandom: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LArithmeticD: public LTemplateInstruction<1, 2, 0> {
 | 
| +class LArithmeticD V8_FINAL : public LTemplateInstruction<1, 2, 0> {
 | 
|   public:
 | 
|    LArithmeticD(Token::Value op, LOperand* left, LOperand* right)
 | 
|        : op_(op) {
 | 
| @@ -1459,16 +1473,18 @@ class LArithmeticD: public LTemplateInstruction<1, 2, 0> {
 | 
|  
 | 
|    Token::Value op() const { return op_; }
 | 
|  
 | 
| -  virtual Opcode opcode() const { return LInstruction::kArithmeticD; }
 | 
| -  virtual void CompileToNative(LCodeGen* generator);
 | 
| -  virtual const char* Mnemonic() const;
 | 
| +  virtual Opcode opcode() const V8_OVERRIDE {
 | 
| +    return LInstruction::kArithmeticD;
 | 
| +  }
 | 
| +  virtual void CompileToNative(LCodeGen* generator) V8_OVERRIDE;
 | 
| +  virtual const char* Mnemonic() const V8_OVERRIDE;
 | 
|  
 | 
|   private:
 | 
|    Token::Value op_;
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LArithmeticT: public LTemplateInstruction<1, 3, 0> {
 | 
| +class LArithmeticT V8_FINAL : public LTemplateInstruction<1, 3, 0> {
 | 
|   public:
 | 
|    LArithmeticT(Token::Value op,
 | 
|                 LOperand* context,
 | 
| @@ -1484,9 +1500,11 @@ class LArithmeticT: public LTemplateInstruction<1, 3, 0> {
 | 
|    LOperand* left() { return inputs_[1]; }
 | 
|    LOperand* right() { return inputs_[2]; }
 | 
|  
 | 
| -  virtual Opcode opcode() const { return LInstruction::kArithmeticT; }
 | 
| -  virtual void CompileToNative(LCodeGen* generator);
 | 
| -  virtual const char* Mnemonic() const;
 | 
| +  virtual Opcode opcode() const V8_OVERRIDE {
 | 
| +    return LInstruction::kArithmeticT;
 | 
| +  }
 | 
| +  virtual void CompileToNative(LCodeGen* generator) V8_OVERRIDE;
 | 
| +  virtual const char* Mnemonic() const V8_OVERRIDE;
 | 
|  
 | 
|    Token::Value op() const { return op_; }
 | 
|  
 | 
| @@ -1495,7 +1513,7 @@ class LArithmeticT: public LTemplateInstruction<1, 3, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LReturn: public LTemplateInstruction<0, 3, 0> {
 | 
| +class LReturn V8_FINAL : public LTemplateInstruction<0, 3, 0> {
 | 
|   public:
 | 
|    explicit LReturn(LOperand* value, LOperand* context,
 | 
|                     LOperand* parameter_count) {
 | 
| @@ -1518,7 +1536,7 @@ class LReturn: public LTemplateInstruction<0, 3, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LLoadNamedField: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LLoadNamedField V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LLoadNamedField(LOperand* object) {
 | 
|      inputs_[0] = object;
 | 
| @@ -1536,7 +1554,7 @@ class LLoadNamedField: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LLoadNamedGeneric: public LTemplateInstruction<1, 2, 0> {
 | 
| +class LLoadNamedGeneric V8_FINAL : public LTemplateInstruction<1, 2, 0> {
 | 
|   public:
 | 
|    LLoadNamedGeneric(LOperand* context, LOperand* object) {
 | 
|      inputs_[0] = context;
 | 
| @@ -1553,7 +1571,7 @@ class LLoadNamedGeneric: public LTemplateInstruction<1, 2, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LLoadFunctionPrototype: public LTemplateInstruction<1, 1, 1> {
 | 
| +class LLoadFunctionPrototype V8_FINAL : public LTemplateInstruction<1, 1, 1> {
 | 
|   public:
 | 
|    LLoadFunctionPrototype(LOperand* function, LOperand* temp) {
 | 
|      inputs_[0] = function;
 | 
| @@ -1568,7 +1586,8 @@ class LLoadFunctionPrototype: public LTemplateInstruction<1, 1, 1> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LLoadExternalArrayPointer: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LLoadExternalArrayPointer V8_FINAL
 | 
| +    : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LLoadExternalArrayPointer(LOperand* object) {
 | 
|      inputs_[0] = object;
 | 
| @@ -1581,7 +1600,7 @@ class LLoadExternalArrayPointer: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LLoadKeyed: public LTemplateInstruction<1, 2, 0> {
 | 
| +class LLoadKeyed V8_FINAL : public LTemplateInstruction<1, 2, 0> {
 | 
|   public:
 | 
|    LLoadKeyed(LOperand* elements, LOperand* key) {
 | 
|      inputs_[0] = elements;
 | 
| @@ -1596,7 +1615,7 @@ class LLoadKeyed: public LTemplateInstruction<1, 2, 0> {
 | 
|      return hydrogen()->is_external();
 | 
|    }
 | 
|  
 | 
| -  virtual bool ClobbersDoubleRegisters() const {
 | 
| +  virtual bool ClobbersDoubleRegisters() const V8_OVERRIDE {
 | 
|      return !CpuFeatures::IsSupported(SSE2) &&
 | 
|          !IsDoubleOrFloatElementsKind(hydrogen()->elements_kind());
 | 
|    }
 | 
| @@ -1604,7 +1623,7 @@ class LLoadKeyed: public LTemplateInstruction<1, 2, 0> {
 | 
|    DECLARE_CONCRETE_INSTRUCTION(LoadKeyed, "load-keyed")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(LoadKeyed)
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|    uint32_t additional_index() const { return hydrogen()->index_offset(); }
 | 
|    bool key_is_smi() {
 | 
|      return hydrogen()->key()->representation().IsTagged();
 | 
| @@ -1625,7 +1644,7 @@ inline static bool ExternalArrayOpRequiresTemp(
 | 
|  }
 | 
|  
 | 
|  
 | 
| -class LLoadKeyedGeneric: public LTemplateInstruction<1, 3, 0> {
 | 
| +class LLoadKeyedGeneric V8_FINAL : public LTemplateInstruction<1, 3, 0> {
 | 
|   public:
 | 
|    LLoadKeyedGeneric(LOperand* context, LOperand* obj, LOperand* key) {
 | 
|      inputs_[0] = context;
 | 
| @@ -1641,14 +1660,14 @@ class LLoadKeyedGeneric: public LTemplateInstruction<1, 3, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LLoadGlobalCell: public LTemplateInstruction<1, 0, 0> {
 | 
| +class LLoadGlobalCell V8_FINAL : public LTemplateInstruction<1, 0, 0> {
 | 
|   public:
 | 
|    DECLARE_CONCRETE_INSTRUCTION(LoadGlobalCell, "load-global-cell")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(LoadGlobalCell)
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LLoadGlobalGeneric: public LTemplateInstruction<1, 2, 0> {
 | 
| +class LLoadGlobalGeneric V8_FINAL : public LTemplateInstruction<1, 2, 0> {
 | 
|   public:
 | 
|    LLoadGlobalGeneric(LOperand* context, LOperand* global_object) {
 | 
|      inputs_[0] = context;
 | 
| @@ -1666,7 +1685,7 @@ class LLoadGlobalGeneric: public LTemplateInstruction<1, 2, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LStoreGlobalCell: public LTemplateInstruction<0, 1, 0> {
 | 
| +class LStoreGlobalCell V8_FINAL : public LTemplateInstruction<0, 1, 0> {
 | 
|   public:
 | 
|    explicit LStoreGlobalCell(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -1679,7 +1698,7 @@ class LStoreGlobalCell: public LTemplateInstruction<0, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LStoreGlobalGeneric: public LTemplateInstruction<0, 3, 0> {
 | 
| +class LStoreGlobalGeneric V8_FINAL : public LTemplateInstruction<0, 3, 0> {
 | 
|   public:
 | 
|    LStoreGlobalGeneric(LOperand* context,
 | 
|                        LOperand* global_object,
 | 
| @@ -1701,7 +1720,7 @@ class LStoreGlobalGeneric: public LTemplateInstruction<0, 3, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LLoadContextSlot: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LLoadContextSlot V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LLoadContextSlot(LOperand* context) {
 | 
|      inputs_[0] = context;
 | 
| @@ -1714,11 +1733,11 @@ class LLoadContextSlot: public LTemplateInstruction<1, 1, 0> {
 | 
|  
 | 
|    int slot_index() { return hydrogen()->slot_index(); }
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LStoreContextSlot: public LTemplateInstruction<0, 2, 1> {
 | 
| +class LStoreContextSlot V8_FINAL : public LTemplateInstruction<0, 2, 1> {
 | 
|   public:
 | 
|    LStoreContextSlot(LOperand* context, LOperand* value, LOperand* temp) {
 | 
|      inputs_[0] = context;
 | 
| @@ -1735,11 +1754,11 @@ class LStoreContextSlot: public LTemplateInstruction<0, 2, 1> {
 | 
|  
 | 
|    int slot_index() { return hydrogen()->slot_index(); }
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LPushArgument: public LTemplateInstruction<0, 1, 0> {
 | 
| +class LPushArgument V8_FINAL : public LTemplateInstruction<0, 1, 0> {
 | 
|   public:
 | 
|    explicit LPushArgument(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -1751,7 +1770,7 @@ class LPushArgument: public LTemplateInstruction<0, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LDrop: public LTemplateInstruction<0, 0, 0> {
 | 
| +class LDrop V8_FINAL : public LTemplateInstruction<0, 0, 0> {
 | 
|   public:
 | 
|    explicit LDrop(int count) : count_(count) { }
 | 
|  
 | 
| @@ -1764,7 +1783,7 @@ class LDrop: public LTemplateInstruction<0, 0, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LInnerAllocatedObject: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LInnerAllocatedObject V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LInnerAllocatedObject(LOperand* base_object) {
 | 
|      inputs_[0] = base_object;
 | 
| @@ -1780,21 +1799,21 @@ class LInnerAllocatedObject: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LThisFunction: public LTemplateInstruction<1, 0, 0> {
 | 
| +class LThisFunction V8_FINAL : public LTemplateInstruction<1, 0, 0> {
 | 
|   public:
 | 
|    DECLARE_CONCRETE_INSTRUCTION(ThisFunction, "this-function")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(ThisFunction)
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LContext: public LTemplateInstruction<1, 0, 0> {
 | 
| +class LContext V8_FINAL : public LTemplateInstruction<1, 0, 0> {
 | 
|   public:
 | 
|    DECLARE_CONCRETE_INSTRUCTION(Context, "context")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(Context)
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LOuterContext: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LOuterContext V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LOuterContext(LOperand* context) {
 | 
|      inputs_[0] = context;
 | 
| @@ -1806,7 +1825,7 @@ class LOuterContext: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LDeclareGlobals: public LTemplateInstruction<0, 1, 0> {
 | 
| +class LDeclareGlobals V8_FINAL : public LTemplateInstruction<0, 1, 0> {
 | 
|   public:
 | 
|    explicit LDeclareGlobals(LOperand* context) {
 | 
|      inputs_[0] = context;
 | 
| @@ -1819,7 +1838,7 @@ class LDeclareGlobals: public LTemplateInstruction<0, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LGlobalObject: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LGlobalObject V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LGlobalObject(LOperand* context) {
 | 
|      inputs_[0] = context;
 | 
| @@ -1831,7 +1850,7 @@ class LGlobalObject: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LGlobalReceiver: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LGlobalReceiver V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LGlobalReceiver(LOperand* global_object) {
 | 
|      inputs_[0] = global_object;
 | 
| @@ -1843,19 +1862,19 @@ class LGlobalReceiver: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LCallConstantFunction: public LTemplateInstruction<1, 0, 0> {
 | 
| +class LCallConstantFunction V8_FINAL : public LTemplateInstruction<1, 0, 0> {
 | 
|   public:
 | 
|    DECLARE_CONCRETE_INSTRUCTION(CallConstantFunction, "call-constant-function")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(CallConstantFunction)
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  
 | 
|    Handle<JSFunction> function() { return hydrogen()->function(); }
 | 
|    int arity() const { return hydrogen()->argument_count() - 1; }
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LInvokeFunction: public LTemplateInstruction<1, 2, 0> {
 | 
| +class LInvokeFunction V8_FINAL : public LTemplateInstruction<1, 2, 0> {
 | 
|   public:
 | 
|    LInvokeFunction(LOperand* context, LOperand* function) {
 | 
|      inputs_[0] = context;
 | 
| @@ -1868,13 +1887,13 @@ class LInvokeFunction: public LTemplateInstruction<1, 2, 0> {
 | 
|    DECLARE_CONCRETE_INSTRUCTION(InvokeFunction, "invoke-function")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(InvokeFunction)
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  
 | 
|    int arity() const { return hydrogen()->argument_count() - 1; }
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LCallKeyed: public LTemplateInstruction<1, 2, 0> {
 | 
| +class LCallKeyed V8_FINAL : public LTemplateInstruction<1, 2, 0> {
 | 
|   public:
 | 
|    LCallKeyed(LOperand* context, LOperand* key) {
 | 
|      inputs_[0] = context;
 | 
| @@ -1887,13 +1906,13 @@ class LCallKeyed: public LTemplateInstruction<1, 2, 0> {
 | 
|    DECLARE_CONCRETE_INSTRUCTION(CallKeyed, "call-keyed")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(CallKeyed)
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  
 | 
|    int arity() const { return hydrogen()->argument_count() - 1; }
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LCallNamed: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LCallNamed V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LCallNamed(LOperand* context) {
 | 
|      inputs_[0] = context;
 | 
| @@ -1904,14 +1923,14 @@ class LCallNamed: public LTemplateInstruction<1, 1, 0> {
 | 
|    DECLARE_CONCRETE_INSTRUCTION(CallNamed, "call-named")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(CallNamed)
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  
 | 
|    Handle<String> name() const { return hydrogen()->name(); }
 | 
|    int arity() const { return hydrogen()->argument_count() - 1; }
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LCallFunction: public LTemplateInstruction<1, 2, 0> {
 | 
| +class LCallFunction V8_FINAL : public LTemplateInstruction<1, 2, 0> {
 | 
|   public:
 | 
|    explicit LCallFunction(LOperand* context, LOperand* function) {
 | 
|      inputs_[0] = context;
 | 
| @@ -1928,7 +1947,7 @@ class LCallFunction: public LTemplateInstruction<1, 2, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LCallGlobal: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LCallGlobal V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LCallGlobal(LOperand* context) {
 | 
|      inputs_[0] = context;
 | 
| @@ -1939,25 +1958,25 @@ class LCallGlobal: public LTemplateInstruction<1, 1, 0> {
 | 
|    DECLARE_CONCRETE_INSTRUCTION(CallGlobal, "call-global")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(CallGlobal)
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  
 | 
|    Handle<String> name() const {return hydrogen()->name(); }
 | 
|    int arity() const { return hydrogen()->argument_count() - 1; }
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LCallKnownGlobal: public LTemplateInstruction<1, 0, 0> {
 | 
| +class LCallKnownGlobal V8_FINAL : public LTemplateInstruction<1, 0, 0> {
 | 
|   public:
 | 
|    DECLARE_CONCRETE_INSTRUCTION(CallKnownGlobal, "call-known-global")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(CallKnownGlobal)
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  
 | 
|    int arity() const { return hydrogen()->argument_count() - 1;  }
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LCallNew: public LTemplateInstruction<1, 2, 0> {
 | 
| +class LCallNew V8_FINAL : public LTemplateInstruction<1, 2, 0> {
 | 
|   public:
 | 
|    LCallNew(LOperand* context, LOperand* constructor) {
 | 
|      inputs_[0] = context;
 | 
| @@ -1970,13 +1989,13 @@ class LCallNew: public LTemplateInstruction<1, 2, 0> {
 | 
|    DECLARE_CONCRETE_INSTRUCTION(CallNew, "call-new")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(CallNew)
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  
 | 
|    int arity() const { return hydrogen()->argument_count() - 1; }
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LCallNewArray: public LTemplateInstruction<1, 2, 0> {
 | 
| +class LCallNewArray V8_FINAL : public LTemplateInstruction<1, 2, 0> {
 | 
|   public:
 | 
|    LCallNewArray(LOperand* context, LOperand* constructor) {
 | 
|      inputs_[0] = context;
 | 
| @@ -1989,13 +2008,13 @@ class LCallNewArray: public LTemplateInstruction<1, 2, 0> {
 | 
|    DECLARE_CONCRETE_INSTRUCTION(CallNewArray, "call-new-array")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(CallNewArray)
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  
 | 
|    int arity() const { return hydrogen()->argument_count() - 1; }
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LCallRuntime: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LCallRuntime V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LCallRuntime(LOperand* context) {
 | 
|      inputs_[0] = context;
 | 
| @@ -2011,7 +2030,7 @@ class LCallRuntime: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LInteger32ToDouble: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LInteger32ToDouble V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LInteger32ToDouble(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2023,7 +2042,7 @@ class LInteger32ToDouble: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LInteger32ToSmi: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LInteger32ToSmi V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LInteger32ToSmi(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2036,7 +2055,7 @@ class LInteger32ToSmi: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LUint32ToDouble: public LTemplateInstruction<1, 1, 1> {
 | 
| +class LUint32ToDouble V8_FINAL : public LTemplateInstruction<1, 1, 1> {
 | 
|   public:
 | 
|    explicit LUint32ToDouble(LOperand* value, LOperand* temp) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2050,7 +2069,7 @@ class LUint32ToDouble: public LTemplateInstruction<1, 1, 1> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LNumberTagI: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LNumberTagI V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LNumberTagI(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2062,7 +2081,7 @@ class LNumberTagI: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LNumberTagU: public LTemplateInstruction<1, 1, 1> {
 | 
| +class LNumberTagU V8_FINAL : public LTemplateInstruction<1, 1, 1> {
 | 
|   public:
 | 
|    LNumberTagU(LOperand* value, LOperand* temp) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2076,7 +2095,7 @@ class LNumberTagU: public LTemplateInstruction<1, 1, 1> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LNumberTagD: public LTemplateInstruction<1, 1, 1> {
 | 
| +class LNumberTagD V8_FINAL : public LTemplateInstruction<1, 1, 1> {
 | 
|   public:
 | 
|    LNumberTagD(LOperand* value, LOperand* temp) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2092,7 +2111,7 @@ class LNumberTagD: public LTemplateInstruction<1, 1, 1> {
 | 
|  
 | 
|  
 | 
|  // Sometimes truncating conversion from a tagged value to an int32.
 | 
| -class LDoubleToI: public LTemplateInstruction<1, 1, 1> {
 | 
| +class LDoubleToI V8_FINAL : public LTemplateInstruction<1, 1, 1> {
 | 
|   public:
 | 
|    LDoubleToI(LOperand* value, LOperand* temp) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2109,7 +2128,7 @@ class LDoubleToI: public LTemplateInstruction<1, 1, 1> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LDoubleToSmi: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LDoubleToSmi V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LDoubleToSmi(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2123,7 +2142,7 @@ class LDoubleToSmi: public LTemplateInstruction<1, 1, 0> {
 | 
|  
 | 
|  
 | 
|  // Truncating conversion from a tagged value to an int32.
 | 
| -class LTaggedToI: public LTemplateInstruction<1, 1, 1> {
 | 
| +class LTaggedToI V8_FINAL : public LTemplateInstruction<1, 1, 1> {
 | 
|   public:
 | 
|    LTaggedToI(LOperand* value, LOperand* temp) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2141,7 +2160,7 @@ class LTaggedToI: public LTemplateInstruction<1, 1, 1> {
 | 
|  
 | 
|  
 | 
|  // Truncating conversion from a tagged value to an int32.
 | 
| -class LTaggedToINoSSE2: public LTemplateInstruction<1, 1, 3> {
 | 
| +class LTaggedToINoSSE2 V8_FINAL : public LTemplateInstruction<1, 1, 3> {
 | 
|   public:
 | 
|    LTaggedToINoSSE2(LOperand* value,
 | 
|                     LOperand* temp1,
 | 
| @@ -2165,7 +2184,7 @@ class LTaggedToINoSSE2: public LTemplateInstruction<1, 1, 3> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LSmiTag: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LSmiTag V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LSmiTag(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2177,7 +2196,7 @@ class LSmiTag: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LNumberUntagD: public LTemplateInstruction<1, 1, 1> {
 | 
| +class LNumberUntagD V8_FINAL : public LTemplateInstruction<1, 1, 1> {
 | 
|   public:
 | 
|    explicit LNumberUntagD(LOperand* value, LOperand* temp) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2187,14 +2206,14 @@ class LNumberUntagD: public LTemplateInstruction<1, 1, 1> {
 | 
|    LOperand* value() { return inputs_[0]; }
 | 
|    LOperand* temp() { return temps_[0]; }
 | 
|  
 | 
| -  virtual bool ClobbersDoubleRegisters() const { return false; }
 | 
| +  virtual bool ClobbersDoubleRegisters() const V8_OVERRIDE { return false; }
 | 
|  
 | 
|    DECLARE_CONCRETE_INSTRUCTION(NumberUntagD, "double-untag")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(Change);
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LSmiUntag: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LSmiUntag V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    LSmiUntag(LOperand* value, bool needs_check)
 | 
|        : needs_check_(needs_check) {
 | 
| @@ -2212,7 +2231,7 @@ class LSmiUntag: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LStoreNamedField: public LTemplateInstruction<0, 2, 2> {
 | 
| +class LStoreNamedField V8_FINAL : public LTemplateInstruction<0, 2, 2> {
 | 
|   public:
 | 
|    LStoreNamedField(LOperand* obj,
 | 
|                     LOperand* val,
 | 
| @@ -2232,7 +2251,7 @@ class LStoreNamedField: public LTemplateInstruction<0, 2, 2> {
 | 
|    DECLARE_CONCRETE_INSTRUCTION(StoreNamedField, "store-named-field")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(StoreNamedField)
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  
 | 
|    Handle<Map> transition() const { return hydrogen()->transition_map(); }
 | 
|    Representation representation() const {
 | 
| @@ -2241,7 +2260,7 @@ class LStoreNamedField: public LTemplateInstruction<0, 2, 2> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LStoreNamedGeneric: public LTemplateInstruction<0, 3, 0> {
 | 
| +class LStoreNamedGeneric V8_FINAL : public LTemplateInstruction<0, 3, 0> {
 | 
|   public:
 | 
|    LStoreNamedGeneric(LOperand* context, LOperand* object, LOperand* value) {
 | 
|      inputs_[0] = context;
 | 
| @@ -2256,13 +2275,13 @@ class LStoreNamedGeneric: public LTemplateInstruction<0, 3, 0> {
 | 
|    DECLARE_CONCRETE_INSTRUCTION(StoreNamedGeneric, "store-named-generic")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(StoreNamedGeneric)
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|    Handle<Object> name() const { return hydrogen()->name(); }
 | 
|    StrictModeFlag strict_mode_flag() { return hydrogen()->strict_mode_flag(); }
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LStoreKeyed: public LTemplateInstruction<0, 3, 0> {
 | 
| +class LStoreKeyed V8_FINAL : public LTemplateInstruction<0, 3, 0> {
 | 
|   public:
 | 
|    LStoreKeyed(LOperand* obj, LOperand* key, LOperand* val) {
 | 
|      inputs_[0] = obj;
 | 
| @@ -2281,13 +2300,13 @@ class LStoreKeyed: public LTemplateInstruction<0, 3, 0> {
 | 
|    DECLARE_CONCRETE_INSTRUCTION(StoreKeyed, "store-keyed")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(StoreKeyed)
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|    uint32_t additional_index() const { return hydrogen()->index_offset(); }
 | 
|    bool NeedsCanonicalization() { return hydrogen()->NeedsCanonicalization(); }
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LStoreKeyedGeneric: public LTemplateInstruction<0, 4, 0> {
 | 
| +class LStoreKeyedGeneric V8_FINAL : public LTemplateInstruction<0, 4, 0> {
 | 
|   public:
 | 
|    LStoreKeyedGeneric(LOperand* context,
 | 
|                       LOperand* object,
 | 
| @@ -2307,13 +2326,13 @@ class LStoreKeyedGeneric: public LTemplateInstruction<0, 4, 0> {
 | 
|    DECLARE_CONCRETE_INSTRUCTION(StoreKeyedGeneric, "store-keyed-generic")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(StoreKeyedGeneric)
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  
 | 
|    StrictModeFlag strict_mode_flag() { return hydrogen()->strict_mode_flag(); }
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LTransitionElementsKind: public LTemplateInstruction<0, 2, 2> {
 | 
| +class LTransitionElementsKind V8_FINAL : public LTemplateInstruction<0, 2, 2> {
 | 
|   public:
 | 
|    LTransitionElementsKind(LOperand* object,
 | 
|                            LOperand* context,
 | 
| @@ -2334,7 +2353,7 @@ class LTransitionElementsKind: public LTemplateInstruction<0, 2, 2> {
 | 
|                                 "transition-elements-kind")
 | 
|    DECLARE_HYDROGEN_ACCESSOR(TransitionElementsKind)
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  
 | 
|    Handle<Map> original_map() { return hydrogen()->original_map(); }
 | 
|    Handle<Map> transitioned_map() { return hydrogen()->transitioned_map(); }
 | 
| @@ -2343,7 +2362,7 @@ class LTransitionElementsKind: public LTemplateInstruction<0, 2, 2> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LTrapAllocationMemento : public LTemplateInstruction<0, 1, 1> {
 | 
| +class LTrapAllocationMemento V8_FINAL  : public LTemplateInstruction<0, 1, 1> {
 | 
|   public:
 | 
|    LTrapAllocationMemento(LOperand* object,
 | 
|                           LOperand* temp) {
 | 
| @@ -2359,7 +2378,7 @@ class LTrapAllocationMemento : public LTemplateInstruction<0, 1, 1> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LStringAdd: public LTemplateInstruction<1, 3, 0> {
 | 
| +class LStringAdd V8_FINAL : public LTemplateInstruction<1, 3, 0> {
 | 
|   public:
 | 
|    LStringAdd(LOperand* context, LOperand* left, LOperand* right) {
 | 
|      inputs_[0] = context;
 | 
| @@ -2376,7 +2395,7 @@ class LStringAdd: public LTemplateInstruction<1, 3, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LStringCharCodeAt: public LTemplateInstruction<1, 3, 0> {
 | 
| +class LStringCharCodeAt V8_FINAL : public LTemplateInstruction<1, 3, 0> {
 | 
|   public:
 | 
|    LStringCharCodeAt(LOperand* context, LOperand* string, LOperand* index) {
 | 
|      inputs_[0] = context;
 | 
| @@ -2393,7 +2412,7 @@ class LStringCharCodeAt: public LTemplateInstruction<1, 3, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LStringCharFromCode: public LTemplateInstruction<1, 2, 0> {
 | 
| +class LStringCharFromCode V8_FINAL : public LTemplateInstruction<1, 2, 0> {
 | 
|   public:
 | 
|    LStringCharFromCode(LOperand* context, LOperand* char_code) {
 | 
|      inputs_[0] = context;
 | 
| @@ -2408,7 +2427,7 @@ class LStringCharFromCode: public LTemplateInstruction<1, 2, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LCheckFunction: public LTemplateInstruction<0, 1, 0> {
 | 
| +class LCheckFunction V8_FINAL : public LTemplateInstruction<0, 1, 0> {
 | 
|   public:
 | 
|    explicit LCheckFunction(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2421,7 +2440,7 @@ class LCheckFunction: public LTemplateInstruction<0, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LCheckInstanceType: public LTemplateInstruction<0, 1, 1> {
 | 
| +class LCheckInstanceType V8_FINAL : public LTemplateInstruction<0, 1, 1> {
 | 
|   public:
 | 
|    LCheckInstanceType(LOperand* value, LOperand* temp) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2436,7 +2455,7 @@ class LCheckInstanceType: public LTemplateInstruction<0, 1, 1> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LCheckMaps: public LTemplateInstruction<0, 1, 0> {
 | 
| +class LCheckMaps V8_FINAL : public LTemplateInstruction<0, 1, 0> {
 | 
|   public:
 | 
|    explicit LCheckMaps(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2449,7 +2468,7 @@ class LCheckMaps: public LTemplateInstruction<0, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LCheckSmi: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LCheckSmi V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LCheckSmi(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2461,7 +2480,7 @@ class LCheckSmi: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LClampDToUint8: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LClampDToUint8 V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LClampDToUint8(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2473,7 +2492,7 @@ class LClampDToUint8: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LClampIToUint8: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LClampIToUint8 V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LClampIToUint8(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2485,7 +2504,7 @@ class LClampIToUint8: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LClampTToUint8: public LTemplateInstruction<1, 1, 1> {
 | 
| +class LClampTToUint8 V8_FINAL : public LTemplateInstruction<1, 1, 1> {
 | 
|   public:
 | 
|    LClampTToUint8(LOperand* value, LOperand* temp) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2499,7 +2518,7 @@ class LClampTToUint8: public LTemplateInstruction<1, 1, 1> {
 | 
|  
 | 
|  
 | 
|  // Truncating conversion from a tagged value to an int32.
 | 
| -class LClampTToUint8NoSSE2: public LTemplateInstruction<1, 1, 3> {
 | 
| +class LClampTToUint8NoSSE2 V8_FINAL : public LTemplateInstruction<1, 1, 3> {
 | 
|   public:
 | 
|    LClampTToUint8NoSSE2(LOperand* unclamped,
 | 
|                         LOperand* temp1,
 | 
| @@ -2522,7 +2541,7 @@ class LClampTToUint8NoSSE2: public LTemplateInstruction<1, 1, 3> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LCheckNonSmi: public LTemplateInstruction<0, 1, 0> {
 | 
| +class LCheckNonSmi V8_FINAL : public LTemplateInstruction<0, 1, 0> {
 | 
|   public:
 | 
|    explicit LCheckNonSmi(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2535,7 +2554,7 @@ class LCheckNonSmi: public LTemplateInstruction<0, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LAllocate: public LTemplateInstruction<1, 2, 1> {
 | 
| +class LAllocate V8_FINAL : public LTemplateInstruction<1, 2, 1> {
 | 
|   public:
 | 
|    LAllocate(LOperand* context, LOperand* size, LOperand* temp) {
 | 
|      inputs_[0] = context;
 | 
| @@ -2552,7 +2571,7 @@ class LAllocate: public LTemplateInstruction<1, 2, 1> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LRegExpLiteral: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LRegExpLiteral V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LRegExpLiteral(LOperand* context) {
 | 
|      inputs_[0] = context;
 | 
| @@ -2565,7 +2584,7 @@ class LRegExpLiteral: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LFunctionLiteral: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LFunctionLiteral V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LFunctionLiteral(LOperand* context) {
 | 
|      inputs_[0] = context;
 | 
| @@ -2578,7 +2597,7 @@ class LFunctionLiteral: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LToFastProperties: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LToFastProperties V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LToFastProperties(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2591,7 +2610,7 @@ class LToFastProperties: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LTypeof: public LTemplateInstruction<1, 2, 0> {
 | 
| +class LTypeof V8_FINAL : public LTemplateInstruction<1, 2, 0> {
 | 
|   public:
 | 
|    LTypeof(LOperand* context, LOperand* value) {
 | 
|      inputs_[0] = context;
 | 
| @@ -2605,7 +2624,7 @@ class LTypeof: public LTemplateInstruction<1, 2, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LTypeofIsAndBranch: public LControlInstruction<1, 0> {
 | 
| +class LTypeofIsAndBranch V8_FINAL : public LControlInstruction<1, 0> {
 | 
|   public:
 | 
|    explicit LTypeofIsAndBranch(LOperand* value) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2618,20 +2637,20 @@ class LTypeofIsAndBranch: public LControlInstruction<1, 0> {
 | 
|  
 | 
|    Handle<String> type_literal() { return hydrogen()->type_literal(); }
 | 
|  
 | 
| -  virtual void PrintDataTo(StringStream* stream);
 | 
| +  virtual void PrintDataTo(StringStream* stream) V8_OVERRIDE;
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LOsrEntry: public LTemplateInstruction<0, 0, 0> {
 | 
| +class LOsrEntry V8_FINAL : public LTemplateInstruction<0, 0, 0> {
 | 
|   public:
 | 
| -  LOsrEntry() {}
 | 
| -
 | 
| -  virtual bool HasInterestingComment(LCodeGen* gen) const { return false; }
 | 
| +  virtual bool HasInterestingComment(LCodeGen* gen) const V8_OVERRIDE {
 | 
| +    return false;
 | 
| +  }
 | 
|    DECLARE_CONCRETE_INSTRUCTION(OsrEntry, "osr-entry")
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LStackCheck: public LTemplateInstruction<0, 1, 0> {
 | 
| +class LStackCheck V8_FINAL : public LTemplateInstruction<0, 1, 0> {
 | 
|   public:
 | 
|    explicit LStackCheck(LOperand* context) {
 | 
|      inputs_[0] = context;
 | 
| @@ -2649,7 +2668,7 @@ class LStackCheck: public LTemplateInstruction<0, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LForInPrepareMap: public LTemplateInstruction<1, 2, 0> {
 | 
| +class LForInPrepareMap V8_FINAL : public LTemplateInstruction<1, 2, 0> {
 | 
|   public:
 | 
|    LForInPrepareMap(LOperand* context, LOperand* object) {
 | 
|      inputs_[0] = context;
 | 
| @@ -2663,7 +2682,7 @@ class LForInPrepareMap: public LTemplateInstruction<1, 2, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LForInCacheArray: public LTemplateInstruction<1, 1, 0> {
 | 
| +class LForInCacheArray V8_FINAL : public LTemplateInstruction<1, 1, 0> {
 | 
|   public:
 | 
|    explicit LForInCacheArray(LOperand* map) {
 | 
|      inputs_[0] = map;
 | 
| @@ -2679,7 +2698,7 @@ class LForInCacheArray: public LTemplateInstruction<1, 1, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LCheckMapValue: public LTemplateInstruction<0, 2, 0> {
 | 
| +class LCheckMapValue V8_FINAL : public LTemplateInstruction<0, 2, 0> {
 | 
|   public:
 | 
|    LCheckMapValue(LOperand* value, LOperand* map) {
 | 
|      inputs_[0] = value;
 | 
| @@ -2693,7 +2712,7 @@ class LCheckMapValue: public LTemplateInstruction<0, 2, 0> {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LLoadFieldByIndex: public LTemplateInstruction<1, 2, 0> {
 | 
| +class LLoadFieldByIndex V8_FINAL : public LTemplateInstruction<1, 2, 0> {
 | 
|   public:
 | 
|    LLoadFieldByIndex(LOperand* object, LOperand* index) {
 | 
|      inputs_[0] = object;
 | 
| @@ -2708,7 +2727,7 @@ class LLoadFieldByIndex: public LTemplateInstruction<1, 2, 0> {
 | 
|  
 | 
|  
 | 
|  class LChunkBuilder;
 | 
| -class LPlatformChunk: public LChunk {
 | 
| +class LPlatformChunk V8_FINAL : public LChunk {
 | 
|   public:
 | 
|    LPlatformChunk(CompilationInfo* info, HGraph* graph)
 | 
|        : LChunk(info, graph),
 | 
| @@ -2724,7 +2743,7 @@ class LPlatformChunk: public LChunk {
 | 
|  };
 | 
|  
 | 
|  
 | 
| -class LChunkBuilder BASE_EMBEDDED {
 | 
| +class LChunkBuilder V8_FINAL BASE_EMBEDDED {
 | 
|   public:
 | 
|    LChunkBuilder(CompilationInfo* info, HGraph* graph, LAllocator* allocator)
 | 
|        : chunk_(NULL),
 | 
| 
 |