| Index: src/deoptimizer.h
|
| diff --git a/src/deoptimizer.h b/src/deoptimizer.h
|
| index 5569f7ffd87d12baff93da0c5eb38a3d7b840d41..5ca635cff16f60b65d5cda69db6460b240edf691 100644
|
| --- a/src/deoptimizer.h
|
| +++ b/src/deoptimizer.h
|
| @@ -75,17 +75,17 @@ class HeapNumberMaterializationDescriptor BASE_EMBEDDED {
|
| };
|
|
|
|
|
| -class ArgumentsObjectMaterializationDescriptor BASE_EMBEDDED {
|
| +class ObjectMaterializationDescriptor BASE_EMBEDDED {
|
| public:
|
| - ArgumentsObjectMaterializationDescriptor(Address slot_address, int argc)
|
| - : slot_address_(slot_address), arguments_length_(argc) { }
|
| + ObjectMaterializationDescriptor(Address slot_address, int length)
|
| + : slot_address_(slot_address), object_length_(length) { }
|
|
|
| Address slot_address() const { return slot_address_; }
|
| - int arguments_length() const { return arguments_length_; }
|
| + int object_length() const { return object_length_; }
|
|
|
| private:
|
| Address slot_address_;
|
| - int arguments_length_;
|
| + int object_length_;
|
| };
|
|
|
|
|
| @@ -369,6 +369,10 @@ class Deoptimizer : public Malloced {
|
| void DoComputeCompiledStubFrame(TranslationIterator* iterator,
|
| int frame_index);
|
|
|
| + void DoTranslateObject(TranslationIterator* iterator,
|
| + int object_opcode,
|
| + int field_index);
|
| +
|
| enum DeoptimizerTranslatedValueType {
|
| TRANSLATED_VALUE_IS_NATIVE,
|
| TRANSLATED_VALUE_IS_TAGGED
|
| @@ -394,8 +398,9 @@ class Deoptimizer : public Malloced {
|
|
|
| Object* ComputeLiteral(int index) const;
|
|
|
| - void AddArgumentsObject(intptr_t slot_address, int argc);
|
| - void AddArgumentsObjectValue(intptr_t value);
|
| + void AddObjectStart(intptr_t slot_address, int argc);
|
| + void AddObjectTaggedValue(intptr_t value);
|
| + void AddObjectDoubleValue(double value);
|
| void AddDoubleValue(intptr_t slot_address, double value);
|
|
|
| static void GenerateDeoptimizationEntries(
|
| @@ -446,8 +451,9 @@ class Deoptimizer : public Malloced {
|
| // Array of output frame descriptions.
|
| FrameDescription** output_;
|
|
|
| - List<Object*> deferred_arguments_objects_values_;
|
| - List<ArgumentsObjectMaterializationDescriptor> deferred_arguments_objects_;
|
| + List<Object*> deferred_objects_tagged_values_;
|
| + List<double> deferred_objects_double_values_;
|
| + List<ObjectMaterializationDescriptor> deferred_objects_;
|
| List<HeapNumberMaterializationDescriptor> deferred_heap_numbers_;
|
| #ifdef DEBUG
|
| DisallowHeapAllocation* disallow_heap_allocation_;
|
| @@ -698,6 +704,7 @@ class Translation BASE_EMBEDDED {
|
| SETTER_STUB_FRAME,
|
| ARGUMENTS_ADAPTOR_FRAME,
|
| COMPILED_STUB_FRAME,
|
| + ARGUMENTS_OBJECT,
|
| REGISTER,
|
| INT32_REGISTER,
|
| UINT32_REGISTER,
|
| @@ -707,7 +714,6 @@ class Translation BASE_EMBEDDED {
|
| UINT32_STACK_SLOT,
|
| DOUBLE_STACK_SLOT,
|
| LITERAL,
|
| - ARGUMENTS_OBJECT,
|
|
|
| // A prefix indicating that the next command is a duplicate of the one
|
| // that follows it.
|
| @@ -733,6 +739,7 @@ class Translation BASE_EMBEDDED {
|
| void BeginConstructStubFrame(int literal_id, unsigned height);
|
| void BeginGetterStubFrame(int literal_id);
|
| void BeginSetterStubFrame(int literal_id);
|
| + void BeginArgumentsObject(int args_length);
|
| void StoreRegister(Register reg);
|
| void StoreInt32Register(Register reg);
|
| void StoreUint32Register(Register reg);
|
| @@ -742,7 +749,6 @@ class Translation BASE_EMBEDDED {
|
| void StoreUint32StackSlot(int index);
|
| void StoreDoubleStackSlot(int index);
|
| void StoreLiteral(int literal_id);
|
| - void StoreArgumentsObject(bool args_known, int args_index, int args_length);
|
| void MarkDuplicate();
|
|
|
| Zone* zone() const { return zone_; }
|
|
|