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: runtime/vm/object.h

Issue 333773006: Removes open arrays (e.g. data[0]) from raw objects. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 6 months 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
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 1281 matching lines...) Expand 10 before | Expand all | Expand 10 after
1292 friend class Class; 1292 friend class Class;
1293 }; 1293 };
1294 1294
1295 1295
1296 // A TypeArguments is an array of AbstractType. 1296 // A TypeArguments is an array of AbstractType.
1297 class TypeArguments : public Object { 1297 class TypeArguments : public Object {
1298 public: 1298 public:
1299 intptr_t Length() const; 1299 intptr_t Length() const;
1300 RawAbstractType* TypeAt(intptr_t index) const; 1300 RawAbstractType* TypeAt(intptr_t index) const;
1301 static intptr_t type_at_offset(intptr_t index) { 1301 static intptr_t type_at_offset(intptr_t index) {
1302 return OFFSET_OF(RawTypeArguments, types_) + index * kWordSize; 1302 return OFFSET_OF_RETURNED_VALUE(
1303 RawTypeArguments, types) + index * kWordSize;
1303 } 1304 }
1304 void SetTypeAt(intptr_t index, const AbstractType& value) const; 1305 void SetTypeAt(intptr_t index, const AbstractType& value) const;
1305 1306
1306 // The name of this type argument vector, e.g. "<T, dynamic, List<T>, Smi>". 1307 // The name of this type argument vector, e.g. "<T, dynamic, List<T>, Smi>".
1307 RawString* Name() const { 1308 RawString* Name() const {
1308 return SubvectorName(0, Length(), kInternalName); 1309 return SubvectorName(0, Length(), kInternalName);
1309 } 1310 }
1310 1311
1311 // The name of this type argument vector, e.g. "<T, dynamic, List<T>, Smi>". 1312 // The name of this type argument vector, e.g. "<T, dynamic, List<T>, Smi>".
1312 // Names of internal classes are not mapped to their public interfaces. 1313 // Names of internal classes are not mapped to their public interfaces.
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
1419 } 1420 }
1420 1421
1421 static const intptr_t kBytesPerElement = kWordSize; 1422 static const intptr_t kBytesPerElement = kWordSize;
1422 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement; 1423 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
1423 1424
1424 static intptr_t length_offset() { 1425 static intptr_t length_offset() {
1425 return OFFSET_OF(RawTypeArguments, length_); 1426 return OFFSET_OF(RawTypeArguments, length_);
1426 } 1427 }
1427 1428
1428 static intptr_t InstanceSize() { 1429 static intptr_t InstanceSize() {
1429 ASSERT(sizeof(RawTypeArguments) == OFFSET_OF(RawTypeArguments, types_)); 1430 ASSERT(sizeof(RawTypeArguments) ==
1431 OFFSET_OF_RETURNED_VALUE(RawTypeArguments, types));
1430 return 0; 1432 return 0;
1431 } 1433 }
1432 1434
1433 static intptr_t InstanceSize(intptr_t len) { 1435 static intptr_t InstanceSize(intptr_t len) {
1434 // Ensure that the types_ is not adding to the object size, which includes 1436 // Ensure that the types() is not adding to the object size, which includes
1435 // 2 fields: instantiations_ and length_. 1437 // 2 fields: instantiations_ and length_.
1436 ASSERT(sizeof(RawTypeArguments) == (sizeof(RawObject) + (2 * kWordSize))); 1438 ASSERT(sizeof(RawTypeArguments) == (sizeof(RawObject) + (2 * kWordSize)));
1437 ASSERT(0 <= len && len <= kMaxElements); 1439 ASSERT(0 <= len && len <= kMaxElements);
1438 return RoundedAllocationSize( 1440 return RoundedAllocationSize(
1439 sizeof(RawTypeArguments) + (len * kBytesPerElement)); 1441 sizeof(RawTypeArguments) + (len * kBytesPerElement));
1440 } 1442 }
1441 1443
1442 intptr_t Hash() const; 1444 intptr_t Hash() const;
1443 1445
1444 static RawTypeArguments* New(intptr_t len, Heap::Space space = Heap::kOld); 1446 static RawTypeArguments* New(intptr_t len, Heap::Space space = Heap::kOld);
(...skipping 1425 matching lines...) Expand 10 before | Expand all | Expand 10 after
2870 uword EntryPoint() const { 2872 uword EntryPoint() const {
2871 return reinterpret_cast<uword>(raw_ptr()) + HeaderSize(); 2873 return reinterpret_cast<uword>(raw_ptr()) + HeaderSize();
2872 } 2874 }
2873 2875
2874 static const intptr_t kMaxElements = (kIntptrMax - 2876 static const intptr_t kMaxElements = (kIntptrMax -
2875 (sizeof(RawInstructions) + 2877 (sizeof(RawInstructions) +
2876 sizeof(RawObject) + 2878 sizeof(RawObject) +
2877 (2 * OS::kMaxPreferredCodeAlignment))); 2879 (2 * OS::kMaxPreferredCodeAlignment)));
2878 2880
2879 static intptr_t InstanceSize() { 2881 static intptr_t InstanceSize() {
2880 ASSERT(sizeof(RawInstructions) == OFFSET_OF(RawInstructions, data_)); 2882 ASSERT(sizeof(RawInstructions) ==
2883 OFFSET_OF_RETURNED_VALUE(RawInstructions, data));
2881 return 0; 2884 return 0;
2882 } 2885 }
2883 2886
2884 static intptr_t InstanceSize(intptr_t size) { 2887 static intptr_t InstanceSize(intptr_t size) {
2885 intptr_t instructions_size = Utils::RoundUp(size, 2888 intptr_t instructions_size = Utils::RoundUp(size,
2886 OS::PreferredCodeAlignment()); 2889 OS::PreferredCodeAlignment());
2887 intptr_t result = instructions_size + HeaderSize(); 2890 intptr_t result = instructions_size + HeaderSize();
2888 ASSERT(result % OS::PreferredCodeAlignment() == 0); 2891 ASSERT(result % OS::PreferredCodeAlignment() == 0);
2889 return result; 2892 return result;
2890 } 2893 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
2933 RawLocalVarDescriptors::VarInfo* info) const; 2936 RawLocalVarDescriptors::VarInfo* info) const;
2934 2937
2935 void GetInfo(intptr_t var_index, RawLocalVarDescriptors::VarInfo* info) const; 2938 void GetInfo(intptr_t var_index, RawLocalVarDescriptors::VarInfo* info) const;
2936 2939
2937 static const intptr_t kBytesPerElement = 2940 static const intptr_t kBytesPerElement =
2938 sizeof(RawLocalVarDescriptors::VarInfo); 2941 sizeof(RawLocalVarDescriptors::VarInfo);
2939 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement; 2942 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
2940 2943
2941 static intptr_t InstanceSize() { 2944 static intptr_t InstanceSize() {
2942 ASSERT(sizeof(RawLocalVarDescriptors) == 2945 ASSERT(sizeof(RawLocalVarDescriptors) ==
2943 OFFSET_OF(RawLocalVarDescriptors, data_)); 2946 OFFSET_OF_RETURNED_VALUE(RawLocalVarDescriptors, data));
2944 return 0; 2947 return 0;
2945 } 2948 }
2946 static intptr_t InstanceSize(intptr_t len) { 2949 static intptr_t InstanceSize(intptr_t len) {
2947 ASSERT(0 <= len && len <= kMaxElements); 2950 ASSERT(0 <= len && len <= kMaxElements);
2948 return RoundedAllocationSize( 2951 return RoundedAllocationSize(
2949 sizeof(RawLocalVarDescriptors) + (len * kBytesPerElement)); 2952 sizeof(RawLocalVarDescriptors) + (len * kBytesPerElement));
2950 } 2953 }
2951 2954
2952 static RawLocalVarDescriptors* New(intptr_t num_variables); 2955 static RawLocalVarDescriptors* New(intptr_t num_variables);
2953 2956
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
3003 SetKind(index, kind); 3006 SetKind(index, kind);
3004 SetDeoptId(index, deopt_id); 3007 SetDeoptId(index, deopt_id);
3005 SetTokenPos(index, token_pos); 3008 SetTokenPos(index, token_pos);
3006 SetTryIndex(index, try_index); 3009 SetTryIndex(index, try_index);
3007 } 3010 }
3008 3011
3009 static const intptr_t kBytesPerElement = (kNumberOfEntries * kWordSize); 3012 static const intptr_t kBytesPerElement = (kNumberOfEntries * kWordSize);
3010 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement; 3013 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
3011 3014
3012 static intptr_t InstanceSize() { 3015 static intptr_t InstanceSize() {
3013 ASSERT(sizeof(RawPcDescriptors) == OFFSET_OF(RawPcDescriptors, data_)); 3016 ASSERT(sizeof(RawPcDescriptors) ==
3017 OFFSET_OF_RETURNED_VALUE(RawPcDescriptors, data));
3014 return 0; 3018 return 0;
3015 } 3019 }
3016 static intptr_t InstanceSize(intptr_t len) { 3020 static intptr_t InstanceSize(intptr_t len) {
3017 ASSERT(0 <= len && len <= kMaxElements); 3021 ASSERT(0 <= len && len <= kMaxElements);
3018 return RoundedAllocationSize( 3022 return RoundedAllocationSize(
3019 sizeof(RawPcDescriptors) + (len * kBytesPerElement)); 3023 sizeof(RawPcDescriptors) + (len * kBytesPerElement));
3020 } 3024 }
3021 3025
3022 static RawPcDescriptors* New(intptr_t num_descriptors); 3026 static RawPcDescriptors* New(intptr_t num_descriptors);
3023 3027
(...skipping 15 matching lines...) Expand all
3039 void SetKind(intptr_t index, PcDescriptors::Kind kind) const; 3043 void SetKind(intptr_t index, PcDescriptors::Kind kind) const;
3040 void SetDeoptId(intptr_t index, intptr_t value) const; 3044 void SetDeoptId(intptr_t index, intptr_t value) const;
3041 void SetTokenPos(intptr_t index, intptr_t value) const; 3045 void SetTokenPos(intptr_t index, intptr_t value) const;
3042 void SetTryIndex(intptr_t index, intptr_t value) const; 3046 void SetTryIndex(intptr_t index, intptr_t value) const;
3043 3047
3044 void SetLength(intptr_t value) const; 3048 void SetLength(intptr_t value) const;
3045 3049
3046 intptr_t* EntryAddr(intptr_t index, intptr_t entry_offset) const { 3050 intptr_t* EntryAddr(intptr_t index, intptr_t entry_offset) const {
3047 ASSERT((index >=0) && (index < Length())); 3051 ASSERT((index >=0) && (index < Length()));
3048 intptr_t data_index = (index * kNumberOfEntries) + entry_offset; 3052 intptr_t data_index = (index * kNumberOfEntries) + entry_offset;
3049 return &raw_ptr()->data_[data_index]; 3053 return &raw_ptr()->data()[data_index];
3050 } 3054 }
3051 RawSmi** SmiAddr(intptr_t index, intptr_t entry_offset) const { 3055 RawSmi** SmiAddr(intptr_t index, intptr_t entry_offset) const {
3052 return reinterpret_cast<RawSmi**>(EntryAddr(index, entry_offset)); 3056 return reinterpret_cast<RawSmi**>(EntryAddr(index, entry_offset));
3053 } 3057 }
3054 3058
3055 FINAL_HEAP_OBJECT_IMPLEMENTATION(PcDescriptors, Object); 3059 FINAL_HEAP_OBJECT_IMPLEMENTATION(PcDescriptors, Object);
3056 friend class Class; 3060 friend class Class;
3057 friend class Object; 3061 friend class Object;
3058 }; 3062 };
3059 3063
(...skipping 14 matching lines...) Expand all
3074 void SetPC(uword value) const { raw_ptr()->pc_ = value; } 3078 void SetPC(uword value) const { raw_ptr()->pc_ = value; }
3075 3079
3076 intptr_t RegisterBitCount() const { return raw_ptr()->register_bit_count_; } 3080 intptr_t RegisterBitCount() const { return raw_ptr()->register_bit_count_; }
3077 void SetRegisterBitCount(intptr_t register_bit_count) const { 3081 void SetRegisterBitCount(intptr_t register_bit_count) const {
3078 raw_ptr()->register_bit_count_ = register_bit_count; 3082 raw_ptr()->register_bit_count_ = register_bit_count;
3079 } 3083 }
3080 3084
3081 static const intptr_t kMaxLengthInBytes = kSmiMax; 3085 static const intptr_t kMaxLengthInBytes = kSmiMax;
3082 3086
3083 static intptr_t InstanceSize() { 3087 static intptr_t InstanceSize() {
3084 ASSERT(sizeof(RawStackmap) == OFFSET_OF(RawStackmap, data_)); 3088 ASSERT(sizeof(RawStackmap) == OFFSET_OF_RETURNED_VALUE(RawStackmap, data));
3085 return 0; 3089 return 0;
3086 } 3090 }
3087 static intptr_t InstanceSize(intptr_t length) { 3091 static intptr_t InstanceSize(intptr_t length) {
3088 ASSERT(length >= 0); 3092 ASSERT(length >= 0);
3089 // The stackmap payload is in an array of bytes. 3093 // The stackmap payload is in an array of bytes.
3090 intptr_t payload_size = 3094 intptr_t payload_size =
3091 Utils::RoundUp(length, kBitsPerByte) / kBitsPerByte; 3095 Utils::RoundUp(length, kBitsPerByte) / kBitsPerByte;
3092 return RoundedAllocationSize(sizeof(RawStackmap) + payload_size); 3096 return RoundedAllocationSize(sizeof(RawStackmap) + payload_size);
3093 } 3097 }
3094 static RawStackmap* New(intptr_t pc_offset, 3098 static RawStackmap* New(intptr_t pc_offset,
(...skipping 29 matching lines...) Expand all
3124 intptr_t outer_try_index, 3128 intptr_t outer_try_index,
3125 intptr_t handler_pc, 3129 intptr_t handler_pc,
3126 bool needs_stacktrace, 3130 bool needs_stacktrace,
3127 bool has_catch_all) const; 3131 bool has_catch_all) const;
3128 3132
3129 RawArray* GetHandledTypes(intptr_t try_index) const; 3133 RawArray* GetHandledTypes(intptr_t try_index) const;
3130 void SetHandledTypes(intptr_t try_index, const Array& handled_types) const; 3134 void SetHandledTypes(intptr_t try_index, const Array& handled_types) const;
3131 bool HasCatchAll(intptr_t try_index) const; 3135 bool HasCatchAll(intptr_t try_index) const;
3132 3136
3133 static intptr_t InstanceSize() { 3137 static intptr_t InstanceSize() {
3134 ASSERT(sizeof(RawExceptionHandlers) == OFFSET_OF(RawExceptionHandlers, 3138 ASSERT(sizeof(RawExceptionHandlers) ==
3135 data_)); 3139 OFFSET_OF_RETURNED_VALUE(RawExceptionHandlers, data));
3136 return 0; 3140 return 0;
3137 } 3141 }
3138 static intptr_t InstanceSize(intptr_t len) { 3142 static intptr_t InstanceSize(intptr_t len) {
3139 return RoundedAllocationSize( 3143 return RoundedAllocationSize(
3140 sizeof(RawExceptionHandlers) + 3144 sizeof(RawExceptionHandlers) +
3141 (len * sizeof(RawExceptionHandlers::HandlerInfo))); 3145 (len * sizeof(RawExceptionHandlers::HandlerInfo)));
3142 } 3146 }
3143 3147
3144 static RawExceptionHandlers* New(intptr_t num_handlers); 3148 static RawExceptionHandlers* New(intptr_t num_handlers);
3145 3149
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
3194 3198
3195 // Returns the number of kMaterializeObject instructions in the prefix. 3199 // Returns the number of kMaterializeObject instructions in the prefix.
3196 intptr_t NumMaterializations() const; 3200 intptr_t NumMaterializations() const;
3197 3201
3198 static RawDeoptInfo* New(intptr_t num_commands); 3202 static RawDeoptInfo* New(intptr_t num_commands);
3199 3203
3200 static const intptr_t kBytesPerElement = (kNumberOfEntries * kWordSize); 3204 static const intptr_t kBytesPerElement = (kNumberOfEntries * kWordSize);
3201 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement; 3205 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
3202 3206
3203 static intptr_t InstanceSize() { 3207 static intptr_t InstanceSize() {
3204 ASSERT(sizeof(RawDeoptInfo) == OFFSET_OF(RawDeoptInfo, data_)); 3208 ASSERT(sizeof(RawDeoptInfo) ==
3209 OFFSET_OF_RETURNED_VALUE(RawDeoptInfo, data));
3205 return 0; 3210 return 0;
3206 } 3211 }
3207 3212
3208 static intptr_t InstanceSize(intptr_t len) { 3213 static intptr_t InstanceSize(intptr_t len) {
3209 ASSERT(0 <= len && len <= kMaxElements); 3214 ASSERT(0 <= len && len <= kMaxElements);
3210 return RoundedAllocationSize(sizeof(RawDeoptInfo) + 3215 return RoundedAllocationSize(sizeof(RawDeoptInfo) +
3211 (len * kBytesPerElement)); 3216 (len * kBytesPerElement));
3212 } 3217 }
3213 3218
3214 // 'index' corresponds to target, to-index. 3219 // 'index' corresponds to target, to-index.
(...skipping 15 matching lines...) Expand all
3230 3235
3231 // Returns true iff decompression yields the same instructions as the 3236 // Returns true iff decompression yields the same instructions as the
3232 // original. 3237 // original.
3233 bool VerifyDecompression(const GrowableArray<DeoptInstr*>& original, 3238 bool VerifyDecompression(const GrowableArray<DeoptInstr*>& original,
3234 const Array& deopt_table) const; 3239 const Array& deopt_table) const;
3235 3240
3236 private: 3241 private:
3237 intptr_t* EntryAddr(intptr_t index, intptr_t entry_offset) const { 3242 intptr_t* EntryAddr(intptr_t index, intptr_t entry_offset) const {
3238 ASSERT((index >=0) && (index < Length())); 3243 ASSERT((index >=0) && (index < Length()));
3239 intptr_t data_index = (index * kNumberOfEntries) + entry_offset; 3244 intptr_t data_index = (index * kNumberOfEntries) + entry_offset;
3240 return &raw_ptr()->data_[data_index]; 3245 return &raw_ptr()->data()[data_index];
3241 } 3246 }
3242 3247
3243 void SetLength(intptr_t value) const; 3248 void SetLength(intptr_t value) const;
3244 3249
3245 FINAL_HEAP_OBJECT_IMPLEMENTATION(DeoptInfo, Object); 3250 FINAL_HEAP_OBJECT_IMPLEMENTATION(DeoptInfo, Object);
3246 friend class Class; 3251 friend class Class;
3247 }; 3252 };
3248 3253
3249 3254
3250 // Object holding information about an IC: test classes and their 3255 // Object holding information about an IC: test classes and their
(...skipping 370 matching lines...) Expand 10 before | Expand all | Expand 10 after
3621 3626
3622 void set_owner(const Class& cls) { 3627 void set_owner(const Class& cls) {
3623 ASSERT(cls.IsOld()); 3628 ASSERT(cls.IsOld());
3624 StorePointer(&raw_ptr()->owner_, reinterpret_cast<RawObject*>(cls.raw())); 3629 StorePointer(&raw_ptr()->owner_, reinterpret_cast<RawObject*>(cls.raw()));
3625 } 3630 }
3626 3631
3627 // We would have a VisitPointers function here to traverse all the 3632 // We would have a VisitPointers function here to traverse all the
3628 // embedded objects in the instructions using pointer_offsets. 3633 // embedded objects in the instructions using pointer_offsets.
3629 3634
3630 static const intptr_t kBytesPerElement = 3635 static const intptr_t kBytesPerElement =
3631 sizeof(reinterpret_cast<RawCode*>(0)->data_[0]); 3636 sizeof(reinterpret_cast<RawCode*>(0)->data()[0]);
3632 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement; 3637 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
3633 3638
3634 static intptr_t InstanceSize() { 3639 static intptr_t InstanceSize() {
3635 ASSERT(sizeof(RawCode) == OFFSET_OF(RawCode, data_)); 3640 ASSERT(sizeof(RawCode) == OFFSET_OF_RETURNED_VALUE(RawCode, data));
3636 return 0; 3641 return 0;
3637 } 3642 }
3638 static intptr_t InstanceSize(intptr_t len) { 3643 static intptr_t InstanceSize(intptr_t len) {
3639 ASSERT(0 <= len && len <= kMaxElements); 3644 ASSERT(0 <= len && len <= kMaxElements);
3640 return RoundedAllocationSize(sizeof(RawCode) + (len * kBytesPerElement)); 3645 return RoundedAllocationSize(sizeof(RawCode) + (len * kBytesPerElement));
3641 } 3646 }
3642 static RawCode* FinalizeCode(const Function& function, 3647 static RawCode* FinalizeCode(const Function& function,
3643 Assembler* assembler, 3648 Assembler* assembler,
3644 bool optimized = false); 3649 bool optimized = false);
3645 static RawCode* FinalizeCode(const char* name, 3650 static RawCode* FinalizeCode(const char* name,
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
3753 raw_ptr()->instructions_ = instructions; 3758 raw_ptr()->instructions_ = instructions;
3754 } 3759 }
3755 void set_pointer_offsets_length(intptr_t value) { 3760 void set_pointer_offsets_length(intptr_t value) {
3756 ASSERT(value >= 0); 3761 ASSERT(value >= 0);
3757 raw_ptr()->pointer_offsets_length_ = value; 3762 raw_ptr()->pointer_offsets_length_ = value;
3758 } 3763 }
3759 int32_t* PointerOffsetAddrAt(int index) const { 3764 int32_t* PointerOffsetAddrAt(int index) const {
3760 ASSERT(index >= 0); 3765 ASSERT(index >= 0);
3761 ASSERT(index < pointer_offsets_length()); 3766 ASSERT(index < pointer_offsets_length());
3762 // TODO(iposva): Unit test is missing for this functionality. 3767 // TODO(iposva): Unit test is missing for this functionality.
3763 return &raw_ptr()->data_[index]; 3768 return &raw_ptr()->data()[index];
3764 } 3769 }
3765 void SetPointerOffsetAt(int index, int32_t offset_in_instructions) { 3770 void SetPointerOffsetAt(int index, int32_t offset_in_instructions) {
3766 *PointerOffsetAddrAt(index) = offset_in_instructions; 3771 *PointerOffsetAddrAt(index) = offset_in_instructions;
3767 } 3772 }
3768 3773
3769 intptr_t BinarySearchInSCallTable(uword pc) const; 3774 intptr_t BinarySearchInSCallTable(uword pc) const;
3770 static RawCode* LookupCodeInIsolate(Isolate* isolate, uword pc); 3775 static RawCode* LookupCodeInIsolate(Isolate* isolate, uword pc);
3771 3776
3772 // New is a private method as RawInstruction and RawCode objects should 3777 // New is a private method as RawInstruction and RawCode objects should
3773 // only be created using the Code::FinalizeCode method. This method creates 3778 // only be created using the Code::FinalizeCode method. This method creates
(...skipping 11 matching lines...) Expand all
3785 3790
3786 3791
3787 class Context : public Object { 3792 class Context : public Object {
3788 public: 3793 public:
3789 RawContext* parent() const { return raw_ptr()->parent_; } 3794 RawContext* parent() const { return raw_ptr()->parent_; }
3790 void set_parent(const Context& parent) const { 3795 void set_parent(const Context& parent) const {
3791 ASSERT(parent.IsNull() || parent.isolate() == Isolate::Current()); 3796 ASSERT(parent.IsNull() || parent.isolate() == Isolate::Current());
3792 StorePointer(&raw_ptr()->parent_, parent.raw()); 3797 StorePointer(&raw_ptr()->parent_, parent.raw());
3793 } 3798 }
3794 static intptr_t parent_offset() { return OFFSET_OF(RawContext, parent_); } 3799 static intptr_t parent_offset() { return OFFSET_OF(RawContext, parent_); }
3800 static intptr_t data_offset() { return parent_offset() + kWordSize; }
3795 3801
3796 Isolate* isolate() const { return raw_ptr()->isolate_; } 3802 Isolate* isolate() const { return raw_ptr()->isolate_; }
3797 static intptr_t isolate_offset() { return OFFSET_OF(RawContext, isolate_); } 3803 static intptr_t isolate_offset() { return OFFSET_OF(RawContext, isolate_); }
3798 3804
3799 intptr_t num_variables() const { return raw_ptr()->num_variables_; } 3805 intptr_t num_variables() const { return raw_ptr()->num_variables_; }
3800 static intptr_t num_variables_offset() { 3806 static intptr_t num_variables_offset() {
3801 return OFFSET_OF(RawContext, num_variables_); 3807 return OFFSET_OF(RawContext, num_variables_);
3802 } 3808 }
3803 3809
3804 RawInstance* At(intptr_t context_index) const { 3810 RawInstance* At(intptr_t context_index) const {
3805 return *InstanceAddr(context_index); 3811 return *InstanceAddr(context_index);
3806 } 3812 }
3807 inline void SetAt(intptr_t context_index, const Instance& value) const; 3813 inline void SetAt(intptr_t context_index, const Instance& value) const;
3808 3814
3809 void Dump(int indent = 0) const; 3815 void Dump(int indent = 0) const;
3810 3816
3811 static const intptr_t kBytesPerElement = kWordSize; 3817 static const intptr_t kBytesPerElement = kWordSize;
3812 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement; 3818 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
3813 3819
3814 static intptr_t variable_offset(intptr_t context_index) { 3820 static intptr_t variable_offset(intptr_t context_index) {
3815 return OFFSET_OF(RawContext, data_[context_index]); 3821 return data_offset() + kWordSize * context_index;
3816 } 3822 }
3817 3823
3818 static intptr_t InstanceSize() { 3824 static intptr_t InstanceSize() {
3819 ASSERT(sizeof(RawContext) == OFFSET_OF(RawContext, data_)); 3825 ASSERT(sizeof(RawContext) == OFFSET_OF_RETURNED_VALUE(RawContext, data));
3820 return 0; 3826 return 0;
3821 } 3827 }
3822 3828
3823 static intptr_t InstanceSize(intptr_t len) { 3829 static intptr_t InstanceSize(intptr_t len) {
3824 ASSERT(0 <= len && len <= kMaxElements); 3830 ASSERT(0 <= len && len <= kMaxElements);
3825 return RoundedAllocationSize(sizeof(RawContext) + (len * kBytesPerElement)); 3831 return RoundedAllocationSize(sizeof(RawContext) + (len * kBytesPerElement));
3826 } 3832 }
3827 3833
3828 static RawContext* New(intptr_t num_variables, 3834 static RawContext* New(intptr_t num_variables,
3829 Heap::Space space = Heap::kNew); 3835 Heap::Space space = Heap::kNew);
3830 3836
3831 private: 3837 private:
3832 RawInstance** InstanceAddr(intptr_t context_index) const { 3838 RawInstance** InstanceAddr(intptr_t context_index) const {
3833 ASSERT((context_index >= 0) && (context_index < num_variables())); 3839 ASSERT((context_index >= 0) && (context_index < num_variables()));
3834 return &raw_ptr()->data_[context_index]; 3840 return &raw_ptr()->data()[context_index];
3835 } 3841 }
3836 3842
3837 void set_isolate(Isolate* isolate) const { 3843 void set_isolate(Isolate* isolate) const {
3838 raw_ptr()->isolate_ = isolate; 3844 raw_ptr()->isolate_ = isolate;
3839 } 3845 }
3840 3846
3841 void set_num_variables(intptr_t num_variables) const { 3847 void set_num_variables(intptr_t num_variables) const {
3842 raw_ptr()->num_variables_ = num_variables; 3848 raw_ptr()->num_variables_ = num_variables;
3843 } 3849 }
3844 3850
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
3882 void SetContextIndexAt(intptr_t scope_index, intptr_t context_index) const; 3888 void SetContextIndexAt(intptr_t scope_index, intptr_t context_index) const;
3883 3889
3884 intptr_t ContextLevelAt(intptr_t scope_index) const; 3890 intptr_t ContextLevelAt(intptr_t scope_index) const;
3885 void SetContextLevelAt(intptr_t scope_index, intptr_t context_level) const; 3891 void SetContextLevelAt(intptr_t scope_index, intptr_t context_level) const;
3886 3892
3887 static const intptr_t kBytesPerElement = 3893 static const intptr_t kBytesPerElement =
3888 sizeof(RawContextScope::VariableDesc); 3894 sizeof(RawContextScope::VariableDesc);
3889 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement; 3895 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
3890 3896
3891 static intptr_t InstanceSize() { 3897 static intptr_t InstanceSize() {
3892 ASSERT(sizeof(RawContextScope) == OFFSET_OF(RawContextScope, data_)); 3898 ASSERT(sizeof(RawContextScope) ==
3899 OFFSET_OF_RETURNED_VALUE(RawContextScope, data));
3893 return 0; 3900 return 0;
3894 } 3901 }
3895 3902
3896 static intptr_t InstanceSize(intptr_t len) { 3903 static intptr_t InstanceSize(intptr_t len) {
3897 ASSERT(0 <= len && len <= kMaxElements); 3904 ASSERT(0 <= len && len <= kMaxElements);
3898 return RoundedAllocationSize( 3905 return RoundedAllocationSize(
3899 sizeof(RawContextScope) + (len * kBytesPerElement)); 3906 sizeof(RawContextScope) + (len * kBytesPerElement));
3900 } 3907 }
3901 3908
3902 static RawContextScope* New(intptr_t num_variables); 3909 static RawContextScope* New(intptr_t num_variables);
(...skipping 1630 matching lines...) Expand 10 before | Expand all | Expand 10 after
5533 } 5540 }
5534 5541
5535 static void SetCharAt(const String& str, intptr_t index, uint8_t code_point) { 5542 static void SetCharAt(const String& str, intptr_t index, uint8_t code_point) {
5536 *CharAddr(str, index) = code_point; 5543 *CharAddr(str, index) = code_point;
5537 } 5544 }
5538 static RawOneByteString* EscapeSpecialCharacters(const String& str); 5545 static RawOneByteString* EscapeSpecialCharacters(const String& str);
5539 // We use the same maximum elements for all strings. 5546 // We use the same maximum elements for all strings.
5540 static const intptr_t kBytesPerElement = 1; 5547 static const intptr_t kBytesPerElement = 1;
5541 static const intptr_t kMaxElements = String::kMaxElements; 5548 static const intptr_t kMaxElements = String::kMaxElements;
5542 5549
5543 static intptr_t data_offset() { return OFFSET_OF(RawOneByteString, data_); } 5550 static intptr_t data_offset() {
5551 return OFFSET_OF_RETURNED_VALUE(RawOneByteString, data);
5552 }
5544 5553
5545 static intptr_t InstanceSize() { 5554 static intptr_t InstanceSize() {
5546 ASSERT(sizeof(RawOneByteString) == OFFSET_OF(RawOneByteString, data_)); 5555 ASSERT(sizeof(RawOneByteString) ==
5556 OFFSET_OF_RETURNED_VALUE(RawOneByteString, data));
5547 return 0; 5557 return 0;
5548 } 5558 }
5549 5559
5550 static intptr_t InstanceSize(intptr_t len) { 5560 static intptr_t InstanceSize(intptr_t len) {
5551 ASSERT(sizeof(RawOneByteString) == String::kSizeofRawString); 5561 ASSERT(sizeof(RawOneByteString) == String::kSizeofRawString);
5552 ASSERT(0 <= len && len <= kMaxElements); 5562 ASSERT(0 <= len && len <= kMaxElements);
5553 return String::RoundedAllocationSize( 5563 return String::RoundedAllocationSize(
5554 sizeof(RawOneByteString) + (len * kBytesPerElement)); 5564 sizeof(RawOneByteString) + (len * kBytesPerElement));
5555 } 5565 }
5556 5566
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
5629 } 5639 }
5630 5640
5631 static RawOneByteString* raw_ptr(const String& str) { 5641 static RawOneByteString* raw_ptr(const String& str) {
5632 return reinterpret_cast<RawOneByteString*>(str.raw_ptr()); 5642 return reinterpret_cast<RawOneByteString*>(str.raw_ptr());
5633 } 5643 }
5634 5644
5635 static uint8_t* CharAddr(const String& str, intptr_t index) { 5645 static uint8_t* CharAddr(const String& str, intptr_t index) {
5636 ASSERT((index >= 0) && (index < str.Length())); 5646 ASSERT((index >= 0) && (index < str.Length()));
5637 ASSERT(str.IsOneByteString()); 5647 ASSERT(str.IsOneByteString());
5638 NoGCScope no_gc; 5648 NoGCScope no_gc;
5639 return &raw_ptr(str)->data_[index]; 5649 return &raw_ptr(str)->data()[index];
5640 } 5650 }
5641 5651
5642 static RawOneByteString* ReadFrom(SnapshotReader* reader, 5652 static RawOneByteString* ReadFrom(SnapshotReader* reader,
5643 intptr_t object_id, 5653 intptr_t object_id,
5644 intptr_t tags, 5654 intptr_t tags,
5645 Snapshot::Kind kind); 5655 Snapshot::Kind kind);
5646 5656
5647 friend class Class; 5657 friend class Class;
5648 friend class String; 5658 friend class String;
5649 friend class ExternalOneByteString; 5659 friend class ExternalOneByteString;
(...skipping 10 matching lines...) Expand all
5660 static void SetCharAt(const String& str, intptr_t index, uint16_t ch) { 5670 static void SetCharAt(const String& str, intptr_t index, uint16_t ch) {
5661 *CharAddr(str, index) = ch; 5671 *CharAddr(str, index) = ch;
5662 } 5672 }
5663 5673
5664 static RawTwoByteString* EscapeSpecialCharacters(const String& str); 5674 static RawTwoByteString* EscapeSpecialCharacters(const String& str);
5665 5675
5666 // We use the same maximum elements for all strings. 5676 // We use the same maximum elements for all strings.
5667 static const intptr_t kBytesPerElement = 2; 5677 static const intptr_t kBytesPerElement = 2;
5668 static const intptr_t kMaxElements = String::kMaxElements; 5678 static const intptr_t kMaxElements = String::kMaxElements;
5669 5679
5670 static intptr_t data_offset() { return OFFSET_OF(RawTwoByteString, data_); } 5680 static intptr_t data_offset() {
5681 return OFFSET_OF_RETURNED_VALUE(RawTwoByteString, data);
5682 }
5671 5683
5672 static intptr_t InstanceSize() { 5684 static intptr_t InstanceSize() {
5673 ASSERT(sizeof(RawTwoByteString) == OFFSET_OF(RawTwoByteString, data_)); 5685 ASSERT(sizeof(RawTwoByteString) ==
5686 OFFSET_OF_RETURNED_VALUE(RawTwoByteString, data));
5674 return 0; 5687 return 0;
5675 } 5688 }
5676 5689
5677 static intptr_t InstanceSize(intptr_t len) { 5690 static intptr_t InstanceSize(intptr_t len) {
5678 ASSERT(sizeof(RawTwoByteString) == String::kSizeofRawString); 5691 ASSERT(sizeof(RawTwoByteString) == String::kSizeofRawString);
5679 ASSERT(0 <= len && len <= kMaxElements); 5692 ASSERT(0 <= len && len <= kMaxElements);
5680 return String::RoundedAllocationSize( 5693 return String::RoundedAllocationSize(
5681 sizeof(RawTwoByteString) + (len * kBytesPerElement)); 5694 sizeof(RawTwoByteString) + (len * kBytesPerElement));
5682 } 5695 }
5683 5696
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
5727 } 5740 }
5728 5741
5729 static RawTwoByteString* raw_ptr(const String& str) { 5742 static RawTwoByteString* raw_ptr(const String& str) {
5730 return reinterpret_cast<RawTwoByteString*>(str.raw_ptr()); 5743 return reinterpret_cast<RawTwoByteString*>(str.raw_ptr());
5731 } 5744 }
5732 5745
5733 static uint16_t* CharAddr(const String& str, intptr_t index) { 5746 static uint16_t* CharAddr(const String& str, intptr_t index) {
5734 ASSERT((index >= 0) && (index < str.Length())); 5747 ASSERT((index >= 0) && (index < str.Length()));
5735 ASSERT(str.IsTwoByteString()); 5748 ASSERT(str.IsTwoByteString());
5736 NoGCScope no_gc; 5749 NoGCScope no_gc;
5737 return &raw_ptr(str)->data_[index]; 5750 return &raw_ptr(str)->data()[index];
5738 } 5751 }
5739 5752
5740 static RawTwoByteString* ReadFrom(SnapshotReader* reader, 5753 static RawTwoByteString* ReadFrom(SnapshotReader* reader,
5741 intptr_t object_id, 5754 intptr_t object_id,
5742 intptr_t tags, 5755 intptr_t tags,
5743 Snapshot::Kind kind); 5756 Snapshot::Kind kind);
5744 5757
5745 friend class Class; 5758 friend class Class;
5746 friend class String; 5759 friend class String;
5747 friend class SnapshotReader; 5760 friend class SnapshotReader;
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after
6307 } 6320 }
6308 6321
6309 intptr_t LengthInBytes() const { 6322 intptr_t LengthInBytes() const {
6310 intptr_t cid = raw()->GetClassId(); 6323 intptr_t cid = raw()->GetClassId();
6311 return (ElementSizeInBytes(cid) * Length()); 6324 return (ElementSizeInBytes(cid) * Length());
6312 } 6325 }
6313 6326
6314 void* DataAddr(intptr_t byte_offset) const { 6327 void* DataAddr(intptr_t byte_offset) const {
6315 ASSERT((byte_offset == 0) || 6328 ASSERT((byte_offset == 0) ||
6316 ((byte_offset > 0) && (byte_offset < LengthInBytes()))); 6329 ((byte_offset > 0) && (byte_offset < LengthInBytes())));
6317 return reinterpret_cast<void*>(raw_ptr()->data_ + byte_offset); 6330 return reinterpret_cast<void*>(raw_ptr()->data() + byte_offset);
6318 } 6331 }
6319 6332
6320 #define TYPED_GETTER_SETTER(name, type) \ 6333 #define TYPED_GETTER_SETTER(name, type) \
6321 type Get##name(intptr_t byte_offset) const { \ 6334 type Get##name(intptr_t byte_offset) const { \
6322 return *reinterpret_cast<type*>(DataAddr(byte_offset)); \ 6335 return *reinterpret_cast<type*>(DataAddr(byte_offset)); \
6323 } \ 6336 } \
6324 void Set##name(intptr_t byte_offset, type value) const { \ 6337 void Set##name(intptr_t byte_offset, type value) const { \
6325 *reinterpret_cast<type*>(DataAddr(byte_offset)) = value; \ 6338 *reinterpret_cast<type*>(DataAddr(byte_offset)) = value; \
6326 } 6339 }
6327 TYPED_GETTER_SETTER(Int8, int8_t) 6340 TYPED_GETTER_SETTER(Int8, int8_t)
(...skipping 10 matching lines...) Expand all
6338 TYPED_GETTER_SETTER(Int32x4, simd128_value_t) 6351 TYPED_GETTER_SETTER(Int32x4, simd128_value_t)
6339 TYPED_GETTER_SETTER(Float64x2, simd128_value_t) 6352 TYPED_GETTER_SETTER(Float64x2, simd128_value_t)
6340 6353
6341 #undef TYPED_GETTER_SETTER 6354 #undef TYPED_GETTER_SETTER
6342 6355
6343 static intptr_t length_offset() { 6356 static intptr_t length_offset() {
6344 return OFFSET_OF(RawTypedData, length_); 6357 return OFFSET_OF(RawTypedData, length_);
6345 } 6358 }
6346 6359
6347 static intptr_t data_offset() { 6360 static intptr_t data_offset() {
6348 return OFFSET_OF(RawTypedData, data_); 6361 return OFFSET_OF_RETURNED_VALUE(RawTypedData, data);
6349 } 6362 }
6350 6363
6351 static intptr_t InstanceSize() { 6364 static intptr_t InstanceSize() {
6352 ASSERT(sizeof(RawTypedData) == OFFSET_OF(RawTypedData, data_)); 6365 ASSERT(sizeof(RawTypedData) ==
6366 OFFSET_OF_RETURNED_VALUE(RawTypedData, data));
6353 return 0; 6367 return 0;
6354 } 6368 }
6355 6369
6356 static intptr_t InstanceSize(intptr_t lengthInBytes) { 6370 static intptr_t InstanceSize(intptr_t lengthInBytes) {
6357 ASSERT(0 <= lengthInBytes && lengthInBytes <= kSmiMax); 6371 ASSERT(0 <= lengthInBytes && lengthInBytes <= kSmiMax);
6358 return RoundedAllocationSize(sizeof(RawTypedData) + lengthInBytes); 6372 return RoundedAllocationSize(sizeof(RawTypedData) + lengthInBytes);
6359 } 6373 }
6360 6374
6361 static intptr_t ElementSizeInBytes(intptr_t class_id) { 6375 static intptr_t ElementSizeInBytes(intptr_t class_id) {
6362 ASSERT(RawObject::IsTypedDataClassId(class_id)); 6376 ASSERT(RawObject::IsTypedDataClassId(class_id));
(...skipping 475 matching lines...) Expand 10 before | Expand all | Expand 10 after
6838 void* GetDataStartAddress() const; 6852 void* GetDataStartAddress() const;
6839 static RawJSRegExp* FromDataStartAddress(void* data); 6853 static RawJSRegExp* FromDataStartAddress(void* data);
6840 const char* Flags() const; 6854 const char* Flags() const;
6841 6855
6842 virtual bool CanonicalizeEquals(const Instance& other) const; 6856 virtual bool CanonicalizeEquals(const Instance& other) const;
6843 6857
6844 static const intptr_t kBytesPerElement = 1; 6858 static const intptr_t kBytesPerElement = 1;
6845 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement; 6859 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement;
6846 6860
6847 static intptr_t InstanceSize() { 6861 static intptr_t InstanceSize() {
6848 ASSERT(sizeof(RawJSRegExp) == OFFSET_OF(RawJSRegExp, data_)); 6862 ASSERT(sizeof(RawJSRegExp) == OFFSET_OF_RETURNED_VALUE(RawJSRegExp, data));
6849 return 0; 6863 return 0;
6850 } 6864 }
6851 6865
6852 static intptr_t InstanceSize(intptr_t len) { 6866 static intptr_t InstanceSize(intptr_t len) {
6853 ASSERT(0 <= len && len <= kMaxElements); 6867 ASSERT(0 <= len && len <= kMaxElements);
6854 return RoundedAllocationSize( 6868 return RoundedAllocationSize(
6855 sizeof(RawJSRegExp) + (len * kBytesPerElement)); 6869 sizeof(RawJSRegExp) + (len * kBytesPerElement));
6856 } 6870 }
6857 6871
6858 static RawJSRegExp* New(intptr_t length, Heap::Space space = Heap::kNew); 6872 static RawJSRegExp* New(intptr_t length, Heap::Space space = Heap::kNew);
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
7040 7054
7041 7055
7042 intptr_t Instance::GetNativeField(int index) const { 7056 intptr_t Instance::GetNativeField(int index) const {
7043 ASSERT(IsValidNativeIndex(index)); 7057 ASSERT(IsValidNativeIndex(index));
7044 NoGCScope no_gc; 7058 NoGCScope no_gc;
7045 RawTypedData* native_fields = 7059 RawTypedData* native_fields =
7046 reinterpret_cast<RawTypedData*>(*NativeFieldsAddr()); 7060 reinterpret_cast<RawTypedData*>(*NativeFieldsAddr());
7047 if (native_fields == TypedData::null()) { 7061 if (native_fields == TypedData::null()) {
7048 return 0; 7062 return 0;
7049 } 7063 }
7050 return reinterpret_cast<intptr_t*>(native_fields->ptr()->data_)[index]; 7064 return reinterpret_cast<intptr_t*>(native_fields->ptr()->data())[index];
7051 } 7065 }
7052 7066
7053 7067
7054 void Instance::GetNativeFields(uint16_t num_fields, 7068 void Instance::GetNativeFields(uint16_t num_fields,
7055 intptr_t* field_values) const { 7069 intptr_t* field_values) const {
7056 NoGCScope no_gc; 7070 NoGCScope no_gc;
7057 ASSERT(num_fields == NumNativeFields()); 7071 ASSERT(num_fields == NumNativeFields());
7058 ASSERT(field_values != NULL); 7072 ASSERT(field_values != NULL);
7059 RawTypedData* native_fields = 7073 RawTypedData* native_fields =
7060 reinterpret_cast<RawTypedData*>(*NativeFieldsAddr()); 7074 reinterpret_cast<RawTypedData*>(*NativeFieldsAddr());
7061 if (native_fields == TypedData::null()) { 7075 if (native_fields == TypedData::null()) {
7062 for (intptr_t i = 0; i < num_fields; i++) { 7076 for (intptr_t i = 0; i < num_fields; i++) {
7063 field_values[i] = 0; 7077 field_values[i] = 0;
7064 } 7078 }
7065 } 7079 }
7066 intptr_t* fields = reinterpret_cast<intptr_t*>(native_fields->ptr()->data_); 7080 intptr_t* fields = reinterpret_cast<intptr_t*>(native_fields->ptr()->data());
7067 for (intptr_t i = 0; i < num_fields; i++) { 7081 for (intptr_t i = 0; i < num_fields; i++) {
7068 field_values[i] = fields[i]; 7082 field_values[i] = fields[i];
7069 } 7083 }
7070 } 7084 }
7071 7085
7072 7086
7073 bool String::Equals(const String& str) const { 7087 bool String::Equals(const String& str) const {
7074 if (raw() == str.raw()) { 7088 if (raw() == str.raw()) {
7075 return true; // Both handles point to the same raw instance. 7089 return true; // Both handles point to the same raw instance.
7076 } 7090 }
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
7115 7129
7116 7130
7117 RawObject* MegamorphicCache::GetTargetFunction(const Array& array, 7131 RawObject* MegamorphicCache::GetTargetFunction(const Array& array,
7118 intptr_t index) { 7132 intptr_t index) {
7119 return array.At((index * kEntryLength) + kTargetFunctionIndex); 7133 return array.At((index * kEntryLength) + kTargetFunctionIndex);
7120 } 7134 }
7121 7135
7122 } // namespace dart 7136 } // namespace dart
7123 7137
7124 #endif // VM_OBJECT_H_ 7138 #endif // VM_OBJECT_H_
OLDNEW
« no previous file with comments | « runtime/vm/dart_api_message.cc ('k') | runtime/vm/object.cc » ('j') | runtime/vm/raw_object.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698