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/object.h" | 5 #include "vm/object.h" |
6 | 6 |
7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
10 #include "vm/cpu.h" | 10 #include "vm/cpu.h" |
(...skipping 881 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
892 } | 892 } |
893 | 893 |
894 | 894 |
895 // Make unused space in an object whose type has been transformed safe | 895 // Make unused space in an object whose type has been transformed safe |
896 // for traversing during GC. | 896 // for traversing during GC. |
897 // The unused part of the transformed object is marked as an TypedDataInt8Array | 897 // The unused part of the transformed object is marked as an TypedDataInt8Array |
898 // object. | 898 // object. |
899 void Object::MakeUnusedSpaceTraversable(const Object& obj, | 899 void Object::MakeUnusedSpaceTraversable(const Object& obj, |
900 intptr_t original_size, | 900 intptr_t original_size, |
901 intptr_t used_size) { | 901 intptr_t used_size) { |
902 ASSERT(Isolate::Current()->no_safepoint_scope_depth() > 0); | 902 ASSERT(Thread::Current()->no_safepoint_scope_depth() > 0); |
903 ASSERT(!obj.IsNull()); | 903 ASSERT(!obj.IsNull()); |
904 ASSERT(original_size >= used_size); | 904 ASSERT(original_size >= used_size); |
905 if (original_size > used_size) { | 905 if (original_size > used_size) { |
906 intptr_t leftover_size = original_size - used_size; | 906 intptr_t leftover_size = original_size - used_size; |
907 | 907 |
908 uword addr = RawObject::ToAddr(obj.raw()) + used_size; | 908 uword addr = RawObject::ToAddr(obj.raw()) + used_size; |
909 if (leftover_size >= TypedData::InstanceSize(0)) { | 909 if (leftover_size >= TypedData::InstanceSize(0)) { |
910 // Update the leftover space as a TypedDataInt8Array object. | 910 // Update the leftover space as a TypedDataInt8Array object. |
911 RawTypedData* raw = | 911 RawTypedData* raw = |
912 reinterpret_cast<RawTypedData*>(RawObject::FromAddr(addr)); | 912 reinterpret_cast<RawTypedData*>(RawObject::FromAddr(addr)); |
(...skipping 13381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14294 return Integer::Cast(*this).Equals(other); | 14294 return Integer::Cast(*this).Equals(other); |
14295 } | 14295 } |
14296 if (IsDouble() && other.IsDouble()) { | 14296 if (IsDouble() && other.IsDouble()) { |
14297 return Double::Cast(*this).CanonicalizeEquals(other); | 14297 return Double::Cast(*this).CanonicalizeEquals(other); |
14298 } | 14298 } |
14299 return false; | 14299 return false; |
14300 } | 14300 } |
14301 | 14301 |
14302 | 14302 |
14303 intptr_t* Instance::NativeFieldsDataAddr() const { | 14303 intptr_t* Instance::NativeFieldsDataAddr() const { |
14304 ASSERT(Isolate::Current()->no_safepoint_scope_depth() > 0); | 14304 ASSERT(Thread::Current()->no_safepoint_scope_depth() > 0); |
14305 RawTypedData* native_fields = | 14305 RawTypedData* native_fields = |
14306 reinterpret_cast<RawTypedData*>(*NativeFieldsAddr()); | 14306 reinterpret_cast<RawTypedData*>(*NativeFieldsAddr()); |
14307 if (native_fields == TypedData::null()) { | 14307 if (native_fields == TypedData::null()) { |
14308 return NULL; | 14308 return NULL; |
14309 } | 14309 } |
14310 return reinterpret_cast<intptr_t*>(native_fields->ptr()->data()); | 14310 return reinterpret_cast<intptr_t*>(native_fields->ptr()->data()); |
14311 } | 14311 } |
14312 | 14312 |
14313 | 14313 |
14314 void Instance::SetNativeField(int index, intptr_t value) const { | 14314 void Instance::SetNativeField(int index, intptr_t value) const { |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14443 if (IsNull()) { | 14443 if (IsNull()) { |
14444 return "null"; | 14444 return "null"; |
14445 } else if (raw() == Object::sentinel().raw()) { | 14445 } else if (raw() == Object::sentinel().raw()) { |
14446 return "sentinel"; | 14446 return "sentinel"; |
14447 } else if (raw() == Object::transition_sentinel().raw()) { | 14447 } else if (raw() == Object::transition_sentinel().raw()) { |
14448 return "transition_sentinel"; | 14448 return "transition_sentinel"; |
14449 } else if (raw() == Object::unknown_constant().raw()) { | 14449 } else if (raw() == Object::unknown_constant().raw()) { |
14450 return "unknown_constant"; | 14450 return "unknown_constant"; |
14451 } else if (raw() == Object::non_constant().raw()) { | 14451 } else if (raw() == Object::non_constant().raw()) { |
14452 return "non_constant"; | 14452 return "non_constant"; |
14453 } else if (Isolate::Current()->no_safepoint_scope_depth() > 0) { | 14453 } else if (Thread::Current()->no_safepoint_scope_depth() > 0) { |
14454 // Can occur when running disassembler. | 14454 // Can occur when running disassembler. |
14455 return "Instance"; | 14455 return "Instance"; |
14456 } else { | 14456 } else { |
14457 if (IsClosure()) { | 14457 if (IsClosure()) { |
14458 return Closure::ToCString(*this); | 14458 return Closure::ToCString(*this); |
14459 } | 14459 } |
14460 const char* kFormat = "Instance of '%s'"; | 14460 const char* kFormat = "Instance of '%s'"; |
14461 const Class& cls = Class::Handle(clazz()); | 14461 const Class& cls = Class::Handle(clazz()); |
14462 TypeArguments& type_arguments = TypeArguments::Handle(); | 14462 TypeArguments& type_arguments = TypeArguments::Handle(); |
14463 const intptr_t num_type_arguments = cls.NumTypeArguments(); | 14463 const intptr_t num_type_arguments = cls.NumTypeArguments(); |
(...skipping 6746 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
21210 return tag_label.ToCString(); | 21210 return tag_label.ToCString(); |
21211 } | 21211 } |
21212 | 21212 |
21213 | 21213 |
21214 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { | 21214 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { |
21215 Instance::PrintJSONImpl(stream, ref); | 21215 Instance::PrintJSONImpl(stream, ref); |
21216 } | 21216 } |
21217 | 21217 |
21218 | 21218 |
21219 } // namespace dart | 21219 } // namespace dart |
OLD | NEW |