Index: src/deoptimizer.h |
diff --git a/src/deoptimizer.h b/src/deoptimizer.h |
index db6a59a259bd4b4fa3d28da6c34d3bf308d459d9..6be5d6345483340856921ee809ebd585eba7c8ee 100644 |
--- a/src/deoptimizer.h |
+++ b/src/deoptimizer.h |
@@ -287,6 +287,8 @@ class Deoptimizer : public Malloced { |
void DoComputeJSFrame(TranslationIterator* iterator, int frame_index); |
void DoComputeArgumentsAdaptorFrame(TranslationIterator* iterator, |
int frame_index); |
+ void DoComputeConstructStubFrame(TranslationIterator* iterator, |
+ int frame_index); |
void DoTranslateCommand(TranslationIterator* iterator, |
int frame_index, |
unsigned output_offset); |
@@ -435,6 +437,9 @@ class FrameDescription { |
intptr_t GetFp() const { return fp_; } |
void SetFp(intptr_t fp) { fp_ = fp; } |
+ intptr_t GetContext() const { return context_; } |
+ void SetContext(intptr_t context) { context_ = context; } |
+ |
Smi* GetState() const { return state_; } |
void SetState(Smi* state) { state_ = state; } |
@@ -496,6 +501,7 @@ class FrameDescription { |
intptr_t top_; |
intptr_t pc_; |
intptr_t fp_; |
+ intptr_t context_; |
StackFrame::Type type_; |
Smi* state_; |
#ifdef DEBUG |
@@ -560,6 +566,7 @@ class Translation BASE_EMBEDDED { |
enum Opcode { |
BEGIN, |
JS_FRAME, |
+ CONSTRUCT_STUB_FRAME, |
ARGUMENTS_ADAPTOR_FRAME, |
REGISTER, |
INT32_REGISTER, |
@@ -588,6 +595,7 @@ class Translation BASE_EMBEDDED { |
// Commands. |
void BeginJSFrame(int node_id, int literal_id, unsigned height); |
void BeginArgumentsAdaptorFrame(int literal_id, unsigned height); |
+ void BeginConstructStubFrame(int literal_id, unsigned height); |
void StoreRegister(Register reg); |
void StoreInt32Register(Register reg); |
void StoreDoubleRegister(DoubleRegister reg); |
@@ -720,7 +728,8 @@ class DeoptimizedFrameInfo : public Malloced { |
public: |
DeoptimizedFrameInfo(Deoptimizer* deoptimizer, |
int frame_index, |
- bool has_arguments_adaptor); |
+ bool has_arguments_adaptor, |
+ bool has_construct_stub); |
virtual ~DeoptimizedFrameInfo(); |
// GC support. |
@@ -737,6 +746,12 @@ class DeoptimizedFrameInfo : public Malloced { |
return function_; |
} |
+ // Check if this frame is preceded by construct stub frame. The bottom-most |
+ // inlined frame might still be called by an uninlined construct stub. |
+ bool HasConstructStub() { |
+ return has_construct_stub_; |
+ } |
+ |
// Get an incoming argument. |
Object* GetParameter(int index) { |
ASSERT(0 <= index && index < parameters_count()); |
@@ -754,11 +769,6 @@ class DeoptimizedFrameInfo : public Malloced { |
} |
private: |
- // Set the frame function. |
- void SetFunction(JSFunction* function) { |
- function_ = function; |
- } |
- |
// Set an incoming argument. |
void SetParameter(int index, Object* obj) { |
ASSERT(0 <= index && index < parameters_count()); |
@@ -772,6 +782,7 @@ class DeoptimizedFrameInfo : public Malloced { |
} |
JSFunction* function_; |
+ bool has_construct_stub_; |
int parameters_count_; |
int expression_count_; |
Object** parameters_; |