diff options
Diffstat (limited to 'deps/v8/src/frames.h')
-rw-r--r-- | deps/v8/src/frames.h | 78 |
1 files changed, 41 insertions, 37 deletions
diff --git a/deps/v8/src/frames.h b/deps/v8/src/frames.h index 1d658264ab..fed11c4faf 100644 --- a/deps/v8/src/frames.h +++ b/deps/v8/src/frames.h @@ -49,36 +49,36 @@ class StackFrameIterator; class ThreadLocalTop; class Isolate; -class InnerPointerToCodeCache { +class PcToCodeCache { public: - struct InnerPointerToCodeCacheEntry { - Address inner_pointer; + struct PcToCodeCacheEntry { + Address pc; Code* code; SafepointEntry safepoint_entry; }; - explicit InnerPointerToCodeCache(Isolate* isolate) : isolate_(isolate) { + explicit PcToCodeCache(Isolate* isolate) : isolate_(isolate) { Flush(); } - Code* GcSafeFindCodeForInnerPointer(Address inner_pointer); - Code* GcSafeCastToCode(HeapObject* object, Address inner_pointer); + Code* GcSafeFindCodeForPc(Address pc); + Code* GcSafeCastToCode(HeapObject* object, Address pc); void Flush() { memset(&cache_[0], 0, sizeof(cache_)); } - InnerPointerToCodeCacheEntry* GetCacheEntry(Address inner_pointer); + PcToCodeCacheEntry* GetCacheEntry(Address pc); private: - InnerPointerToCodeCacheEntry* cache(int index) { return &cache_[index]; } + PcToCodeCacheEntry* cache(int index) { return &cache_[index]; } Isolate* isolate_; - static const int kInnerPointerToCodeCacheSize = 1024; - InnerPointerToCodeCacheEntry cache_[kInnerPointerToCodeCacheSize]; + static const int kPcToCodeCacheSize = 1024; + PcToCodeCacheEntry cache_[kPcToCodeCacheSize]; - DISALLOW_COPY_AND_ASSIGN(InnerPointerToCodeCache); + DISALLOW_COPY_AND_ASSIGN(PcToCodeCache); }; @@ -106,9 +106,9 @@ class StackHandler BASE_EMBEDDED { static inline StackHandler* FromAddress(Address address); // Testers - inline bool is_entry() const; - inline bool is_try_catch() const; - inline bool is_try_finally() const; + bool is_entry() { return state() == ENTRY; } + bool is_try_catch() { return state() == TRY_CATCH; } + bool is_try_finally() { return state() == TRY_FINALLY; } private: // Accessors. @@ -139,10 +139,7 @@ class StackFrame BASE_EMBEDDED { enum Type { NONE = 0, STACK_FRAME_TYPE_LIST(DECLARE_TYPE) - NUMBER_OF_TYPES, - // Used by FrameScope to indicate that the stack frame is constructed - // manually and the FrameScope does not need to emit code. - MANUAL + NUMBER_OF_TYPES }; #undef DECLARE_TYPE @@ -218,7 +215,9 @@ class StackFrame BASE_EMBEDDED { virtual Code* unchecked_code() const = 0; // Get the code associated with this frame. - inline Code* LookupCode() const; + Code* LookupCode() const { + return GetContainingCode(isolate(), pc()); + } // Get the code object that contains the given pc. static inline Code* GetContainingCode(Isolate* isolate, Address pc); @@ -300,7 +299,7 @@ class EntryFrame: public StackFrame { virtual void SetCallerFp(Address caller_fp); protected: - inline explicit EntryFrame(StackFrameIterator* iterator); + explicit EntryFrame(StackFrameIterator* iterator) : StackFrame(iterator) { } // The caller stack pointer for entry frames is always zero. The // real information about the caller frame is available through the @@ -327,7 +326,8 @@ class EntryConstructFrame: public EntryFrame { } protected: - inline explicit EntryConstructFrame(StackFrameIterator* iterator); + explicit EntryConstructFrame(StackFrameIterator* iterator) + : EntryFrame(iterator) { } private: friend class StackFrameIterator; @@ -361,7 +361,7 @@ class ExitFrame: public StackFrame { static void FillState(Address fp, Address sp, State* state); protected: - inline explicit ExitFrame(StackFrameIterator* iterator); + explicit ExitFrame(StackFrameIterator* iterator) : StackFrame(iterator) { } virtual Address GetCallerStackPointer() const; @@ -394,7 +394,8 @@ class StandardFrame: public StackFrame { } protected: - inline explicit StandardFrame(StackFrameIterator* iterator); + explicit StandardFrame(StackFrameIterator* iterator) + : StackFrame(iterator) { } virtual void ComputeCallerState(State* state) const; @@ -513,7 +514,8 @@ class JavaScriptFrame: public StandardFrame { } protected: - inline explicit JavaScriptFrame(StackFrameIterator* iterator); + explicit JavaScriptFrame(StackFrameIterator* iterator) + : StandardFrame(iterator) { } virtual Address GetCallerStackPointer() const; @@ -550,7 +552,8 @@ class OptimizedFrame : public JavaScriptFrame { DeoptimizationInputData* GetDeoptimizationData(int* deopt_index); protected: - inline explicit OptimizedFrame(StackFrameIterator* iterator); + explicit OptimizedFrame(StackFrameIterator* iterator) + : JavaScriptFrame(iterator) { } private: friend class StackFrameIterator; @@ -578,9 +581,12 @@ class ArgumentsAdaptorFrame: public JavaScriptFrame { int index) const; protected: - inline explicit ArgumentsAdaptorFrame(StackFrameIterator* iterator); + explicit ArgumentsAdaptorFrame(StackFrameIterator* iterator) + : JavaScriptFrame(iterator) { } - virtual int GetNumberOfIncomingArguments() const; + virtual int GetNumberOfIncomingArguments() const { + return Smi::cast(GetExpression(0))->value(); + } virtual Address GetCallerStackPointer() const; @@ -605,7 +611,8 @@ class InternalFrame: public StandardFrame { } protected: - inline explicit InternalFrame(StackFrameIterator* iterator); + explicit InternalFrame(StackFrameIterator* iterator) + : StandardFrame(iterator) { } virtual Address GetCallerStackPointer() const; @@ -626,7 +633,8 @@ class ConstructFrame: public InternalFrame { } protected: - inline explicit ConstructFrame(StackFrameIterator* iterator); + explicit ConstructFrame(StackFrameIterator* iterator) + : InternalFrame(iterator) { } private: friend class StackFrameIterator; @@ -707,19 +715,15 @@ class JavaScriptFrameIteratorTemp BASE_EMBEDDED { inline JavaScriptFrameIteratorTemp(Isolate* isolate, StackFrame::Id id); - JavaScriptFrameIteratorTemp(Address fp, - Address sp, - Address low_bound, - Address high_bound) : + JavaScriptFrameIteratorTemp(Address fp, Address sp, + Address low_bound, Address high_bound) : iterator_(fp, sp, low_bound, high_bound) { if (!done()) Advance(); } JavaScriptFrameIteratorTemp(Isolate* isolate, - Address fp, - Address sp, - Address low_bound, - Address high_bound) : + Address fp, Address sp, + Address low_bound, Address high_bound) : iterator_(isolate, fp, sp, low_bound, high_bound) { if (!done()) Advance(); } |