Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: vm/object.h

Issue 11421117: Fix for issue 6359 - Make snapshots platform independent. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/runtime/
Patch Set: Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « vm/heap_profiler.cc ('k') | vm/object.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef VM_OBJECT_H_ 5 #ifndef VM_OBJECT_H_
6 #define VM_OBJECT_H_ 6 #define VM_OBJECT_H_
7 7
8 #include "include/dart_api.h" 8 #include "include/dart_api.h"
9 #include "platform/assert.h" 9 #include "platform/assert.h"
10 #include "platform/utils.h" 10 #include "platform/utils.h"
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after
447 void* operator new(size_t size); 447 void* operator new(size_t size);
448 // Disallow copy constructor. 448 // Disallow copy constructor.
449 DISALLOW_COPY_AND_ASSIGN(Object); 449 DISALLOW_COPY_AND_ASSIGN(Object);
450 }; 450 };
451 451
452 452
453 class Class : public Object { 453 class Class : public Object {
454 public: 454 public:
455 intptr_t instance_size() const { 455 intptr_t instance_size() const {
456 ASSERT(is_finalized() || is_prefinalized()); 456 ASSERT(is_finalized() || is_prefinalized());
457 return raw_ptr()->instance_size_; 457 return (raw_ptr()->instance_size_in_words_ * kWordSize);
458 } 458 }
459 void set_instance_size(intptr_t value) const { 459 void set_instance_size(intptr_t value_in_bytes) const {
460 ASSERT(Utils::IsAligned(value, kObjectAlignment)); 460 ASSERT(kWordSize != 0);
461 raw_ptr()->instance_size_ = value; 461 set_instance_size_in_words(value_in_bytes / kWordSize);
462 } 462 }
463 static intptr_t instance_size_offset() { 463 void set_instance_size_in_words(intptr_t value) const {
464 return OFFSET_OF(RawClass, instance_size_); 464 ASSERT(Utils::IsAligned((value * kWordSize), kObjectAlignment));
465 raw_ptr()->instance_size_in_words_ = value;
465 } 466 }
466 467
467 intptr_t next_field_offset() const { 468 intptr_t next_field_offset() const {
468 return raw_ptr()->next_field_offset_; 469 return raw_ptr()->next_field_offset_in_words_ * kWordSize;
469 } 470 }
470 void set_next_field_offset(intptr_t value) const { 471 void set_next_field_offset(intptr_t value_in_bytes) const {
471 ASSERT((Utils::IsAligned(value, kObjectAlignment) && 472 ASSERT(kWordSize != 0);
472 (value == raw_ptr()->instance_size_)) || 473 set_next_field_offset_in_words(value_in_bytes / kWordSize);
473 (!Utils::IsAligned(value, kObjectAlignment) && 474 }
474 (value + kWordSize == raw_ptr()->instance_size_))); 475 void set_next_field_offset_in_words(intptr_t value) const {
475 raw_ptr()->next_field_offset_ = value; 476 ASSERT((Utils::IsAligned((value * kWordSize), kObjectAlignment) &&
477 (value == raw_ptr()->instance_size_in_words_)) ||
478 (!Utils::IsAligned((value * kWordSize), kObjectAlignment) &&
479 ((value + 1) == raw_ptr()->instance_size_in_words_)));
480 raw_ptr()->next_field_offset_in_words_ = value;
476 } 481 }
477 482
478 cpp_vtable handle_vtable() const { return raw_ptr()->handle_vtable_; } 483 cpp_vtable handle_vtable() const { return raw_ptr()->handle_vtable_; }
479 void set_handle_vtable(cpp_vtable value) const { 484 void set_handle_vtable(cpp_vtable value) const {
480 raw_ptr()->handle_vtable_ = value; 485 raw_ptr()->handle_vtable_ = value;
481 } 486 }
482 487
483 intptr_t id() const { return raw_ptr()->id_; } 488 intptr_t id() const { return raw_ptr()->id_; }
484 void set_id(intptr_t value) const { 489 void set_id(intptr_t value) const {
485 raw_ptr()->id_ = value; 490 raw_ptr()->id_ = value;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 540
536 // The type argument vector is flattened and includes the type arguments of 541 // The type argument vector is flattened and includes the type arguments of
537 // the super class. 542 // the super class.
538 bool HasTypeArguments() const; 543 bool HasTypeArguments() const;
539 intptr_t NumTypeArguments() const; 544 intptr_t NumTypeArguments() const;
540 545
541 // If this class is parameterized, each instance has a type_arguments field. 546 // If this class is parameterized, each instance has a type_arguments field.
542 static const intptr_t kNoTypeArguments = -1; 547 static const intptr_t kNoTypeArguments = -1;
543 intptr_t type_arguments_field_offset() const { 548 intptr_t type_arguments_field_offset() const {
544 ASSERT(is_finalized() || is_prefinalized()); 549 ASSERT(is_finalized() || is_prefinalized());
545 return raw_ptr()->type_arguments_field_offset_; 550 if (raw_ptr()->type_arguments_field_offset_in_words_ == kNoTypeArguments) {
551 return kNoTypeArguments;
552 }
553 return raw_ptr()->type_arguments_field_offset_in_words_ * kWordSize;
546 } 554 }
547 void set_type_arguments_field_offset(intptr_t value) const { 555 void set_type_arguments_field_offset(intptr_t value_in_bytes) const {
548 raw_ptr()->type_arguments_field_offset_ = value; 556 intptr_t value;
557 if (value_in_bytes == kNoTypeArguments) {
558 value = kNoTypeArguments;
559 } else {
560 ASSERT(kWordSize != 0);
561 value = value_in_bytes / kWordSize;
562 }
563 set_type_arguments_field_offset_in_words(value);
549 } 564 }
550 static intptr_t type_arguments_field_offset_offset() { 565 void set_type_arguments_field_offset_in_words(intptr_t value) const {
551 return OFFSET_OF(RawClass, type_arguments_field_offset_); 566 raw_ptr()->type_arguments_field_offset_in_words_ = value;
567 }
568 static intptr_t type_arguments_field_offset_in_words_offset() {
569 return OFFSET_OF(RawClass, type_arguments_field_offset_in_words_);
552 } 570 }
553 571
554 // The super type of this class, Object type if not explicitly specified. 572 // The super type of this class, Object type if not explicitly specified.
555 RawType* super_type() const { return raw_ptr()->super_type_; } 573 RawType* super_type() const { return raw_ptr()->super_type_; }
556 void set_super_type(const Type& value) const; 574 void set_super_type(const Type& value) const;
557 static intptr_t super_type_offset() { 575 static intptr_t super_type_offset() {
558 return OFFSET_OF(RawClass, super_type_); 576 return OFFSET_OF(RawClass, super_type_);
559 } 577 }
560 578
561 // Asserts that the class of the super type has been resolved. 579 // Asserts that the class of the super type has been resolved.
(...skipping 1009 matching lines...) Expand 10 before | Expand all | Expand 10 after
1571 public: 1589 public:
1572 RawString* name() const { return raw_ptr()->name_; } 1590 RawString* name() const { return raw_ptr()->name_; }
1573 RawString* UserVisibleName() const; 1591 RawString* UserVisibleName() const;
1574 virtual RawString* DictionaryName() const { return name(); } 1592 virtual RawString* DictionaryName() const { return name(); }
1575 1593
1576 bool is_static() const { return StaticBit::decode(raw_ptr()->kind_bits_); } 1594 bool is_static() const { return StaticBit::decode(raw_ptr()->kind_bits_); }
1577 bool is_final() const { return FinalBit::decode(raw_ptr()->kind_bits_); } 1595 bool is_final() const { return FinalBit::decode(raw_ptr()->kind_bits_); }
1578 bool is_const() const { return ConstBit::decode(raw_ptr()->kind_bits_); } 1596 bool is_const() const { return ConstBit::decode(raw_ptr()->kind_bits_); }
1579 1597
1580 inline intptr_t Offset() const; 1598 inline intptr_t Offset() const;
1581 inline void SetOffset(intptr_t value) const; 1599 inline void SetOffset(intptr_t value_in_bytes) const;
1582 1600
1583 RawInstance* value() const; 1601 RawInstance* value() const;
1584 void set_value(const Instance& value) const; 1602 void set_value(const Instance& value) const;
1585 1603
1586 RawClass* owner() const { return raw_ptr()->owner_; } 1604 RawClass* owner() const { return raw_ptr()->owner_; }
1587 1605
1588 RawAbstractType* type() const { return raw_ptr()->type_; } 1606 RawAbstractType* type() const { return raw_ptr()->type_; }
1589 void set_type(const AbstractType& value) const; 1607 void set_type(const AbstractType& value) const;
1590 1608
1591 static intptr_t InstanceSize() { 1609 static intptr_t InstanceSize() {
(...skipping 4317 matching lines...) Expand 10 before | Expand all | Expand 10 after
5909 } 5927 }
5910 5928
5911 5929
5912 bool Function::HasCode() const { 5930 bool Function::HasCode() const {
5913 return raw_ptr()->code_ != Code::null(); 5931 return raw_ptr()->code_ != Code::null();
5914 } 5932 }
5915 5933
5916 5934
5917 intptr_t Field::Offset() const { 5935 intptr_t Field::Offset() const {
5918 ASSERT(!is_static()); // Offset is valid only for instance fields. 5936 ASSERT(!is_static()); // Offset is valid only for instance fields.
5919 return Smi::Value(reinterpret_cast<RawSmi*>(raw_ptr()->value_)); 5937 intptr_t value = Smi::Value(reinterpret_cast<RawSmi*>(raw_ptr()->value_));
5938 return (value * kWordSize);
5920 } 5939 }
5921 5940
5922 5941
5923 void Field::SetOffset(intptr_t value) const { 5942 void Field::SetOffset(intptr_t value_in_bytes) const {
5924 ASSERT(!is_static()); // SetOffset is valid only for instance fields. 5943 ASSERT(!is_static()); // SetOffset is valid only for instance fields.
5925 raw_ptr()->value_ = Smi::New(value); 5944 ASSERT(kWordSize != 0);
5945 raw_ptr()->value_ = Smi::New(value_in_bytes / kWordSize);
5926 } 5946 }
5927 5947
5928 5948
5929 void Context::SetAt(intptr_t index, const Instance& value) const { 5949 void Context::SetAt(intptr_t index, const Instance& value) const {
5930 StorePointer(InstanceAddr(index), value.raw()); 5950 StorePointer(InstanceAddr(index), value.raw());
5931 } 5951 }
5932 5952
5933 5953
5934 intptr_t Instance::GetNativeField(Isolate* isolate, int index) const { 5954 intptr_t Instance::GetNativeField(Isolate* isolate, int index) const {
5935 ASSERT(IsValidNativeIndex(index)); 5955 ASSERT(IsValidNativeIndex(index));
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
5968 if (this->CharAt(i) != str.CharAt(begin_index + i)) { 5988 if (this->CharAt(i) != str.CharAt(begin_index + i)) {
5969 return false; 5989 return false;
5970 } 5990 }
5971 } 5991 }
5972 return true; 5992 return true;
5973 } 5993 }
5974 5994
5975 } // namespace dart 5995 } // namespace dart
5976 5996
5977 #endif // VM_OBJECT_H_ 5997 #endif // VM_OBJECT_H_
OLDNEW
« no previous file with comments | « vm/heap_profiler.cc ('k') | vm/object.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698