Index: src/deoptimizer.h |
diff --git a/src/deoptimizer.h b/src/deoptimizer.h |
index 51cc565fd3a7a449abc54d99f74a18d28c1b1670..9b8509e0f5973180a6284ef6f0e466f487c276f2 100644 |
--- a/src/deoptimizer.h |
+++ b/src/deoptimizer.h |
@@ -116,6 +116,7 @@ class TranslatedFrame { |
kInterpretedFunction, |
kGetter, |
kSetter, |
+ kTailCallerFunction, |
kArgumentsAdaptor, |
kConstructStub, |
kCompiledStub, |
@@ -186,6 +187,7 @@ class TranslatedFrame { |
SharedFunctionInfo* shared_info); |
static TranslatedFrame ArgumentsAdaptorFrame(SharedFunctionInfo* shared_info, |
int height); |
+ static TranslatedFrame TailCallerFrame(SharedFunctionInfo* shared_info); |
static TranslatedFrame ConstructStubFrame(SharedFunctionInfo* shared_info, |
int height); |
static TranslatedFrame CompiledStubFrame(int height, Isolate* isolate) { |
@@ -529,6 +531,10 @@ class Deoptimizer : public Malloced { |
} |
static int output_offset() { return OFFSET_OF(Deoptimizer, output_); } |
+ static int caller_frame_top_offset() { |
+ return OFFSET_OF(Deoptimizer, caller_frame_top_); |
+ } |
+ |
static int GetDeoptimizedCodeCount(Isolate* isolate); |
static const int kNotDeoptimizationEntry = -1; |
@@ -582,12 +588,20 @@ class Deoptimizer : public Malloced { |
void DeleteFrameDescriptions(); |
void DoComputeOutputFrames(); |
- void DoComputeJSFrame(int frame_index, bool goto_catch_handler); |
- void DoComputeInterpretedFrame(int frame_index, bool goto_catch_handler); |
- void DoComputeArgumentsAdaptorFrame(int frame_index); |
- void DoComputeConstructStubFrame(int frame_index); |
- void DoComputeAccessorStubFrame(int frame_index, bool is_setter_stub_frame); |
- void DoComputeCompiledStubFrame(int frame_index); |
+ void DoComputeJSFrame(TranslatedFrame* translated_frame, int frame_index, |
+ bool goto_catch_handler); |
+ void DoComputeInterpretedFrame(TranslatedFrame* translated_frame, |
+ int frame_index, bool goto_catch_handler); |
+ void DoComputeArgumentsAdaptorFrame(TranslatedFrame* translated_frame, |
+ int frame_index); |
+ void DoComputeTailCallerFrame(TranslatedFrame* translated_frame, |
+ int frame_index); |
+ void DoComputeConstructStubFrame(TranslatedFrame* translated_frame, |
+ int frame_index); |
+ void DoComputeAccessorStubFrame(TranslatedFrame* translated_frame, |
+ int frame_index, bool is_setter_stub_frame); |
+ void DoComputeCompiledStubFrame(TranslatedFrame* translated_frame, |
+ int frame_index); |
void WriteTranslatedValueToOutput( |
TranslatedFrame::iterator* iterator, int* input_index, int frame_index, |
@@ -935,6 +949,7 @@ class TranslationIterator BASE_EMBEDDED { |
V(GETTER_STUB_FRAME) \ |
V(SETTER_STUB_FRAME) \ |
V(ARGUMENTS_ADAPTOR_FRAME) \ |
+ V(TAIL_CALLER_FRAME) \ |
V(COMPILED_STUB_FRAME) \ |
V(DUPLICATED_OBJECT) \ |
V(ARGUMENTS_OBJECT) \ |
@@ -978,6 +993,7 @@ class Translation BASE_EMBEDDED { |
unsigned height); |
void BeginCompiledStubFrame(int height); |
void BeginArgumentsAdaptorFrame(int literal_id, unsigned height); |
+ void BeginTailCallerFrame(int literal_id); |
void BeginConstructStubFrame(int literal_id, unsigned height); |
void BeginGetterStubFrame(int literal_id); |
void BeginSetterStubFrame(int literal_id); |