| Index: src/code-stubs.h
|
| diff --git a/src/code-stubs.h b/src/code-stubs.h
|
| index 8cba9661917c64c9745ec44a9a494a5ec7ba3ae9..7e2ebe4d52730bb7527284523cc310d54f22bd8a 100644
|
| --- a/src/code-stubs.h
|
| +++ b/src/code-stubs.h
|
| @@ -47,6 +47,7 @@ namespace internal {
|
| V(Compare) \
|
| V(CompareIC) \
|
| V(MathPow) \
|
| + V(StringLength) \
|
| V(RecordWrite) \
|
| V(StoreBufferOverflow) \
|
| V(RegExpExec) \
|
| @@ -539,6 +540,45 @@ class MathPowStub: public PlatformCodeStub {
|
| };
|
|
|
|
|
| +class ICStub: public PlatformCodeStub {
|
| + public:
|
| + explicit ICStub(Code::Kind kind) : kind_(kind) { }
|
| + virtual int GetCodeKind() { return kind_; }
|
| + virtual InlineCacheState GetICState() { return MONOMORPHIC; }
|
| +
|
| + bool Describes(Code* code) {
|
| + return GetMajorKey(code) == MajorKey() && code->stub_info() == MinorKey();
|
| + }
|
| +
|
| + protected:
|
| + class KindBits: public BitField<Code::Kind, 0, 4> {};
|
| + virtual void FinishCode(Handle<Code> code) {
|
| + code->set_stub_info(MinorKey());
|
| + }
|
| + Code::Kind kind() { return kind_; }
|
| +
|
| + private:
|
| + Code::Kind kind_;
|
| +};
|
| +
|
| +
|
| +class StringLengthStub: public ICStub {
|
| + public:
|
| + StringLengthStub(Code::Kind kind, bool support_wrapper)
|
| + : ICStub(kind), support_wrapper_(support_wrapper) { }
|
| + virtual void Generate(MacroAssembler* masm);
|
| +
|
| + private:
|
| + class WrapperModeBits: public BitField<bool, 4, 1> {};
|
| + virtual CodeStub::Major MajorKey() { return StringLength; }
|
| + virtual int MinorKey() {
|
| + return KindBits::encode(kind()) | WrapperModeBits::encode(support_wrapper_);
|
| + }
|
| +
|
| + bool support_wrapper_;
|
| +};
|
| +
|
| +
|
| class BinaryOpStub: public PlatformCodeStub {
|
| public:
|
| BinaryOpStub(Token::Value op, OverwriteMode mode)
|
|
|