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