| OLD | NEW |
| 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 #include "vm/raw_object.h" | 5 #include "vm/raw_object.h" |
| 6 | 6 |
| 7 #include "vm/class_table.h" | 7 #include "vm/class_table.h" |
| 8 #include "vm/dart.h" | 8 #include "vm/dart.h" |
| 9 #include "vm/freelist.h" | 9 #include "vm/freelist.h" |
| 10 #include "vm/isolate.h" | 10 #include "vm/isolate.h" |
| (...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 158 break; | 158 break; |
| 159 } | 159 } |
| 160 case kExceptionHandlersCid: { | 160 case kExceptionHandlersCid: { |
| 161 const RawExceptionHandlers* raw_handlers = | 161 const RawExceptionHandlers* raw_handlers = |
| 162 reinterpret_cast<const RawExceptionHandlers*>(this); | 162 reinterpret_cast<const RawExceptionHandlers*>(this); |
| 163 intptr_t num_handlers = raw_handlers->ptr()->num_entries_; | 163 intptr_t num_handlers = raw_handlers->ptr()->num_entries_; |
| 164 instance_size = ExceptionHandlers::InstanceSize(num_handlers); | 164 instance_size = ExceptionHandlers::InstanceSize(num_handlers); |
| 165 break; | 165 break; |
| 166 } | 166 } |
| 167 case kFreeListElement: { | 167 case kFreeListElement: { |
| 168 uword addr = RawObject::ToAddr(const_cast<RawObject*>(this)); | 168 uword addr = RawObject::ToAddr(this); |
| 169 FreeListElement* element = reinterpret_cast<FreeListElement*>(addr); | 169 FreeListElement* element = reinterpret_cast<FreeListElement*>(addr); |
| 170 instance_size = element->Size(); | 170 instance_size = element->Size(); |
| 171 break; | 171 break; |
| 172 } | 172 } |
| 173 default: { | 173 default: { |
| 174 // Get the (constant) instance size out of the class object. | 174 // Get the (constant) instance size out of the class object. |
| 175 // TODO(koda): Add Size(ClassTable*) interface to allow caching in loops. | 175 // TODO(koda): Add Size(ClassTable*) interface to allow caching in loops. |
| 176 Isolate* isolate = Isolate::Current(); | 176 Isolate* isolate = Isolate::Current(); |
| 177 ClassTable* class_table = isolate->class_table(); | 177 ClassTable* class_table = isolate->class_table(); |
| 178 #if defined(DEBUG) | 178 #if defined(DEBUG) |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 case kTypedData##clazz##ViewCid: | 270 case kTypedData##clazz##ViewCid: |
| 271 CLASS_LIST_TYPED_DATA(RAW_VISITPOINTERS) | 271 CLASS_LIST_TYPED_DATA(RAW_VISITPOINTERS) |
| 272 case kByteDataViewCid: | 272 case kByteDataViewCid: |
| 273 case kByteBufferCid: { | 273 case kByteBufferCid: { |
| 274 RawInstance* raw_obj = reinterpret_cast<RawInstance*>(this); | 274 RawInstance* raw_obj = reinterpret_cast<RawInstance*>(this); |
| 275 size = RawInstance::VisitInstancePointers(raw_obj, visitor); | 275 size = RawInstance::VisitInstancePointers(raw_obj, visitor); |
| 276 break; | 276 break; |
| 277 } | 277 } |
| 278 #undef RAW_VISITPOINTERS | 278 #undef RAW_VISITPOINTERS |
| 279 case kFreeListElement: { | 279 case kFreeListElement: { |
| 280 uword addr = RawObject::ToAddr(const_cast<RawObject*>(this)); | 280 uword addr = RawObject::ToAddr(this); |
| 281 FreeListElement* element = reinterpret_cast<FreeListElement*>(addr); | 281 FreeListElement* element = reinterpret_cast<FreeListElement*>(addr); |
| 282 size = element->Size(); | 282 size = element->Size(); |
| 283 break; | 283 break; |
| 284 } | 284 } |
| 285 case kNullCid: | 285 case kNullCid: |
| 286 size = Size(); | 286 size = Size(); |
| 287 break; | 287 break; |
| 288 default: | 288 default: |
| 289 OS::Print("Class Id: %" Pd "\n", class_id); | 289 OS::Print("Class Id: %" Pd "\n", class_id); |
| 290 UNREACHABLE(); | 290 UNREACHABLE(); |
| 291 break; | 291 break; |
| 292 } | 292 } |
| 293 } else { | 293 } else { |
| 294 RawInstance* raw_obj = reinterpret_cast<RawInstance*>(this); | 294 RawInstance* raw_obj = reinterpret_cast<RawInstance*>(this); |
| 295 size = RawInstance::VisitInstancePointers(raw_obj, visitor); | 295 size = RawInstance::VisitInstancePointers(raw_obj, visitor); |
| 296 } | 296 } |
| 297 | 297 |
| 298 ASSERT(size != 0); | 298 ASSERT(size != 0); |
| 299 ASSERT(size == Size()); | 299 ASSERT(size == Size()); |
| 300 return size; | 300 return size; |
| 301 } | 301 } |
| 302 | 302 |
| 303 | 303 |
| 304 bool RawObject::FindObject(FindObjectVisitor* visitor) { | 304 bool RawObject::FindObject(FindObjectVisitor* visitor) { |
| 305 ASSERT(visitor != NULL); | 305 ASSERT(visitor != NULL); |
| 306 return visitor->FindObject(const_cast<RawObject*>(this)); | 306 return visitor->FindObject(this); |
| 307 } | 307 } |
| 308 | 308 |
| 309 | 309 |
| 310 intptr_t RawClass::VisitClassPointers(RawClass* raw_obj, | 310 intptr_t RawClass::VisitClassPointers(RawClass* raw_obj, |
| 311 ObjectPointerVisitor* visitor) { | 311 ObjectPointerVisitor* visitor) { |
| 312 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); | 312 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); |
| 313 return Class::InstanceSize(); | 313 return Class::InstanceSize(); |
| 314 } | 314 } |
| 315 | 315 |
| 316 | 316 |
| (...skipping 617 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 934 intptr_t RawUserTag::VisitUserTagPointers( | 934 intptr_t RawUserTag::VisitUserTagPointers( |
| 935 RawUserTag* raw_obj, ObjectPointerVisitor* visitor) { | 935 RawUserTag* raw_obj, ObjectPointerVisitor* visitor) { |
| 936 // Make sure that we got here with the tagged pointer as this. | 936 // Make sure that we got here with the tagged pointer as this. |
| 937 ASSERT(raw_obj->IsHeapObject()); | 937 ASSERT(raw_obj->IsHeapObject()); |
| 938 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); | 938 visitor->VisitPointers(raw_obj->from(), raw_obj->to()); |
| 939 return UserTag::InstanceSize(); | 939 return UserTag::InstanceSize(); |
| 940 } | 940 } |
| 941 | 941 |
| 942 | 942 |
| 943 } // namespace dart | 943 } // namespace dart |
| OLD | NEW |