| Index: vm/object.h
|
| ===================================================================
|
| --- vm/object.h (revision 15432)
|
| +++ vm/object.h (working copy)
|
| @@ -454,26 +454,29 @@
|
| public:
|
| intptr_t instance_size() const {
|
| ASSERT(is_finalized() || is_prefinalized());
|
| - return raw_ptr()->instance_size_;
|
| + return (raw_ptr()->instance_size_in_words_ << kWordSizeLog2);
|
| }
|
| - void set_instance_size(intptr_t value) const {
|
| - ASSERT(Utils::IsAligned(value, kObjectAlignment));
|
| - raw_ptr()->instance_size_ = value;
|
| + void set_instance_size(intptr_t value_in_bytes) const {
|
| + set_instance_size_in_words(value_in_bytes >> kWordSizeLog2);
|
| }
|
| - static intptr_t instance_size_offset() {
|
| - return OFFSET_OF(RawClass, instance_size_);
|
| + void set_instance_size_in_words(intptr_t value) const {
|
| + ASSERT(Utils::IsAligned((value << kWordSizeLog2), kObjectAlignment));
|
| + raw_ptr()->instance_size_in_words_ = value;
|
| }
|
|
|
| intptr_t next_field_offset() const {
|
| - return raw_ptr()->next_field_offset_;
|
| + return raw_ptr()->next_field_offset_in_words_ << kWordSizeLog2;
|
| }
|
| - void set_next_field_offset(intptr_t value) const {
|
| - ASSERT((Utils::IsAligned(value, kObjectAlignment) &&
|
| - (value == raw_ptr()->instance_size_)) ||
|
| - (!Utils::IsAligned(value, kObjectAlignment) &&
|
| - (value + kWordSize == raw_ptr()->instance_size_)));
|
| - raw_ptr()->next_field_offset_ = value;
|
| + void set_next_field_offset(intptr_t value_in_bytes) const {
|
| + set_next_field_offset_in_words(value_in_bytes >> kWordSizeLog2);
|
| }
|
| + void set_next_field_offset_in_words(intptr_t value) const {
|
| + ASSERT((Utils::IsAligned((value << kWordSizeLog2), kObjectAlignment) &&
|
| + (value == raw_ptr()->instance_size_in_words_)) ||
|
| + (!Utils::IsAligned((value << kWordSizeLog2), kObjectAlignment) &&
|
| + ((value + 1) == raw_ptr()->instance_size_in_words_)));
|
| + raw_ptr()->next_field_offset_in_words_ = value;
|
| + }
|
|
|
| cpp_vtable handle_vtable() const { return raw_ptr()->handle_vtable_; }
|
| void set_handle_vtable(cpp_vtable value) const {
|
| @@ -542,14 +545,26 @@
|
| static const intptr_t kNoTypeArguments = -1;
|
| intptr_t type_arguments_field_offset() const {
|
| ASSERT(is_finalized() || is_prefinalized());
|
| - return raw_ptr()->type_arguments_field_offset_;
|
| + if (raw_ptr()->type_arguments_field_offset_in_words_ == kNoTypeArguments) {
|
| + return kNoTypeArguments;
|
| + }
|
| + return raw_ptr()->type_arguments_field_offset_in_words_ << kWordSizeLog2;
|
| }
|
| - void set_type_arguments_field_offset(intptr_t value) const {
|
| - raw_ptr()->type_arguments_field_offset_ = value;
|
| + void set_type_arguments_field_offset(intptr_t value_in_bytes) const {
|
| + intptr_t value;
|
| + if (value_in_bytes == kNoTypeArguments) {
|
| + value = kNoTypeArguments;
|
| + } else {
|
| + value = value_in_bytes >> kWordSizeLog2;
|
| + }
|
| + set_type_arguments_field_offset_in_words(value);
|
| }
|
| - static intptr_t type_arguments_field_offset_offset() {
|
| - return OFFSET_OF(RawClass, type_arguments_field_offset_);
|
| + void set_type_arguments_field_offset_in_words(intptr_t value) const {
|
| + raw_ptr()->type_arguments_field_offset_in_words_ = value;
|
| }
|
| + static intptr_t type_arguments_field_offset_in_words_offset() {
|
| + return OFFSET_OF(RawClass, type_arguments_field_offset_in_words_);
|
| + }
|
|
|
| // The super type of this class, Object type if not explicitly specified.
|
| RawType* super_type() const { return raw_ptr()->super_type_; }
|
| @@ -1591,7 +1606,7 @@
|
| bool is_const() const { return ConstBit::decode(raw_ptr()->kind_bits_); }
|
|
|
| inline intptr_t Offset() const;
|
| - inline void SetOffset(intptr_t value) const;
|
| + inline void SetOffset(intptr_t value_in_bytes) const;
|
|
|
| RawInstance* value() const;
|
| void set_value(const Instance& value) const;
|
| @@ -5929,13 +5944,14 @@
|
|
|
| intptr_t Field::Offset() const {
|
| ASSERT(!is_static()); // Offset is valid only for instance fields.
|
| - return Smi::Value(reinterpret_cast<RawSmi*>(raw_ptr()->value_));
|
| + intptr_t value = Smi::Value(reinterpret_cast<RawSmi*>(raw_ptr()->value_));
|
| + return (value << kWordSizeLog2);
|
| }
|
|
|
|
|
| -void Field::SetOffset(intptr_t value) const {
|
| +void Field::SetOffset(intptr_t value_in_bytes) const {
|
| ASSERT(!is_static()); // SetOffset is valid only for instance fields.
|
| - raw_ptr()->value_ = Smi::New(value);
|
| + raw_ptr()->value_ = Smi::New(value_in_bytes >> kWordSizeLog2);
|
| }
|
|
|
|
|
|
|