summaryrefslogtreecommitdiff
path: root/deps/v8/src/frames.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/frames.h')
-rw-r--r--deps/v8/src/frames.h78
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();
}