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 369 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
380 | 380 |
381 // The static values below are singletons shared between the different | 381 // The static values below are singletons shared between the different |
382 // isolates. They are all allocated in the non-GC'd Dart::vm_isolate_. | 382 // isolates. They are all allocated in the non-GC'd Dart::vm_isolate_. |
383 static RawObject* null_; | 383 static RawObject* null_; |
384 static RawArray* empty_array_; | 384 static RawArray* empty_array_; |
385 static RawInstance* sentinel_; | 385 static RawInstance* sentinel_; |
386 static RawInstance* transition_sentinel_; | 386 static RawInstance* transition_sentinel_; |
387 | 387 |
388 static RawClass* class_class_; // Class of the Class vm object. | 388 static RawClass* class_class_; // Class of the Class vm object. |
389 static RawClass* null_class_; // Class of the null object. | 389 static RawClass* null_class_; // Class of the null object. |
390 static RawClass* dynamic_class_; // Class of the 'Dynamic' type. | 390 static RawClass* dynamic_class_; // Class of the 'dynamic' type. |
391 static RawClass* void_class_; // Class of the 'void' type. | 391 static RawClass* void_class_; // Class of the 'void' type. |
392 static RawClass* unresolved_class_class_; // Class of UnresolvedClass. | 392 static RawClass* unresolved_class_class_; // Class of UnresolvedClass. |
393 // Class of the TypeArguments vm object. | 393 // Class of the TypeArguments vm object. |
394 static RawClass* type_arguments_class_; | 394 static RawClass* type_arguments_class_; |
395 static RawClass* instantiated_type_arguments_class_; // Class of Inst..ments. | 395 static RawClass* instantiated_type_arguments_class_; // Class of Inst..ments. |
396 static RawClass* patch_class_class_; // Class of the PatchClass vm object. | 396 static RawClass* patch_class_class_; // Class of the PatchClass vm object. |
397 static RawClass* function_class_; // Class of the Function vm object. | 397 static RawClass* function_class_; // Class of the Function vm object. |
398 static RawClass* closure_data_class_; // Class of ClosureData vm obj. | 398 static RawClass* closure_data_class_; // Class of ClosureData vm obj. |
399 static RawClass* redirection_data_class_; // Class of RedirectionData vm obj. | 399 static RawClass* redirection_data_class_; // Class of RedirectionData vm obj. |
400 static RawClass* field_class_; // Class of the Field vm object. | 400 static RawClass* field_class_; // Class of the Field vm object. |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
568 // Returns the list of classes having this class as direct superclass. | 568 // Returns the list of classes having this class as direct superclass. |
569 RawGrowableObjectArray* direct_subclasses() const { | 569 RawGrowableObjectArray* direct_subclasses() const { |
570 return raw_ptr()->direct_subclasses_; | 570 return raw_ptr()->direct_subclasses_; |
571 } | 571 } |
572 void AddDirectSubclass(const Class& subclass) const; | 572 void AddDirectSubclass(const Class& subclass) const; |
573 // TODO(regis): Implement RemoveDirectSubclass for class unloading support. | 573 // TODO(regis): Implement RemoveDirectSubclass for class unloading support. |
574 | 574 |
575 // Check if this class represents the class of null. | 575 // Check if this class represents the class of null. |
576 bool IsNullClass() const { return id() == kNullCid; } | 576 bool IsNullClass() const { return id() == kNullCid; } |
577 | 577 |
578 // Check if this class represents the 'Dynamic' class. | 578 // Check if this class represents the 'dynamic' class. |
579 bool IsDynamicClass() const { return id() == kDynamicCid; } | 579 bool IsDynamicClass() const { return id() == kDynamicCid; } |
580 | 580 |
581 // Check if this class represents the 'void' class. | 581 // Check if this class represents the 'void' class. |
582 bool IsVoidClass() const { return id() == kVoidCid; } | 582 bool IsVoidClass() const { return id() == kVoidCid; } |
583 | 583 |
584 // Check if this class represents the 'Object' class. | 584 // Check if this class represents the 'Object' class. |
585 bool IsObjectClass() const { return id() == kInstanceCid; } | 585 bool IsObjectClass() const { return id() == kInstanceCid; } |
586 | 586 |
587 // Check if this class represents a signature class. | 587 // Check if this class represents a signature class. |
588 bool IsSignatureClass() const { | 588 bool IsSignatureClass() const { |
(...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
839 // Return 'this' if this type argument vector is instantiated, i.e. if it does | 839 // Return 'this' if this type argument vector is instantiated, i.e. if it does |
840 // not refer to type parameters. Otherwise, return a new type argument vector | 840 // not refer to type parameters. Otherwise, return a new type argument vector |
841 // where each reference to a type parameter is replaced with the corresponding | 841 // where each reference to a type parameter is replaced with the corresponding |
842 // type of the instantiator type argument vector. | 842 // type of the instantiator type argument vector. |
843 virtual RawAbstractTypeArguments* InstantiateFrom( | 843 virtual RawAbstractTypeArguments* InstantiateFrom( |
844 const AbstractTypeArguments& instantiator_type_arguments) const; | 844 const AbstractTypeArguments& instantiator_type_arguments) const; |
845 | 845 |
846 // Do not canonicalize InstantiatedTypeArguments or NULL objects | 846 // Do not canonicalize InstantiatedTypeArguments or NULL objects |
847 virtual RawAbstractTypeArguments* Canonicalize() const { return this->raw(); } | 847 virtual RawAbstractTypeArguments* Canonicalize() const { return this->raw(); } |
848 | 848 |
849 // The name of this type argument vector, e.g. "<T, Dynamic, List<T>, Smi>". | 849 // The name of this type argument vector, e.g. "<T, dynamic, List<T>, Smi>". |
850 virtual RawString* Name() const { | 850 virtual RawString* Name() const { |
851 return SubvectorName(0, Length(), kInternalName); | 851 return SubvectorName(0, Length(), kInternalName); |
852 } | 852 } |
853 | 853 |
854 // The name of this type argument vector, e.g. "<T, Dynamic, List<T>, int>". | 854 // The name of this type argument vector, e.g. "<T, dynamic, List<T>, int>". |
855 // Names of internal classes are mapped to their public interfaces. | 855 // Names of internal classes are mapped to their public interfaces. |
856 virtual RawString* UserVisibleName() const { | 856 virtual RawString* UserVisibleName() const { |
857 return SubvectorName(0, Length(), kUserVisibleName); | 857 return SubvectorName(0, Length(), kUserVisibleName); |
858 } | 858 } |
859 | 859 |
860 // Check if this type argument vector consists solely of DynamicType, | 860 // Check if this type argument vector consists solely of DynamicType, |
861 // considering only a prefix of length 'len'. | 861 // considering only a prefix of length 'len'. |
862 bool IsRaw(intptr_t len) const { | 862 bool IsRaw(intptr_t len) const { |
863 return IsDynamicTypes(false, len); | 863 return IsDynamicTypes(false, len); |
864 } | 864 } |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
910 bool IsDynamicTypes(bool raw_instantiated, intptr_t len) const; | 910 bool IsDynamicTypes(bool raw_instantiated, intptr_t len) const; |
911 | 911 |
912 // Check the subtype or 'more specific' relationship, considering only a | 912 // Check the subtype or 'more specific' relationship, considering only a |
913 // prefix of length 'len'. | 913 // prefix of length 'len'. |
914 bool TypeTest(TypeTestKind test_kind, | 914 bool TypeTest(TypeTestKind test_kind, |
915 const AbstractTypeArguments& other, | 915 const AbstractTypeArguments& other, |
916 intptr_t len, | 916 intptr_t len, |
917 Error* malformed_error) const; | 917 Error* malformed_error) const; |
918 | 918 |
919 // Return the internal or public name of a subvector of this type argument | 919 // Return the internal or public name of a subvector of this type argument |
920 // vector, e.g. "<T, Dynamic, List<T>, int>". | 920 // vector, e.g. "<T, dynamic, List<T>, int>". |
921 RawString* SubvectorName(intptr_t from_index, | 921 RawString* SubvectorName(intptr_t from_index, |
922 intptr_t len, | 922 intptr_t len, |
923 NameVisibility name_visibility) const; | 923 NameVisibility name_visibility) const; |
924 | 924 |
925 protected: | 925 protected: |
926 HEAP_OBJECT_IMPLEMENTATION(AbstractTypeArguments, Object); | 926 HEAP_OBJECT_IMPLEMENTATION(AbstractTypeArguments, Object); |
927 friend class AbstractType; | 927 friend class AbstractType; |
928 friend class Class; | 928 friend class Class; |
929 }; | 929 }; |
930 | 930 |
(...skipping 2151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3082 // The name of this type, including the names of its type arguments, if any. | 3082 // The name of this type, including the names of its type arguments, if any. |
3083 // Names of internal classes are mapped to their public interfaces. | 3083 // Names of internal classes are mapped to their public interfaces. |
3084 virtual RawString* UserVisibleName() const { | 3084 virtual RawString* UserVisibleName() const { |
3085 return BuildName(kUserVisibleName); | 3085 return BuildName(kUserVisibleName); |
3086 } | 3086 } |
3087 | 3087 |
3088 // The name of this type's class, i.e. without the type argument names of this | 3088 // The name of this type's class, i.e. without the type argument names of this |
3089 // type. | 3089 // type. |
3090 RawString* ClassName() const; | 3090 RawString* ClassName() const; |
3091 | 3091 |
3092 // Check if this type represents the 'Dynamic' type. | 3092 // Check if this type represents the 'dynamic' type. |
3093 bool IsDynamicType() const { | 3093 bool IsDynamicType() const { |
3094 return HasResolvedTypeClass() && (type_class() == Object::dynamic_class()); | 3094 return HasResolvedTypeClass() && (type_class() == Object::dynamic_class()); |
3095 } | 3095 } |
3096 | 3096 |
3097 // Check if this type represents the 'Null' type. | 3097 // Check if this type represents the 'Null' type. |
3098 bool IsNullType() const { | 3098 bool IsNullType() const { |
3099 return HasResolvedTypeClass() && (type_class() == Object::null_class()); | 3099 return HasResolvedTypeClass() && (type_class() == Object::null_class()); |
3100 } | 3100 } |
3101 | 3101 |
3102 // Check if this type represents the 'void' type. | 3102 // Check if this type represents the 'void' type. |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3211 const AbstractTypeArguments& instantiator_type_arguments) const; | 3211 const AbstractTypeArguments& instantiator_type_arguments) const; |
3212 virtual RawAbstractType* Canonicalize() const; | 3212 virtual RawAbstractType* Canonicalize() const; |
3213 | 3213 |
3214 static intptr_t InstanceSize() { | 3214 static intptr_t InstanceSize() { |
3215 return RoundedAllocationSize(sizeof(RawType)); | 3215 return RoundedAllocationSize(sizeof(RawType)); |
3216 } | 3216 } |
3217 | 3217 |
3218 // The type of the literal 'null'. | 3218 // The type of the literal 'null'. |
3219 static RawType* NullType(); | 3219 static RawType* NullType(); |
3220 | 3220 |
3221 // The 'Dynamic' type. | 3221 // The 'dynamic' type. |
3222 static RawType* DynamicType(); | 3222 static RawType* DynamicType(); |
3223 | 3223 |
3224 // The 'void' type. | 3224 // The 'void' type. |
3225 static RawType* VoidType(); | 3225 static RawType* VoidType(); |
3226 | 3226 |
3227 // The 'Object' type. | 3227 // The 'Object' type. |
3228 static RawType* ObjectType(); | 3228 static RawType* ObjectType(); |
3229 | 3229 |
3230 // The 'bool' type. | 3230 // The 'bool' type. |
3231 static RawType* BoolType(); | 3231 static RawType* BoolType(); |
(...skipping 2540 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5772 if (this->CharAt(i) != str.CharAt(begin_index + i)) { | 5772 if (this->CharAt(i) != str.CharAt(begin_index + i)) { |
5773 return false; | 5773 return false; |
5774 } | 5774 } |
5775 } | 5775 } |
5776 return true; | 5776 return true; |
5777 } | 5777 } |
5778 | 5778 |
5779 } // namespace dart | 5779 } // namespace dart |
5780 | 5780 |
5781 #endif // VM_OBJECT_H_ | 5781 #endif // VM_OBJECT_H_ |
OLD | NEW |