diff options
Diffstat (limited to 'deps/v8/src/deoptimizer.h')
-rw-r--r-- | deps/v8/src/deoptimizer.h | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/deps/v8/src/deoptimizer.h b/deps/v8/src/deoptimizer.h index 5501ca6cf2..bd9ba8ea24 100644 --- a/deps/v8/src/deoptimizer.h +++ b/deps/v8/src/deoptimizer.h @@ -132,7 +132,8 @@ class TranslatedValue { Float32 float_value_; // kind is kDouble Float64 double_value_; - // kind is kDuplicatedObject or kArgumentsObject or kCapturedObject. + // kind is kDuplicatedObject or kArgumentsObject or + // kCapturedObject. MaterializedObjectInfo materialization_info_; }; @@ -305,7 +306,7 @@ class TranslatedState { void Init(Address input_frame_pointer, TranslationIterator* iterator, FixedArray* literal_array, RegisterValues* registers, - FILE* trace_file); + FILE* trace_file, int parameter_count); private: friend TranslatedValue; @@ -314,12 +315,14 @@ class TranslatedState { FixedArray* literal_array, Address fp, FILE* trace_file); - TranslatedValue CreateNextTranslatedValue(int frame_index, int value_index, - TranslationIterator* iterator, - FixedArray* literal_array, - Address fp, - RegisterValues* registers, - FILE* trace_file); + int CreateNextTranslatedValue(int frame_index, TranslationIterator* iterator, + FixedArray* literal_array, Address fp, + RegisterValues* registers, FILE* trace_file); + Address ComputeArgumentsPosition(Address input_frame_pointer, bool is_rest, + int* length); + void CreateArgumentsElementsTranslatedValues(int frame_index, + Address input_frame_pointer, + bool is_rest); void UpdateFromPreviouslyMaterializedObjects(); Handle<Object> MaterializeAt(int frame_index, int* value_index); @@ -337,6 +340,7 @@ class TranslatedState { Isolate* isolate_; Address stack_frame_pointer_; bool has_adapted_arguments_; + int formal_parameter_count_; struct ObjectPosition { int frame_index_; @@ -349,16 +353,7 @@ class TranslatedState { class OptimizedFunctionVisitor BASE_EMBEDDED { public: virtual ~OptimizedFunctionVisitor() {} - - // Function which is called before iteration of any optimized functions - // from given native context. - virtual void EnterContext(Context* context) = 0; - virtual void VisitFunction(JSFunction* function) = 0; - - // Function which is called after iteration of all optimized functions - // from given native context. - virtual void LeaveContext(Context* context) = 0; }; class Deoptimizer : public Malloced { @@ -472,6 +467,8 @@ class Deoptimizer : public Malloced { static void VisitAllOptimizedFunctions( Isolate* isolate, OptimizedFunctionVisitor* visitor); + static void UnlinkOptimizedCode(Code* code, Context* native_context); + // The size in bytes of the code required at a lazy deopt patch site. static int patch_size(); @@ -819,6 +816,10 @@ class FrameDescription { return OFFSET_OF(FrameDescription, register_values_.double_registers_); } + static int float_registers_offset() { + return OFFSET_OF(FrameDescription, register_values_.float_registers_); + } + static int frame_size_offset() { return offsetof(FrameDescription, frame_size_); } @@ -932,6 +933,8 @@ class TranslationIterator BASE_EMBEDDED { V(COMPILED_STUB_FRAME) \ V(DUPLICATED_OBJECT) \ V(ARGUMENTS_OBJECT) \ + V(ARGUMENTS_ELEMENTS) \ + V(ARGUMENTS_LENGTH) \ V(CAPTURED_OBJECT) \ V(REGISTER) \ V(INT32_REGISTER) \ @@ -980,6 +983,8 @@ class Translation BASE_EMBEDDED { void BeginGetterStubFrame(int literal_id); void BeginSetterStubFrame(int literal_id); void BeginArgumentsObject(int args_length); + void ArgumentsElements(bool is_rest); + void ArgumentsLength(bool is_rest); void BeginCapturedObject(int length); void DuplicateObject(int object_index); void StoreRegister(Register reg); @@ -1023,7 +1028,7 @@ class MaterializedObjectStore { bool Remove(Address fp); private: - Isolate* isolate() { return isolate_; } + Isolate* isolate() const { return isolate_; } Handle<FixedArray> GetStackEntries(); Handle<FixedArray> EnsureStackEntries(int size); |