Chromium Code Reviews| Index: runtime/vm/object.h |
| =================================================================== |
| --- runtime/vm/object.h (revision 4401) |
| +++ runtime/vm/object.h (working copy) |
| @@ -159,6 +159,7 @@ |
| kLanguageErrorClass, |
| kUnhandledExceptionClass, |
| kUnwindErrorClass, |
| + kICDataClass, |
| kMaxId, |
| kInvalidIndex = -1, |
| }; |
| @@ -297,6 +298,7 @@ |
| return unhandled_exception_class_; |
| } |
| static RawClass* unwind_error_class() { return unwind_error_class_; } |
| + static RawClass* icdata_class() { return icdata_class_; } |
| static int GetSingletonClassIndex(const RawClass* raw_class); |
| static RawClass* GetSingletonClass(int index); |
| @@ -403,6 +405,7 @@ |
| static RawClass* language_error_class_; // Class of LanguageError. |
| static RawClass* unhandled_exception_class_; // Class of UnhandledException. |
| static RawClass* unwind_error_class_; // Class of UnwindError. |
| + static RawClass* icdata_class_; // Class of ICData. |
| friend void RawObject::Validate() const; |
| friend class SnapshotReader; |
| @@ -2085,10 +2088,6 @@ |
| StorePointer(&raw_ptr()->var_descriptors_, value.raw()); |
| } |
| - // See class ICData for interpretation of the 'ic_data_' array. |
| - RawArray* ic_data() const; |
| - void set_ic_data(const Array& ic_data) const; |
| - |
| RawExceptionHandlers* exception_handlers() const { |
| return raw_ptr()->exception_handlers_; |
| } |
| @@ -2131,8 +2130,9 @@ |
| bool ObjectExistInArea(intptr_t start_offest, intptr_t end_offset) const; |
| // Each (*node_ids)[n] has a an extracted ic data array (*arrays)[n]. |
| - void ExtractIcDataArraysAtCalls(GrowableArray<intptr_t>* node_ids, |
| - GrowableArray<const Array*>* arrays) const; |
| + void ExtractIcDataArraysAtCalls( |
| + GrowableArray<intptr_t>* node_ids, |
| + GrowableArray<const ICData*>* ic_data_objs) const; |
| private: |
| static const intptr_t kEntrySize = sizeof(int32_t); // NOLINT |
| @@ -3612,6 +3612,74 @@ |
| }; |
| +// Object holding information about an IC: test classes and their |
| +// corresponding classes. |
| +class ICData : public Instance { |
| + public: |
| + static RawICData* New(const Function& caller_function, |
| + const String& target_name, |
| + intptr_t id, |
| + intptr_t num_args_tested); |
|
regis
2012/02/21 21:51:34
We usually list the New method last, just before t
srdjan
2012/02/22 14:59:45
Done.
|
| + |
| + RawFunction* function() const { |
| + return raw_ptr()->function_; |
| + } |
| + |
| + RawString* target_name() const { |
| + return raw_ptr()->target_name_; |
| + } |
| + |
| + RawArray* ic_data() const { |
| + return raw_ptr()->ic_data_; |
| + } |
| + |
| + intptr_t num_args_tested() const { |
| + return raw_ptr()->num_args_tested_; |
| + } |
| + |
| + intptr_t id() const { |
| + return raw_ptr()->id_; |
| + } |
| + |
| + intptr_t NumberOfChecks() const; |
| + |
| + static intptr_t InstanceSize() { |
| + return RoundedAllocationSize(sizeof(RawICData)); |
| + } |
| + |
| + static intptr_t target_name_offset() { |
| + return OFFSET_OF(RawICData, target_name_); |
| + } |
| + |
| + static intptr_t num_args_tested_offset() { |
| + return OFFSET_OF(RawICData, num_args_tested_); |
| + } |
| + |
| + static intptr_t ic_data_offset() { |
| + return OFFSET_OF(RawICData, ic_data_); |
| + } |
| + |
| + void AddCheck(const GrowableArray<const Class*>& classes, |
| + const Function& target) const; |
| + void GetCheckAt(intptr_t index, |
| + GrowableArray<const Class*>* classes, |
| + Function* target) const; |
| + void GetOneClassCheckAt(int index, Class* cls, Function* target) const; |
| + |
| + private: |
|
regis
2012/02/21 21:51:34
Many classes just use "value" as the formal parame
srdjan
2012/02/22 14:59:45
Changing to value
|
| + void set_function(const Function& function) const; |
| + void set_target_name(const String& target_name) const; |
| + void set_id(intptr_t id) const; |
| + void set_num_args_tested(intptr_t num_args_tested) const; |
| + void set_ic_data(const Array& array) const; |
| + |
| + intptr_t TestEntryLength() const; |
| + |
| + HEAP_OBJECT_IMPLEMENTATION(ICData, Instance); |
| + friend class Class; |
| +}; |
| + |
| + |
| // Breaking cycles and loops. |
| RawClass* Object::clazz() const { |
| uword raw_value = reinterpret_cast<uword>(raw_); |