| 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 #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 486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 497 } | 497 } |
| 498 static const Type& dynamic_type() { | 498 static const Type& dynamic_type() { |
| 499 ASSERT(dynamic_type_ != NULL); | 499 ASSERT(dynamic_type_ != NULL); |
| 500 return *dynamic_type_; | 500 return *dynamic_type_; |
| 501 } | 501 } |
| 502 static const Type& void_type() { | 502 static const Type& void_type() { |
| 503 ASSERT(void_type_ != NULL); | 503 ASSERT(void_type_ != NULL); |
| 504 return *void_type_; | 504 return *void_type_; |
| 505 } | 505 } |
| 506 | 506 |
| 507 static void InitVmIsolateSnapshotObjectTable(intptr_t len); | 507 static void set_vm_isolate_snapshot_object_table(const Array& table); |
| 508 | 508 |
| 509 static RawClass* class_class() { return class_class_; } | 509 static RawClass* class_class() { return class_class_; } |
| 510 static RawClass* dynamic_class() { return dynamic_class_; } | 510 static RawClass* dynamic_class() { return dynamic_class_; } |
| 511 static RawClass* void_class() { return void_class_; } | 511 static RawClass* void_class() { return void_class_; } |
| 512 static RawClass* unresolved_class_class() { return unresolved_class_class_; } | 512 static RawClass* unresolved_class_class() { return unresolved_class_class_; } |
| 513 static RawClass* type_arguments_class() { return type_arguments_class_; } | 513 static RawClass* type_arguments_class() { return type_arguments_class_; } |
| 514 static RawClass* patch_class_class() { return patch_class_class_; } | 514 static RawClass* patch_class_class() { return patch_class_class_; } |
| 515 static RawClass* function_class() { return function_class_; } | 515 static RawClass* function_class() { return function_class_; } |
| 516 static RawClass* closure_data_class() { return closure_data_class_; } | 516 static RawClass* closure_data_class() { return closure_data_class_; } |
| 517 static RawClass* redirection_data_class() { return redirection_data_class_; } | 517 static RawClass* redirection_data_class() { return redirection_data_class_; } |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 828 static LanguageError* speculative_inlining_error_; | 828 static LanguageError* speculative_inlining_error_; |
| 829 static LanguageError* background_compilation_error_; | 829 static LanguageError* background_compilation_error_; |
| 830 static Array* vm_isolate_snapshot_object_table_; | 830 static Array* vm_isolate_snapshot_object_table_; |
| 831 static Type* dynamic_type_; | 831 static Type* dynamic_type_; |
| 832 static Type* void_type_; | 832 static Type* void_type_; |
| 833 | 833 |
| 834 friend void ClassTable::Register(const Class& cls); | 834 friend void ClassTable::Register(const Class& cls); |
| 835 friend void RawObject::Validate(Isolate* isolate) const; | 835 friend void RawObject::Validate(Isolate* isolate) const; |
| 836 friend class Closure; | 836 friend class Closure; |
| 837 friend class SnapshotReader; | 837 friend class SnapshotReader; |
| 838 friend class InstanceDeserializationCluster; |
| 838 friend class OneByteString; | 839 friend class OneByteString; |
| 839 friend class TwoByteString; | 840 friend class TwoByteString; |
| 840 friend class ExternalOneByteString; | 841 friend class ExternalOneByteString; |
| 841 friend class ExternalTwoByteString; | 842 friend class ExternalTwoByteString; |
| 842 friend class Thread; | 843 friend class Thread; |
| 843 | 844 |
| 844 #define REUSABLE_FRIEND_DECLARATION(name) \ | 845 #define REUSABLE_FRIEND_DECLARATION(name) \ |
| 845 friend class Reusable##name##HandleScope; | 846 friend class Reusable##name##HandleScope; |
| 846 REUSABLE_HANDLE_LIST(REUSABLE_FRIEND_DECLARATION) | 847 REUSABLE_HANDLE_LIST(REUSABLE_FRIEND_DECLARATION) |
| 847 #undef REUSABLE_FRIEND_DECLARATION | 848 #undef REUSABLE_FRIEND_DECLARATION |
| (...skipping 1362 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2210 bool is_static_call); | 2211 bool is_static_call); |
| 2211 | 2212 |
| 2212 static void WriteSentinel(const Array& data, intptr_t test_entry_length); | 2213 static void WriteSentinel(const Array& data, intptr_t test_entry_length); |
| 2213 | 2214 |
| 2214 // A cache of VM heap allocated preinitialized empty ic data entry arrays. | 2215 // A cache of VM heap allocated preinitialized empty ic data entry arrays. |
| 2215 static RawArray* cached_icdata_arrays_[kCachedICDataArrayCount]; | 2216 static RawArray* cached_icdata_arrays_[kCachedICDataArrayCount]; |
| 2216 | 2217 |
| 2217 FINAL_HEAP_OBJECT_IMPLEMENTATION(ICData, Object); | 2218 FINAL_HEAP_OBJECT_IMPLEMENTATION(ICData, Object); |
| 2218 friend class Class; | 2219 friend class Class; |
| 2219 friend class SnapshotWriter; | 2220 friend class SnapshotWriter; |
| 2221 friend class Serializer; |
| 2222 friend class Deserializer; |
| 2220 }; | 2223 }; |
| 2221 | 2224 |
| 2222 | 2225 |
| 2223 class Function : public Object { | 2226 class Function : public Object { |
| 2224 public: | 2227 public: |
| 2225 RawString* name() const { return raw_ptr()->name_; } | 2228 RawString* name() const { return raw_ptr()->name_; } |
| 2226 RawString* UserVisibleName() const; // Same as scrubbed name. | 2229 RawString* UserVisibleName() const; // Same as scrubbed name. |
| 2227 RawString* QualifiedScrubbedName() const { | 2230 RawString* QualifiedScrubbedName() const { |
| 2228 return QualifiedName(kScrubbedName); | 2231 return QualifiedName(kScrubbedName); |
| 2229 } | 2232 } |
| (...skipping 1098 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3328 void set_kind_bits(uint8_t value) const { | 3331 void set_kind_bits(uint8_t value) const { |
| 3329 StoreNonPointer(&raw_ptr()->kind_bits_, value); | 3332 StoreNonPointer(&raw_ptr()->kind_bits_, value); |
| 3330 } | 3333 } |
| 3331 | 3334 |
| 3332 static RawField* New(); | 3335 static RawField* New(); |
| 3333 | 3336 |
| 3334 FINAL_HEAP_OBJECT_IMPLEMENTATION(Field, Object); | 3337 FINAL_HEAP_OBJECT_IMPLEMENTATION(Field, Object); |
| 3335 friend class Class; | 3338 friend class Class; |
| 3336 friend class HeapProfiler; | 3339 friend class HeapProfiler; |
| 3337 friend class RawField; | 3340 friend class RawField; |
| 3341 friend class FieldSerializationCluster; |
| 3338 }; | 3342 }; |
| 3339 | 3343 |
| 3340 | 3344 |
| 3341 class LiteralToken : public Object { | 3345 class LiteralToken : public Object { |
| 3342 public: | 3346 public: |
| 3343 Token::Kind kind() const { return raw_ptr()->kind_; } | 3347 Token::Kind kind() const { return raw_ptr()->kind_; } |
| 3344 RawString* literal() const { return raw_ptr()->literal_; } | 3348 RawString* literal() const { return raw_ptr()->literal_; } |
| 3345 RawObject* value() const { return raw_ptr()->value_; } | 3349 RawObject* value() const { return raw_ptr()->value_; } |
| 3346 | 3350 |
| 3347 static intptr_t InstanceSize() { | 3351 static intptr_t InstanceSize() { |
| (...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3852 | 3856 |
| 3853 FINAL_HEAP_OBJECT_IMPLEMENTATION(Library, Object); | 3857 FINAL_HEAP_OBJECT_IMPLEMENTATION(Library, Object); |
| 3854 | 3858 |
| 3855 friend class Bootstrap; | 3859 friend class Bootstrap; |
| 3856 friend class Class; | 3860 friend class Class; |
| 3857 friend class Debugger; | 3861 friend class Debugger; |
| 3858 friend class Isolate; | 3862 friend class Isolate; |
| 3859 friend class DictionaryIterator; | 3863 friend class DictionaryIterator; |
| 3860 friend class Namespace; | 3864 friend class Namespace; |
| 3861 friend class Object; | 3865 friend class Object; |
| 3866 friend class LibraryDeserializationCluster; |
| 3862 }; | 3867 }; |
| 3863 | 3868 |
| 3864 | 3869 |
| 3865 // A Namespace contains the names in a library dictionary, filtered by | 3870 // A Namespace contains the names in a library dictionary, filtered by |
| 3866 // the show/hide combinators. | 3871 // the show/hide combinators. |
| 3867 class Namespace : public Object { | 3872 class Namespace : public Object { |
| 3868 public: | 3873 public: |
| 3869 RawLibrary* library() const { return raw_ptr()->library_; } | 3874 RawLibrary* library() const { return raw_ptr()->library_; } |
| 3870 RawArray* show_names() const { return raw_ptr()->show_names_; } | 3875 RawArray* show_names() const { return raw_ptr()->show_names_; } |
| 3871 RawArray* hide_names() const { return raw_ptr()->hide_names_; } | 3876 RawArray* hide_names() const { return raw_ptr()->hide_names_; } |
| (...skipping 981 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4853 | 4858 |
| 4854 // New is a private method as RawInstruction and RawCode objects should | 4859 // New is a private method as RawInstruction and RawCode objects should |
| 4855 // only be created using the Code::FinalizeCode method. This method creates | 4860 // only be created using the Code::FinalizeCode method. This method creates |
| 4856 // the RawInstruction and RawCode objects, sets up the pointer offsets | 4861 // the RawInstruction and RawCode objects, sets up the pointer offsets |
| 4857 // and links the two in a GC safe manner. | 4862 // and links the two in a GC safe manner. |
| 4858 static RawCode* New(intptr_t pointer_offsets_length); | 4863 static RawCode* New(intptr_t pointer_offsets_length); |
| 4859 | 4864 |
| 4860 FINAL_HEAP_OBJECT_IMPLEMENTATION(Code, Object); | 4865 FINAL_HEAP_OBJECT_IMPLEMENTATION(Code, Object); |
| 4861 friend class Class; | 4866 friend class Class; |
| 4862 friend class SnapshotWriter; | 4867 friend class SnapshotWriter; |
| 4868 friend class FunctionSerializationCluster; |
| 4869 friend class CodeSerializationCluster; |
| 4863 friend class CodePatcher; // for set_instructions | 4870 friend class CodePatcher; // for set_instructions |
| 4864 friend class Precompiler; // for set_instructions | 4871 friend class Precompiler; // for set_instructions |
| 4865 // So that the RawFunction pointer visitor can determine whether code the | 4872 // So that the RawFunction pointer visitor can determine whether code the |
| 4866 // function points to is optimized. | 4873 // function points to is optimized. |
| 4867 friend class RawFunction; | 4874 friend class RawFunction; |
| 4868 }; | 4875 }; |
| 4869 | 4876 |
| 4870 | 4877 |
| 4871 class Context : public Object { | 4878 class Context : public Object { |
| 4872 public: | 4879 public: |
| (...skipping 533 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5406 // TODO(iposva): Determine if this gets in the way of Smi. | 5413 // TODO(iposva): Determine if this gets in the way of Smi. |
| 5407 HEAP_OBJECT_IMPLEMENTATION(Instance, Object); | 5414 HEAP_OBJECT_IMPLEMENTATION(Instance, Object); |
| 5408 friend class ByteBuffer; | 5415 friend class ByteBuffer; |
| 5409 friend class Class; | 5416 friend class Class; |
| 5410 friend class Closure; | 5417 friend class Closure; |
| 5411 friend class DeferredObject; | 5418 friend class DeferredObject; |
| 5412 friend class RegExp; | 5419 friend class RegExp; |
| 5413 friend class SnapshotWriter; | 5420 friend class SnapshotWriter; |
| 5414 friend class StubCode; | 5421 friend class StubCode; |
| 5415 friend class TypedDataView; | 5422 friend class TypedDataView; |
| 5423 friend class InstanceSerializationCluster; |
| 5424 friend class InstanceDeserializationCluster; |
| 5425 friend class ClassDeserializationCluster; // vtable |
| 5416 }; | 5426 }; |
| 5417 | 5427 |
| 5418 | 5428 |
| 5419 class LibraryPrefix : public Instance { | 5429 class LibraryPrefix : public Instance { |
| 5420 public: | 5430 public: |
| 5421 RawString* name() const { return raw_ptr()->name_; } | 5431 RawString* name() const { return raw_ptr()->name_; } |
| 5422 virtual RawString* DictionaryName() const { return name(); } | 5432 virtual RawString* DictionaryName() const { return name(); } |
| 5423 | 5433 |
| 5424 RawArray* imports() const { return raw_ptr()->imports_; } | 5434 RawArray* imports() const { return raw_ptr()->imports_; } |
| 5425 intptr_t num_imports() const { return raw_ptr()->num_imports_; } | 5435 intptr_t num_imports() const { return raw_ptr()->num_imports_; } |
| (...skipping 1353 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6779 friend class StringSlice; // SetHash | 6789 friend class StringSlice; // SetHash |
| 6780 template<typename CharType> friend class CharArray; // SetHash | 6790 template<typename CharType> friend class CharArray; // SetHash |
| 6781 friend class ConcatString; // SetHash | 6791 friend class ConcatString; // SetHash |
| 6782 friend class OneByteString; | 6792 friend class OneByteString; |
| 6783 friend class TwoByteString; | 6793 friend class TwoByteString; |
| 6784 friend class ExternalOneByteString; | 6794 friend class ExternalOneByteString; |
| 6785 friend class ExternalTwoByteString; | 6795 friend class ExternalTwoByteString; |
| 6786 // So that SkippedCodeFunctions can print a debug string from a NoHandleScope. | 6796 // So that SkippedCodeFunctions can print a debug string from a NoHandleScope. |
| 6787 friend class SkippedCodeFunctions; | 6797 friend class SkippedCodeFunctions; |
| 6788 friend class RawOneByteString; | 6798 friend class RawOneByteString; |
| 6799 friend class RODataSerializationCluster; // SetHash |
| 6789 }; | 6800 }; |
| 6790 | 6801 |
| 6791 | 6802 |
| 6792 class OneByteString : public AllStatic { | 6803 class OneByteString : public AllStatic { |
| 6793 public: | 6804 public: |
| 6794 static uint16_t CharAt(const String& str, intptr_t index) { | 6805 static uint16_t CharAt(const String& str, intptr_t index) { |
| 6795 ASSERT((index >= 0) && (index < str.Length())); | 6806 ASSERT((index >= 0) && (index < str.Length())); |
| 6796 ASSERT(str.IsOneByteString()); | 6807 ASSERT(str.IsOneByteString()); |
| 6797 return raw_ptr(str)->data()[index]; | 6808 return raw_ptr(str)->data()[index]; |
| 6798 } | 6809 } |
| (...skipping 1326 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8125 | 8136 |
| 8126 // Keep this in sync with Dart implementation (lib/compact_hash.dart). | 8137 // Keep this in sync with Dart implementation (lib/compact_hash.dart). |
| 8127 static const intptr_t kInitialIndexBits = 3; | 8138 static const intptr_t kInitialIndexBits = 3; |
| 8128 static const intptr_t kInitialIndexSize = 1 << (kInitialIndexBits + 1); | 8139 static const intptr_t kInitialIndexSize = 1 << (kInitialIndexBits + 1); |
| 8129 | 8140 |
| 8130 // Allocate a map, but leave all fields set to null. | 8141 // Allocate a map, but leave all fields set to null. |
| 8131 // Used during deserialization (since map might contain itself as key/value). | 8142 // Used during deserialization (since map might contain itself as key/value). |
| 8132 static RawLinkedHashMap* NewUninitialized(Heap::Space space = Heap::kNew); | 8143 static RawLinkedHashMap* NewUninitialized(Heap::Space space = Heap::kNew); |
| 8133 | 8144 |
| 8134 friend class Class; | 8145 friend class Class; |
| 8146 friend class LinkedHashMapDeserializationCluster; |
| 8135 }; | 8147 }; |
| 8136 | 8148 |
| 8137 | 8149 |
| 8138 class Closure : public Instance { | 8150 class Closure : public Instance { |
| 8139 public: | 8151 public: |
| 8140 RawFunction* function() const { return raw_ptr()->function_; } | 8152 RawFunction* function() const { return raw_ptr()->function_; } |
| 8141 void set_function(const Function& function) const { | 8153 void set_function(const Function& function) const { |
| 8142 // TODO(regis): Only used from deferred_objects.cc. Remove once fixed. | 8154 // TODO(regis): Only used from deferred_objects.cc. Remove once fixed. |
| 8143 StorePointer(&raw_ptr()->function_, function.raw()); | 8155 StorePointer(&raw_ptr()->function_, function.raw()); |
| 8144 } | 8156 } |
| (...skipping 581 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 8726 | 8738 |
| 8727 inline void TypeArguments::SetHash(intptr_t value) const { | 8739 inline void TypeArguments::SetHash(intptr_t value) const { |
| 8728 // This is only safe because we create a new Smi, which does not cause | 8740 // This is only safe because we create a new Smi, which does not cause |
| 8729 // heap allocation. | 8741 // heap allocation. |
| 8730 StoreSmi(&raw_ptr()->hash_, Smi::New(value)); | 8742 StoreSmi(&raw_ptr()->hash_, Smi::New(value)); |
| 8731 } | 8743 } |
| 8732 | 8744 |
| 8733 } // namespace dart | 8745 } // namespace dart |
| 8734 | 8746 |
| 8735 #endif // VM_OBJECT_H_ | 8747 #endif // VM_OBJECT_H_ |
| OLD | NEW |