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" |
11 #include "vm/json_stream.h" | 11 #include "vm/json_stream.h" |
12 #include "vm/bitmap.h" | 12 #include "vm/bitmap.h" |
13 #include "vm/dart.h" | 13 #include "vm/dart.h" |
14 #include "vm/globals.h" | 14 #include "vm/globals.h" |
15 #include "vm/growable_array.h" | 15 #include "vm/growable_array.h" |
16 #include "vm/handles.h" | 16 #include "vm/handles.h" |
17 #include "vm/heap.h" | 17 #include "vm/heap.h" |
18 #include "vm/isolate.h" | 18 #include "vm/isolate.h" |
19 #include "vm/method_recognizer.h" | 19 #include "vm/method_recognizer.h" |
20 #include "vm/os.h" | 20 #include "vm/os.h" |
21 #include "vm/raw_object.h" | 21 #include "vm/raw_object.h" |
22 #include "vm/report.h" | 22 #include "vm/report.h" |
23 #include "vm/scanner.h" | 23 #include "vm/scanner.h" |
24 #include "vm/tags.h" | 24 #include "vm/tags.h" |
25 #include "vm/thread.h" | 25 #include "vm/thread.h" |
| 26 #include "vm/token_position.h" |
26 #include "vm/verified_memory.h" | 27 #include "vm/verified_memory.h" |
27 | 28 |
28 namespace dart { | 29 namespace dart { |
29 | 30 |
30 // Forward declarations. | 31 // Forward declarations. |
31 #define DEFINE_FORWARD_DECLARATION(clazz) \ | 32 #define DEFINE_FORWARD_DECLARATION(clazz) \ |
32 class clazz; | 33 class clazz; |
33 CLASS_LIST(DEFINE_FORWARD_DECLARATION) | 34 CLASS_LIST(DEFINE_FORWARD_DECLARATION) |
34 #undef DEFINE_FORWARD_DECLARATION | 35 #undef DEFINE_FORWARD_DECLARATION |
35 class Api; | 36 class Api; |
(...skipping 895 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
931 RawString* Name() const; | 932 RawString* Name() const; |
932 RawString* PrettyName() const; | 933 RawString* PrettyName() const; |
933 RawString* UserVisibleName() const; | 934 RawString* UserVisibleName() const; |
934 bool IsInFullSnapshot() const; | 935 bool IsInFullSnapshot() const; |
935 | 936 |
936 virtual RawString* DictionaryName() const { return Name(); } | 937 virtual RawString* DictionaryName() const { return Name(); } |
937 | 938 |
938 RawScript* script() const { return raw_ptr()->script_; } | 939 RawScript* script() const { return raw_ptr()->script_; } |
939 void set_script(const Script& value) const; | 940 void set_script(const Script& value) const; |
940 | 941 |
941 intptr_t token_pos() const { return raw_ptr()->token_pos_; } | 942 TokenPosition token_pos() const { return raw_ptr()->token_pos_; } |
942 void set_token_pos(intptr_t value) const; | 943 void set_token_pos(TokenPosition value) const; |
943 | 944 |
944 intptr_t ComputeEndTokenPos() const; | 945 TokenPosition ComputeEndTokenPos() const; |
945 | 946 |
946 // This class represents a typedef if the signature function is not null. | 947 // This class represents a typedef if the signature function is not null. |
947 RawFunction* signature_function() const { | 948 RawFunction* signature_function() const { |
948 return raw_ptr()->signature_function_; | 949 return raw_ptr()->signature_function_; |
949 } | 950 } |
950 void set_signature_function(const Function& value) const; | 951 void set_signature_function(const Function& value) const; |
951 | 952 |
952 // Return the Type with type parameters declared by this class filled in with | 953 // Return the Type with type parameters declared by this class filled in with |
953 // dynamic and type parameters declared in superclasses filled in as declared | 954 // dynamic and type parameters declared in superclasses filled in as declared |
954 // in superclass clauses. | 955 // in superclass clauses. |
(...skipping 344 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1299 const Array& param_values) const; | 1300 const Array& param_values) const; |
1300 | 1301 |
1301 RawError* EnsureIsFinalized(Thread* thread) const; | 1302 RawError* EnsureIsFinalized(Thread* thread) const; |
1302 | 1303 |
1303 // Allocate a class used for VM internal objects. | 1304 // Allocate a class used for VM internal objects. |
1304 template <class FakeObject> static RawClass* New(); | 1305 template <class FakeObject> static RawClass* New(); |
1305 | 1306 |
1306 // Allocate instance classes. | 1307 // Allocate instance classes. |
1307 static RawClass* New(const String& name, | 1308 static RawClass* New(const String& name, |
1308 const Script& script, | 1309 const Script& script, |
1309 intptr_t token_pos); | 1310 TokenPosition token_pos); |
1310 static RawClass* NewNativeWrapper(const Library& library, | 1311 static RawClass* NewNativeWrapper(const Library& library, |
1311 const String& name, | 1312 const String& name, |
1312 int num_fields); | 1313 int num_fields); |
1313 | 1314 |
1314 // Allocate the raw string classes. | 1315 // Allocate the raw string classes. |
1315 static RawClass* NewStringClass(intptr_t class_id); | 1316 static RawClass* NewStringClass(intptr_t class_id); |
1316 | 1317 |
1317 // Allocate the raw TypedData classes. | 1318 // Allocate the raw TypedData classes. |
1318 static RawClass* NewTypedDataClass(intptr_t class_id); | 1319 static RawClass* NewTypedDataClass(intptr_t class_id); |
1319 | 1320 |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1462 | 1463 |
1463 | 1464 |
1464 // Unresolved class is used for storing unresolved names which will be resolved | 1465 // Unresolved class is used for storing unresolved names which will be resolved |
1465 // to a class after all classes have been loaded and finalized. | 1466 // to a class after all classes have been loaded and finalized. |
1466 class UnresolvedClass : public Object { | 1467 class UnresolvedClass : public Object { |
1467 public: | 1468 public: |
1468 RawLibraryPrefix* library_prefix() const { | 1469 RawLibraryPrefix* library_prefix() const { |
1469 return raw_ptr()->library_prefix_; | 1470 return raw_ptr()->library_prefix_; |
1470 } | 1471 } |
1471 RawString* ident() const { return raw_ptr()->ident_; } | 1472 RawString* ident() const { return raw_ptr()->ident_; } |
1472 intptr_t token_pos() const { return raw_ptr()->token_pos_; } | 1473 TokenPosition token_pos() const { return raw_ptr()->token_pos_; } |
1473 | 1474 |
1474 RawString* Name() const; | 1475 RawString* Name() const; |
1475 | 1476 |
1476 static intptr_t InstanceSize() { | 1477 static intptr_t InstanceSize() { |
1477 return RoundedAllocationSize(sizeof(RawUnresolvedClass)); | 1478 return RoundedAllocationSize(sizeof(RawUnresolvedClass)); |
1478 } | 1479 } |
1479 | 1480 |
1480 static RawUnresolvedClass* New(const LibraryPrefix& library_prefix, | 1481 static RawUnresolvedClass* New(const LibraryPrefix& library_prefix, |
1481 const String& ident, | 1482 const String& ident, |
1482 intptr_t token_pos); | 1483 TokenPosition token_pos); |
1483 | 1484 |
1484 private: | 1485 private: |
1485 void set_library_prefix(const LibraryPrefix& library_prefix) const; | 1486 void set_library_prefix(const LibraryPrefix& library_prefix) const; |
1486 void set_ident(const String& ident) const; | 1487 void set_ident(const String& ident) const; |
1487 void set_token_pos(intptr_t token_pos) const; | 1488 void set_token_pos(TokenPosition token_pos) const; |
1488 | 1489 |
1489 static RawUnresolvedClass* New(); | 1490 static RawUnresolvedClass* New(); |
1490 | 1491 |
1491 FINAL_HEAP_OBJECT_IMPLEMENTATION(UnresolvedClass, Object); | 1492 FINAL_HEAP_OBJECT_IMPLEMENTATION(UnresolvedClass, Object); |
1492 friend class Class; | 1493 friend class Class; |
1493 }; | 1494 }; |
1494 | 1495 |
1495 | 1496 |
1496 typedef ZoneGrowableHandlePtrArray<const AbstractType> Trail; | 1497 typedef ZoneGrowableHandlePtrArray<const AbstractType> Trail; |
1497 typedef ZoneGrowableHandlePtrArray<const AbstractType>* TrailPtr; | 1498 typedef ZoneGrowableHandlePtrArray<const AbstractType>* TrailPtr; |
(...skipping 492 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1990 return "?"; | 1991 return "?"; |
1991 } | 1992 } |
1992 } | 1993 } |
1993 | 1994 |
1994 // It is only meaningful to interptret range feedback stored in the ICData | 1995 // It is only meaningful to interptret range feedback stored in the ICData |
1995 // when all checks are Mint or Smi. | 1996 // when all checks are Mint or Smi. |
1996 bool HasRangeFeedback() const; | 1997 bool HasRangeFeedback() const; |
1997 RangeFeedback DecodeRangeFeedbackAt(intptr_t idx) const; | 1998 RangeFeedback DecodeRangeFeedbackAt(intptr_t idx) const; |
1998 | 1999 |
1999 void PrintToJSONArray(const JSONArray& jsarray, | 2000 void PrintToJSONArray(const JSONArray& jsarray, |
2000 intptr_t token_pos, | 2001 TokenPosition token_pos, |
2001 bool is_static_call) const; | 2002 bool is_static_call) const; |
2002 void PrintToJSONArrayNew(const JSONArray& jsarray, | 2003 void PrintToJSONArrayNew(const JSONArray& jsarray, |
2003 intptr_t token_pos, | 2004 TokenPosition token_pos, |
2004 bool is_static_call) const; | 2005 bool is_static_call) const; |
2005 | 2006 |
2006 // Initialize the preallocated empty ICData entry arrays. | 2007 // Initialize the preallocated empty ICData entry arrays. |
2007 static void InitOnce(); | 2008 static void InitOnce(); |
2008 | 2009 |
2009 enum { | 2010 enum { |
2010 kCachedICDataArrayCount = 4 | 2011 kCachedICDataArrayCount = 4 |
2011 }; | 2012 }; |
2012 | 2013 |
2013 private: | 2014 private: |
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2305 case RawFunction::kClosureFunction: | 2306 case RawFunction::kClosureFunction: |
2306 case RawFunction::kConstructor: | 2307 case RawFunction::kConstructor: |
2307 return false; | 2308 return false; |
2308 default: | 2309 default: |
2309 UNREACHABLE(); | 2310 UNREACHABLE(); |
2310 return false; | 2311 return false; |
2311 } | 2312 } |
2312 } | 2313 } |
2313 bool IsInFactoryScope() const; | 2314 bool IsInFactoryScope() const; |
2314 | 2315 |
2315 intptr_t token_pos() const { return raw_ptr()->token_pos_; } | 2316 TokenPosition token_pos() const { return raw_ptr()->token_pos_; } |
2316 void set_token_pos(intptr_t value) const; | 2317 void set_token_pos(TokenPosition value) const; |
2317 | 2318 |
2318 intptr_t end_token_pos() const { return raw_ptr()->end_token_pos_; } | 2319 TokenPosition end_token_pos() const { return raw_ptr()->end_token_pos_; } |
2319 void set_end_token_pos(intptr_t value) const { | 2320 void set_end_token_pos(TokenPosition value) const { |
2320 StoreNonPointer(&raw_ptr()->end_token_pos_, value); | 2321 StoreNonPointer(&raw_ptr()->end_token_pos_, value); |
2321 } | 2322 } |
2322 | 2323 |
2323 intptr_t num_fixed_parameters() const { | 2324 intptr_t num_fixed_parameters() const { |
2324 return raw_ptr()->num_fixed_parameters_; | 2325 return raw_ptr()->num_fixed_parameters_; |
2325 } | 2326 } |
2326 void set_num_fixed_parameters(intptr_t value) const; | 2327 void set_num_fixed_parameters(intptr_t value) const; |
2327 | 2328 |
2328 bool HasOptionalParameters() const { | 2329 bool HasOptionalParameters() const { |
2329 return raw_ptr()->num_optional_parameters_ != 0; | 2330 return raw_ptr()->num_optional_parameters_ != 0; |
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2597 } | 2598 } |
2598 | 2599 |
2599 static RawFunction* New(const String& name, | 2600 static RawFunction* New(const String& name, |
2600 RawFunction::Kind kind, | 2601 RawFunction::Kind kind, |
2601 bool is_static, | 2602 bool is_static, |
2602 bool is_const, | 2603 bool is_const, |
2603 bool is_abstract, | 2604 bool is_abstract, |
2604 bool is_external, | 2605 bool is_external, |
2605 bool is_native, | 2606 bool is_native, |
2606 const Object& owner, | 2607 const Object& owner, |
2607 intptr_t token_pos); | 2608 TokenPosition token_pos); |
2608 | 2609 |
2609 // Allocates a new Function object representing a closure function. | 2610 // Allocates a new Function object representing a closure function. |
2610 static RawFunction* NewClosureFunction(const String& name, | 2611 static RawFunction* NewClosureFunction(const String& name, |
2611 const Function& parent, | 2612 const Function& parent, |
2612 intptr_t token_pos); | 2613 TokenPosition token_pos); |
2613 | 2614 |
2614 // Allocates a new Function object representing a signature function. | 2615 // Allocates a new Function object representing a signature function. |
2615 // The owner is the scope class of the function type. | 2616 // The owner is the scope class of the function type. |
2616 static RawFunction* NewSignatureFunction(const Class& owner, | 2617 static RawFunction* NewSignatureFunction(const Class& owner, |
2617 intptr_t token_pos); | 2618 TokenPosition token_pos); |
2618 | 2619 |
2619 static RawFunction* NewEvalFunction(const Class& owner, | 2620 static RawFunction* NewEvalFunction(const Class& owner, |
2620 const Script& script, | 2621 const Script& script, |
2621 bool is_static); | 2622 bool is_static); |
2622 | 2623 |
2623 RawFunction* CreateMethodExtractor(const String& getter_name) const; | 2624 RawFunction* CreateMethodExtractor(const String& getter_name) const; |
2624 RawFunction* GetMethodExtractor(const String& getter_name) const; | 2625 RawFunction* GetMethodExtractor(const String& getter_name) const; |
2625 | 2626 |
2626 // Allocate new function object, clone values from this function. The | 2627 // Allocate new function object, clone values from this function. The |
2627 // owner of the clone is new_owner. | 2628 // owner of the clone is new_owner. |
(...skipping 272 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2900 return RoundedAllocationSize(sizeof(RawField)); | 2901 return RoundedAllocationSize(sizeof(RawField)); |
2901 } | 2902 } |
2902 | 2903 |
2903 static RawField* New(const String& name, | 2904 static RawField* New(const String& name, |
2904 bool is_static, | 2905 bool is_static, |
2905 bool is_final, | 2906 bool is_final, |
2906 bool is_const, | 2907 bool is_const, |
2907 bool is_reflectable, | 2908 bool is_reflectable, |
2908 const Class& owner, | 2909 const Class& owner, |
2909 const AbstractType& type, | 2910 const AbstractType& type, |
2910 intptr_t token_pos); | 2911 TokenPosition token_pos); |
2911 | 2912 |
2912 static RawField* NewTopLevel(const String& name, | 2913 static RawField* NewTopLevel(const String& name, |
2913 bool is_final, | 2914 bool is_final, |
2914 bool is_const, | 2915 bool is_const, |
2915 const Object& owner, | 2916 const Object& owner, |
2916 intptr_t token_pos); | 2917 TokenPosition token_pos); |
2917 | 2918 |
2918 // Allocate new field object, clone values from this field. The | 2919 // Allocate new field object, clone values from this field. The |
2919 // owner of the clone is new_owner. | 2920 // owner of the clone is new_owner. |
2920 RawField* Clone(const Class& new_owner) const; | 2921 RawField* Clone(const Class& new_owner) const; |
2921 | 2922 |
2922 static intptr_t instance_field_offset() { | 2923 static intptr_t instance_field_offset() { |
2923 return OFFSET_OF(RawField, value_.offset_); | 2924 return OFFSET_OF(RawField, value_.offset_); |
2924 } | 2925 } |
2925 static intptr_t static_value_offset() { | 2926 static intptr_t static_value_offset() { |
2926 return OFFSET_OF(RawField, value_.static_value_); | 2927 return OFFSET_OF(RawField, value_.static_value_); |
2927 } | 2928 } |
2928 | 2929 |
2929 static intptr_t kind_bits_offset() { return OFFSET_OF(RawField, kind_bits_); } | 2930 static intptr_t kind_bits_offset() { return OFFSET_OF(RawField, kind_bits_); } |
2930 | 2931 |
2931 intptr_t token_pos() const { return raw_ptr()->token_pos_; } | 2932 TokenPosition token_pos() const { return raw_ptr()->token_pos_; } |
2932 | 2933 |
2933 bool has_initializer() const { | 2934 bool has_initializer() const { |
2934 return HasInitializerBit::decode(raw_ptr()->kind_bits_); | 2935 return HasInitializerBit::decode(raw_ptr()->kind_bits_); |
2935 } | 2936 } |
2936 // Called by parser after allocating field. | 2937 // Called by parser after allocating field. |
2937 void set_has_initializer(bool has_initializer) const { | 2938 void set_has_initializer(bool has_initializer) const { |
2938 ASSERT(Thread::Current()->IsMutatorThread()); | 2939 ASSERT(Thread::Current()->IsMutatorThread()); |
2939 set_kind_bits(HasInitializerBit::update(has_initializer, | 2940 set_kind_bits(HasInitializerBit::update(has_initializer, |
2940 raw_ptr()->kind_bits_)); | 2941 raw_ptr()->kind_bits_)); |
2941 } | 2942 } |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3099 } | 3100 } |
3100 void set_is_final(bool is_final) const { | 3101 void set_is_final(bool is_final) const { |
3101 set_kind_bits(FinalBit::update(is_final, raw_ptr()->kind_bits_)); | 3102 set_kind_bits(FinalBit::update(is_final, raw_ptr()->kind_bits_)); |
3102 } | 3103 } |
3103 void set_is_const(bool value) const { | 3104 void set_is_const(bool value) const { |
3104 set_kind_bits(ConstBit::update(value, raw_ptr()->kind_bits_)); | 3105 set_kind_bits(ConstBit::update(value, raw_ptr()->kind_bits_)); |
3105 } | 3106 } |
3106 void set_owner(const Object& value) const { | 3107 void set_owner(const Object& value) const { |
3107 StorePointer(&raw_ptr()->owner_, value.raw()); | 3108 StorePointer(&raw_ptr()->owner_, value.raw()); |
3108 } | 3109 } |
3109 void set_token_pos(intptr_t token_pos) const { | 3110 void set_token_pos(TokenPosition token_pos) const { |
3110 StoreNonPointer(&raw_ptr()->token_pos_, token_pos); | 3111 StoreNonPointer(&raw_ptr()->token_pos_, token_pos); |
3111 } | 3112 } |
3112 void set_kind_bits(intptr_t value) const { | 3113 void set_kind_bits(intptr_t value) const { |
3113 StoreNonPointer(&raw_ptr()->kind_bits_, static_cast<uint8_t>(value)); | 3114 StoreNonPointer(&raw_ptr()->kind_bits_, static_cast<uint8_t>(value)); |
3114 } | 3115 } |
3115 | 3116 |
3116 static RawField* New(); | 3117 static RawField* New(); |
3117 | 3118 |
3118 FINAL_HEAP_OBJECT_IMPLEMENTATION(Field, Object); | 3119 FINAL_HEAP_OBJECT_IMPLEMENTATION(Field, Object); |
3119 friend class Class; | 3120 friend class Class; |
(...skipping 29 matching lines...) Expand all Loading... |
3149 | 3150 |
3150 class TokenStream : public Object { | 3151 class TokenStream : public Object { |
3151 public: | 3152 public: |
3152 RawGrowableObjectArray* TokenObjects() const; | 3153 RawGrowableObjectArray* TokenObjects() const; |
3153 void SetTokenObjects(const GrowableObjectArray& value) const; | 3154 void SetTokenObjects(const GrowableObjectArray& value) const; |
3154 | 3155 |
3155 RawExternalTypedData* GetStream() const; | 3156 RawExternalTypedData* GetStream() const; |
3156 void SetStream(const ExternalTypedData& stream) const; | 3157 void SetStream(const ExternalTypedData& stream) const; |
3157 | 3158 |
3158 RawString* GenerateSource() const; | 3159 RawString* GenerateSource() const; |
3159 RawString* GenerateSource(intptr_t start, intptr_t end) const; | 3160 RawString* GenerateSource(TokenPosition start, |
3160 intptr_t ComputeSourcePosition(intptr_t tok_pos) const; | 3161 TokenPosition end) const; |
| 3162 TokenPosition ComputeSourcePosition(TokenPosition tok_pos) const; |
3161 | 3163 |
3162 RawString* PrivateKey() const; | 3164 RawString* PrivateKey() const; |
3163 | 3165 |
3164 static const intptr_t kBytesPerElement = 1; | 3166 static const intptr_t kBytesPerElement = 1; |
3165 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement; | 3167 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement; |
3166 | 3168 |
3167 static intptr_t InstanceSize() { | 3169 static intptr_t InstanceSize() { |
3168 return RoundedAllocationSize(sizeof(RawTokenStream)); | 3170 return RoundedAllocationSize(sizeof(RawTokenStream)); |
3169 } | 3171 } |
3170 | 3172 |
3171 static RawTokenStream* New(intptr_t length); | 3173 static RawTokenStream* New(intptr_t length); |
3172 static RawTokenStream* New(const Scanner::GrowableTokenStream& tokens, | 3174 static RawTokenStream* New(const Scanner::GrowableTokenStream& tokens, |
3173 const String& private_key, | 3175 const String& private_key, |
3174 bool use_shared_tokens); | 3176 bool use_shared_tokens); |
3175 | 3177 |
3176 static void OpenSharedTokenList(Isolate* isolate); | 3178 static void OpenSharedTokenList(Isolate* isolate); |
3177 static void CloseSharedTokenList(Isolate* isolate); | 3179 static void CloseSharedTokenList(Isolate* isolate); |
3178 | 3180 |
3179 // The class Iterator encapsulates iteration over the tokens | 3181 // The class Iterator encapsulates iteration over the tokens |
3180 // in a TokenStream object. | 3182 // in a TokenStream object. |
3181 class Iterator : ValueObject { | 3183 class Iterator : ValueObject { |
3182 public: | 3184 public: |
3183 enum StreamType { | 3185 enum StreamType { |
3184 kNoNewlines, | 3186 kNoNewlines, |
3185 kAllTokens | 3187 kAllTokens |
3186 }; | 3188 }; |
3187 | 3189 |
3188 Iterator(const TokenStream& tokens, | 3190 Iterator(const TokenStream& tokens, |
3189 intptr_t token_pos, | 3191 TokenPosition token_pos, |
3190 Iterator::StreamType stream_type = kNoNewlines); | 3192 Iterator::StreamType stream_type = kNoNewlines); |
3191 | 3193 |
3192 void SetStream(const TokenStream& tokens, intptr_t token_pos); | 3194 void SetStream(const TokenStream& tokens, TokenPosition token_pos); |
3193 bool IsValid() const; | 3195 bool IsValid() const; |
3194 | 3196 |
3195 inline Token::Kind CurrentTokenKind() const { | 3197 inline Token::Kind CurrentTokenKind() const { |
3196 return cur_token_kind_; | 3198 return cur_token_kind_; |
3197 } | 3199 } |
3198 | 3200 |
3199 Token::Kind LookaheadTokenKind(intptr_t num_tokens); | 3201 Token::Kind LookaheadTokenKind(intptr_t num_tokens); |
3200 | 3202 |
3201 intptr_t CurrentPosition() const; | 3203 TokenPosition CurrentPosition() const; |
3202 void SetCurrentPosition(intptr_t value); | 3204 void SetCurrentPosition(TokenPosition token_pos); |
3203 | 3205 |
3204 void Advance(); | 3206 void Advance(); |
3205 | 3207 |
3206 RawObject* CurrentToken() const; | 3208 RawObject* CurrentToken() const; |
3207 RawString* CurrentLiteral() const; | 3209 RawString* CurrentLiteral() const; |
3208 RawString* MakeLiteralToken(const Object& obj) const; | 3210 RawString* MakeLiteralToken(const Object& obj) const; |
3209 | 3211 |
3210 private: | 3212 private: |
3211 // Read token from the token stream (could be a simple token or an index | 3213 // Read token from the token stream (could be a simple token or an index |
3212 // into the token objects array for IDENT or literal tokens). | 3214 // into the token objects array for IDENT or literal tokens). |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3262 RawLibrary* FindLibrary() const; | 3264 RawLibrary* FindLibrary() const; |
3263 RawString* GetLine(intptr_t line_number, | 3265 RawString* GetLine(intptr_t line_number, |
3264 Heap::Space space = Heap::kNew) const; | 3266 Heap::Space space = Heap::kNew) const; |
3265 RawString* GetSnippet(intptr_t from_line, | 3267 RawString* GetSnippet(intptr_t from_line, |
3266 intptr_t from_column, | 3268 intptr_t from_column, |
3267 intptr_t to_line, | 3269 intptr_t to_line, |
3268 intptr_t to_column) const; | 3270 intptr_t to_column) const; |
3269 | 3271 |
3270 void SetLocationOffset(intptr_t line_offset, intptr_t col_offset) const; | 3272 void SetLocationOffset(intptr_t line_offset, intptr_t col_offset) const; |
3271 | 3273 |
3272 void GetTokenLocation(intptr_t token_pos, | 3274 void GetTokenLocation(TokenPosition token_pos, |
3273 intptr_t* line, | 3275 intptr_t* line, |
3274 intptr_t* column, | 3276 intptr_t* column, |
3275 intptr_t* token_len = NULL) const; | 3277 intptr_t* token_len = NULL) const; |
3276 | 3278 |
3277 // Returns index of first and last token on the given line. Returns both | 3279 // Returns index of first and last token on the given line. Returns both |
3278 // indices < 0 if no token exists on or after the line. If a token exists | 3280 // indices < 0 if no token exists on or after the line. If a token exists |
3279 // after, but not on given line, returns in *first_token_index the index of | 3281 // after, but not on given line, returns in *first_token_index the index of |
3280 // the first token after the line, and a negative value in *last_token_index. | 3282 // the first token after the line, and a negative value in *last_token_index. |
3281 void TokenRangeAtLine(intptr_t line_number, | 3283 void TokenRangeAtLine(intptr_t line_number, |
3282 intptr_t* first_token_index, | 3284 TokenPosition* first_token_index, |
3283 intptr_t* last_token_index) const; | 3285 TokenPosition* last_token_index) const; |
3284 | 3286 |
3285 static intptr_t InstanceSize() { | 3287 static intptr_t InstanceSize() { |
3286 return RoundedAllocationSize(sizeof(RawScript)); | 3288 return RoundedAllocationSize(sizeof(RawScript)); |
3287 } | 3289 } |
3288 | 3290 |
3289 static RawScript* New(const String& url, | 3291 static RawScript* New(const String& url, |
3290 const String& source, | 3292 const String& source, |
3291 RawScript::Kind kind); | 3293 RawScript::Kind kind); |
3292 | 3294 |
3293 private: | 3295 private: |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3441 // look in the scopes of all libraries that are imported | 3443 // look in the scopes of all libraries that are imported |
3442 // without a library prefix. | 3444 // without a library prefix. |
3443 RawObject* ResolveName(const String& name) const; | 3445 RawObject* ResolveName(const String& name) const; |
3444 | 3446 |
3445 void AddAnonymousClass(const Class& cls) const; | 3447 void AddAnonymousClass(const Class& cls) const; |
3446 | 3448 |
3447 void AddExport(const Namespace& ns) const; | 3449 void AddExport(const Namespace& ns) const; |
3448 | 3450 |
3449 void AddClassMetadata(const Class& cls, | 3451 void AddClassMetadata(const Class& cls, |
3450 const Object& tl_owner, | 3452 const Object& tl_owner, |
3451 intptr_t token_pos) const; | 3453 TokenPosition token_pos) const; |
3452 void AddFieldMetadata(const Field& field, intptr_t token_pos) const; | 3454 void AddFieldMetadata(const Field& field, TokenPosition token_pos) const; |
3453 void AddFunctionMetadata(const Function& func, intptr_t token_pos) const; | 3455 void AddFunctionMetadata(const Function& func, |
3454 void AddLibraryMetadata(const Object& tl_owner, intptr_t token_pos) const; | 3456 TokenPosition token_pos) const; |
| 3457 void AddLibraryMetadata(const Object& tl_owner, |
| 3458 TokenPosition token_pos) const; |
3455 void AddTypeParameterMetadata(const TypeParameter& param, | 3459 void AddTypeParameterMetadata(const TypeParameter& param, |
3456 intptr_t token_pos) const; | 3460 TokenPosition token_pos) const; |
3457 RawObject* GetMetadata(const Object& obj) const; | 3461 RawObject* GetMetadata(const Object& obj) const; |
3458 | 3462 |
3459 RawClass* toplevel_class() const { | 3463 RawClass* toplevel_class() const { |
3460 return raw_ptr()->toplevel_class_; | 3464 return raw_ptr()->toplevel_class_; |
3461 } | 3465 } |
3462 void set_toplevel_class(const Class& value) const; | 3466 void set_toplevel_class(const Class& value) const; |
3463 | 3467 |
3464 RawGrowableObjectArray* patch_classes() const { | 3468 RawGrowableObjectArray* patch_classes() const { |
3465 return raw_ptr()->patch_classes_; | 3469 return raw_ptr()->patch_classes_; |
3466 } | 3470 } |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3603 bool import_core_lib); | 3607 bool import_core_lib); |
3604 RawObject* LookupEntry(const String& name, intptr_t *index) const; | 3608 RawObject* LookupEntry(const String& name, intptr_t *index) const; |
3605 | 3609 |
3606 static bool IsKeyUsed(intptr_t key); | 3610 static bool IsKeyUsed(intptr_t key); |
3607 void AllocatePrivateKey() const; | 3611 void AllocatePrivateKey() const; |
3608 | 3612 |
3609 RawString* MakeMetadataName(const Object& obj) const; | 3613 RawString* MakeMetadataName(const Object& obj) const; |
3610 RawField* GetMetadataField(const String& metaname) const; | 3614 RawField* GetMetadataField(const String& metaname) const; |
3611 void AddMetadata(const Object& owner, | 3615 void AddMetadata(const Object& owner, |
3612 const String& name, | 3616 const String& name, |
3613 intptr_t token_pos) const; | 3617 TokenPosition token_pos) const; |
3614 | 3618 |
3615 FINAL_HEAP_OBJECT_IMPLEMENTATION(Library, Object); | 3619 FINAL_HEAP_OBJECT_IMPLEMENTATION(Library, Object); |
3616 | 3620 |
3617 friend class Bootstrap; | 3621 friend class Bootstrap; |
3618 friend class Class; | 3622 friend class Class; |
3619 friend class Debugger; | 3623 friend class Debugger; |
3620 friend class DictionaryIterator; | 3624 friend class DictionaryIterator; |
3621 friend class Namespace; | 3625 friend class Namespace; |
3622 friend class Object; | 3626 friend class Object; |
3623 }; | 3627 }; |
3624 | 3628 |
3625 | 3629 |
3626 // A Namespace contains the names in a library dictionary, filtered by | 3630 // A Namespace contains the names in a library dictionary, filtered by |
3627 // the show/hide combinators. | 3631 // the show/hide combinators. |
3628 class Namespace : public Object { | 3632 class Namespace : public Object { |
3629 public: | 3633 public: |
3630 RawLibrary* library() const { return raw_ptr()->library_; } | 3634 RawLibrary* library() const { return raw_ptr()->library_; } |
3631 RawArray* show_names() const { return raw_ptr()->show_names_; } | 3635 RawArray* show_names() const { return raw_ptr()->show_names_; } |
3632 RawArray* hide_names() const { return raw_ptr()->hide_names_; } | 3636 RawArray* hide_names() const { return raw_ptr()->hide_names_; } |
3633 | 3637 |
3634 void AddMetadata(const Object& owner, intptr_t token_pos); | 3638 void AddMetadata(const Object& owner, TokenPosition token_pos); |
3635 RawObject* GetMetadata() const; | 3639 RawObject* GetMetadata() const; |
3636 | 3640 |
3637 static intptr_t InstanceSize() { | 3641 static intptr_t InstanceSize() { |
3638 return RoundedAllocationSize(sizeof(RawNamespace)); | 3642 return RoundedAllocationSize(sizeof(RawNamespace)); |
3639 } | 3643 } |
3640 | 3644 |
3641 bool HidesName(const String& name) const; | 3645 bool HidesName(const String& name) const; |
3642 RawObject* Lookup(const String& name) const; | 3646 RawObject* Lookup(const String& name) const; |
3643 | 3647 |
3644 static RawNamespace* New(const Library& library, | 3648 static RawNamespace* New(const Library& library, |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3921 | 3925 |
3922 if ((cur_kind_ & kind_mask_) != 0) { | 3926 if ((cur_kind_ & kind_mask_) != 0) { |
3923 return true; // Current is valid. | 3927 return true; // Current is valid. |
3924 } | 3928 } |
3925 } | 3929 } |
3926 return false; | 3930 return false; |
3927 } | 3931 } |
3928 | 3932 |
3929 uword PcOffset() const { return cur_pc_offset_; } | 3933 uword PcOffset() const { return cur_pc_offset_; } |
3930 intptr_t DeoptId() const { return cur_deopt_id_; } | 3934 intptr_t DeoptId() const { return cur_deopt_id_; } |
3931 intptr_t TokenPos() const { return cur_token_pos_; } | 3935 TokenPosition TokenPos() const { return TokenPosition(cur_token_pos_); } |
3932 intptr_t TryIndex() const { return cur_try_index_; } | 3936 intptr_t TryIndex() const { return cur_try_index_; } |
3933 RawPcDescriptors::Kind Kind() const { | 3937 RawPcDescriptors::Kind Kind() const { |
3934 return static_cast<RawPcDescriptors::Kind>(cur_kind_); | 3938 return static_cast<RawPcDescriptors::Kind>(cur_kind_); |
3935 } | 3939 } |
3936 | 3940 |
3937 private: | 3941 private: |
3938 friend class PcDescriptors; | 3942 friend class PcDescriptors; |
3939 | 3943 |
3940 // For nested iterations, starting at element after. | 3944 // For nested iterations, starting at element after. |
3941 explicit Iterator(const Iterator& iter) | 3945 explicit Iterator(const Iterator& iter) |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4014 while (byte_index_ < code_source_map_.Length()) { | 4018 while (byte_index_ < code_source_map_.Length()) { |
4015 cur_pc_offset_ += code_source_map_.DecodeInteger(&byte_index_); | 4019 cur_pc_offset_ += code_source_map_.DecodeInteger(&byte_index_); |
4016 cur_token_pos_ += code_source_map_.DecodeInteger(&byte_index_); | 4020 cur_token_pos_ += code_source_map_.DecodeInteger(&byte_index_); |
4017 | 4021 |
4018 return true; | 4022 return true; |
4019 } | 4023 } |
4020 return false; | 4024 return false; |
4021 } | 4025 } |
4022 | 4026 |
4023 uword PcOffset() const { return cur_pc_offset_; } | 4027 uword PcOffset() const { return cur_pc_offset_; } |
4024 intptr_t TokenPos() const { return cur_token_pos_; } | 4028 TokenPosition TokenPos() const { return TokenPosition(cur_token_pos_); } |
4025 | 4029 |
4026 private: | 4030 private: |
4027 friend class CodeSourceMap; | 4031 friend class CodeSourceMap; |
4028 | 4032 |
4029 const CodeSourceMap& code_source_map_; | 4033 const CodeSourceMap& code_source_map_; |
4030 intptr_t byte_index_; | 4034 intptr_t byte_index_; |
4031 | 4035 |
4032 intptr_t cur_pc_offset_; | 4036 intptr_t cur_pc_offset_; |
4033 intptr_t cur_token_pos_; | 4037 intptr_t cur_token_pos_; |
4034 }; | 4038 }; |
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4448 Assembler* assembler, | 4452 Assembler* assembler, |
4449 bool optimized); | 4453 bool optimized); |
4450 static RawCode* LookupCode(uword pc); | 4454 static RawCode* LookupCode(uword pc); |
4451 static RawCode* LookupCodeInVmIsolate(uword pc); | 4455 static RawCode* LookupCodeInVmIsolate(uword pc); |
4452 static RawCode* FindCode(uword pc, int64_t timestamp); | 4456 static RawCode* FindCode(uword pc, int64_t timestamp); |
4453 | 4457 |
4454 int32_t GetPointerOffsetAt(int index) const { | 4458 int32_t GetPointerOffsetAt(int index) const { |
4455 NoSafepointScope no_safepoint; | 4459 NoSafepointScope no_safepoint; |
4456 return *PointerOffsetAddrAt(index); | 4460 return *PointerOffsetAddrAt(index); |
4457 } | 4461 } |
4458 intptr_t GetTokenIndexOfPC(uword pc) const; | 4462 TokenPosition GetTokenIndexOfPC(uword pc) const; |
4459 | 4463 |
4460 enum { | 4464 enum { |
4461 kInvalidPc = -1 | 4465 kInvalidPc = -1 |
4462 }; | 4466 }; |
4463 | 4467 |
4464 uword GetLazyDeoptPc() const; | 4468 uword GetLazyDeoptPc() const; |
4465 | 4469 |
4466 // Find pc, return 0 if not found. | 4470 // Find pc, return 0 if not found. |
4467 uword GetPcForDeoptId(intptr_t deopt_id, RawPcDescriptors::Kind kind) const; | 4471 uword GetPcForDeoptId(intptr_t deopt_id, RawPcDescriptors::Kind kind) const; |
4468 intptr_t GetDeoptIdForOsr(uword pc) const; | 4472 intptr_t GetDeoptIdForOsr(uword pc) const; |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4653 // functions enclosing the local function. Each captured variable is represented | 4657 // functions enclosing the local function. Each captured variable is represented |
4654 // by its token position in the source, its name, its type, its allocation index | 4658 // by its token position in the source, its name, its type, its allocation index |
4655 // in the context, and its context level. The function nesting level and loop | 4659 // in the context, and its context level. The function nesting level and loop |
4656 // nesting level are not preserved, since they are only used until the context | 4660 // nesting level are not preserved, since they are only used until the context |
4657 // level is assigned. In addition the ContextScope has a field 'is_implicit' | 4661 // level is assigned. In addition the ContextScope has a field 'is_implicit' |
4658 // which is true if the ContextScope was created for an implicit closure. | 4662 // which is true if the ContextScope was created for an implicit closure. |
4659 class ContextScope : public Object { | 4663 class ContextScope : public Object { |
4660 public: | 4664 public: |
4661 intptr_t num_variables() const { return raw_ptr()->num_variables_; } | 4665 intptr_t num_variables() const { return raw_ptr()->num_variables_; } |
4662 | 4666 |
4663 intptr_t TokenIndexAt(intptr_t scope_index) const; | 4667 TokenPosition TokenIndexAt(intptr_t scope_index) const; |
4664 void SetTokenIndexAt(intptr_t scope_index, intptr_t token_pos) const; | 4668 void SetTokenIndexAt(intptr_t scope_index, TokenPosition token_pos) const; |
4665 | 4669 |
4666 RawString* NameAt(intptr_t scope_index) const; | 4670 RawString* NameAt(intptr_t scope_index) const; |
4667 void SetNameAt(intptr_t scope_index, const String& name) const; | 4671 void SetNameAt(intptr_t scope_index, const String& name) const; |
4668 | 4672 |
4669 bool IsFinalAt(intptr_t scope_index) const; | 4673 bool IsFinalAt(intptr_t scope_index) const; |
4670 void SetIsFinalAt(intptr_t scope_index, bool is_final) const; | 4674 void SetIsFinalAt(intptr_t scope_index, bool is_final) const; |
4671 | 4675 |
4672 bool IsConstAt(intptr_t scope_index) const; | 4676 bool IsConstAt(intptr_t scope_index) const; |
4673 void SetIsConstAt(intptr_t scope_index, bool is_const) const; | 4677 void SetIsConstAt(intptr_t scope_index, bool is_const) const; |
4674 | 4678 |
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4878 // Build, cache, and return formatted message. | 4882 // Build, cache, and return formatted message. |
4879 RawString* FormatMessage() const; | 4883 RawString* FormatMessage() const; |
4880 | 4884 |
4881 static intptr_t InstanceSize() { | 4885 static intptr_t InstanceSize() { |
4882 return RoundedAllocationSize(sizeof(RawLanguageError)); | 4886 return RoundedAllocationSize(sizeof(RawLanguageError)); |
4883 } | 4887 } |
4884 | 4888 |
4885 // A null script means no source and a negative token_pos means no position. | 4889 // A null script means no source and a negative token_pos means no position. |
4886 static RawLanguageError* NewFormatted(const Error& prev_error, | 4890 static RawLanguageError* NewFormatted(const Error& prev_error, |
4887 const Script& script, | 4891 const Script& script, |
4888 intptr_t token_pos, | 4892 TokenPosition token_pos, |
4889 bool report_after_token, | 4893 bool report_after_token, |
4890 Report::Kind kind, | 4894 Report::Kind kind, |
4891 Heap::Space space, | 4895 Heap::Space space, |
4892 const char* format, ...) | 4896 const char* format, ...) |
4893 PRINTF_ATTRIBUTE(7, 8); | 4897 PRINTF_ATTRIBUTE(7, 8); |
4894 | 4898 |
4895 static RawLanguageError* NewFormattedV(const Error& prev_error, | 4899 static RawLanguageError* NewFormattedV(const Error& prev_error, |
4896 const Script& script, | 4900 const Script& script, |
4897 intptr_t token_pos, | 4901 TokenPosition token_pos, |
4898 bool report_after_token, | 4902 bool report_after_token, |
4899 Report::Kind kind, | 4903 Report::Kind kind, |
4900 Heap::Space space, | 4904 Heap::Space space, |
4901 const char* format, va_list args); | 4905 const char* format, va_list args); |
4902 | 4906 |
4903 static RawLanguageError* New(const String& formatted_message, | 4907 static RawLanguageError* New(const String& formatted_message, |
4904 Report::Kind kind = Report::kError, | 4908 Report::Kind kind = Report::kError, |
4905 Heap::Space space = Heap::kNew); | 4909 Heap::Space space = Heap::kNew); |
4906 | 4910 |
4907 virtual const char* ToErrorCString() const; | 4911 virtual const char* ToErrorCString() const; |
4908 | 4912 |
4909 private: | 4913 private: |
4910 RawError* previous_error() const { | 4914 RawError* previous_error() const { |
4911 return raw_ptr()->previous_error_; | 4915 return raw_ptr()->previous_error_; |
4912 } | 4916 } |
4913 void set_previous_error(const Error& value) const; | 4917 void set_previous_error(const Error& value) const; |
4914 | 4918 |
4915 RawScript* script() const { return raw_ptr()->script_; } | 4919 RawScript* script() const { return raw_ptr()->script_; } |
4916 void set_script(const Script& value) const; | 4920 void set_script(const Script& value) const; |
4917 | 4921 |
4918 intptr_t token_pos() const { return raw_ptr()->token_pos_; } | 4922 TokenPosition token_pos() const { return raw_ptr()->token_pos_; } |
4919 void set_token_pos(intptr_t value) const; | 4923 void set_token_pos(TokenPosition value) const; |
4920 | 4924 |
4921 bool report_after_token() const { return raw_ptr()->report_after_token_; } | 4925 bool report_after_token() const { return raw_ptr()->report_after_token_; } |
4922 void set_report_after_token(bool value); | 4926 void set_report_after_token(bool value); |
4923 | 4927 |
4924 void set_kind(uint8_t value) const; | 4928 void set_kind(uint8_t value) const; |
4925 | 4929 |
4926 RawString* message() const { return raw_ptr()->message_; } | 4930 RawString* message() const { return raw_ptr()->message_; } |
4927 void set_message(const String& value) const; | 4931 void set_message(const String& value) const; |
4928 | 4932 |
4929 RawString* formatted_message() const { return raw_ptr()->formatted_message_; } | 4933 RawString* formatted_message() const { return raw_ptr()->formatted_message_; } |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5192 virtual bool IsMalformedOrMalbounded() const; | 5196 virtual bool IsMalformedOrMalbounded() const; |
5193 virtual RawLanguageError* error() const; | 5197 virtual RawLanguageError* error() const; |
5194 virtual void set_error(const LanguageError& value) const; | 5198 virtual void set_error(const LanguageError& value) const; |
5195 virtual bool IsResolved() const; | 5199 virtual bool IsResolved() const; |
5196 virtual void SetIsResolved() const; | 5200 virtual void SetIsResolved() const; |
5197 virtual bool HasResolvedTypeClass() const; | 5201 virtual bool HasResolvedTypeClass() const; |
5198 virtual RawClass* type_class() const; | 5202 virtual RawClass* type_class() const; |
5199 virtual RawUnresolvedClass* unresolved_class() const; | 5203 virtual RawUnresolvedClass* unresolved_class() const; |
5200 virtual RawTypeArguments* arguments() const; | 5204 virtual RawTypeArguments* arguments() const; |
5201 virtual void set_arguments(const TypeArguments& value) const; | 5205 virtual void set_arguments(const TypeArguments& value) const; |
5202 virtual intptr_t token_pos() const; | 5206 virtual TokenPosition token_pos() const; |
5203 virtual bool IsInstantiated(TrailPtr trail = NULL) const; | 5207 virtual bool IsInstantiated(TrailPtr trail = NULL) const; |
5204 virtual bool CanonicalizeEquals(const Instance& other) const { | 5208 virtual bool CanonicalizeEquals(const Instance& other) const { |
5205 return Equals(other); | 5209 return Equals(other); |
5206 } | 5210 } |
5207 virtual bool Equals(const Instance& other) const { | 5211 virtual bool Equals(const Instance& other) const { |
5208 return IsEquivalent(other); | 5212 return IsEquivalent(other); |
5209 } | 5213 } |
5210 virtual bool IsEquivalent(const Instance& other, TrailPtr trail = NULL) const; | 5214 virtual bool IsEquivalent(const Instance& other, TrailPtr trail = NULL) const; |
5211 virtual bool IsRecursive() const; | 5215 virtual bool IsRecursive() const; |
5212 | 5216 |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5379 virtual bool IsResolved() const { | 5383 virtual bool IsResolved() const { |
5380 return raw_ptr()->type_state_ >= RawType::kResolved; | 5384 return raw_ptr()->type_state_ >= RawType::kResolved; |
5381 } | 5385 } |
5382 virtual void SetIsResolved() const; | 5386 virtual void SetIsResolved() const; |
5383 virtual bool HasResolvedTypeClass() const; // Own type class resolved. | 5387 virtual bool HasResolvedTypeClass() const; // Own type class resolved. |
5384 virtual RawClass* type_class() const; | 5388 virtual RawClass* type_class() const; |
5385 void set_type_class(const Object& value) const; | 5389 void set_type_class(const Object& value) const; |
5386 virtual RawUnresolvedClass* unresolved_class() const; | 5390 virtual RawUnresolvedClass* unresolved_class() const; |
5387 virtual RawTypeArguments* arguments() const { return raw_ptr()->arguments_; } | 5391 virtual RawTypeArguments* arguments() const { return raw_ptr()->arguments_; } |
5388 virtual void set_arguments(const TypeArguments& value) const; | 5392 virtual void set_arguments(const TypeArguments& value) const; |
5389 virtual intptr_t token_pos() const { return raw_ptr()->token_pos_; } | 5393 virtual TokenPosition token_pos() const { return raw_ptr()->token_pos_; } |
5390 virtual bool IsInstantiated(TrailPtr trail = NULL) const; | 5394 virtual bool IsInstantiated(TrailPtr trail = NULL) const; |
5391 virtual bool IsEquivalent(const Instance& other, TrailPtr trail = NULL) const; | 5395 virtual bool IsEquivalent(const Instance& other, TrailPtr trail = NULL) const; |
5392 virtual bool IsRecursive() const; | 5396 virtual bool IsRecursive() const; |
5393 virtual RawAbstractType* InstantiateFrom( | 5397 virtual RawAbstractType* InstantiateFrom( |
5394 const TypeArguments& instantiator_type_arguments, | 5398 const TypeArguments& instantiator_type_arguments, |
5395 Error* bound_error, | 5399 Error* bound_error, |
5396 TrailPtr trail = NULL, | 5400 TrailPtr trail = NULL, |
5397 Heap::Space space = Heap::kNew) const; | 5401 Heap::Space space = Heap::kNew) const; |
5398 virtual RawAbstractType* CloneUnfinalized() const; | 5402 virtual RawAbstractType* CloneUnfinalized() const; |
5399 virtual RawAbstractType* CloneUninstantiated( | 5403 virtual RawAbstractType* CloneUninstantiated( |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5453 static RawType* ArrayType(); | 5457 static RawType* ArrayType(); |
5454 | 5458 |
5455 // The 'Function' type. | 5459 // The 'Function' type. |
5456 static RawType* Function(); | 5460 static RawType* Function(); |
5457 | 5461 |
5458 // The finalized type of the given non-parameterized class. | 5462 // The finalized type of the given non-parameterized class. |
5459 static RawType* NewNonParameterizedType(const Class& type_class); | 5463 static RawType* NewNonParameterizedType(const Class& type_class); |
5460 | 5464 |
5461 static RawType* New(const Object& clazz, | 5465 static RawType* New(const Object& clazz, |
5462 const TypeArguments& arguments, | 5466 const TypeArguments& arguments, |
5463 intptr_t token_pos, | 5467 TokenPosition token_pos, |
5464 Heap::Space space = Heap::kOld); | 5468 Heap::Space space = Heap::kOld); |
5465 | 5469 |
5466 private: | 5470 private: |
5467 void set_token_pos(intptr_t token_pos) const; | 5471 void set_token_pos(TokenPosition token_pos) const; |
5468 void set_type_state(int8_t state) const; | 5472 void set_type_state(int8_t state) const; |
5469 | 5473 |
5470 static RawType* New(Heap::Space space = Heap::kOld); | 5474 static RawType* New(Heap::Space space = Heap::kOld); |
5471 | 5475 |
5472 FINAL_HEAP_OBJECT_IMPLEMENTATION(Type, AbstractType); | 5476 FINAL_HEAP_OBJECT_IMPLEMENTATION(Type, AbstractType); |
5473 friend class Class; | 5477 friend class Class; |
5474 friend class TypeArguments; | 5478 friend class TypeArguments; |
5475 }; | 5479 }; |
5476 | 5480 |
5477 | 5481 |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5526 // IsDynamicType(), IsBoolType(), etc... | 5530 // IsDynamicType(), IsBoolType(), etc... |
5527 virtual bool HasResolvedTypeClass() const { return false; } | 5531 virtual bool HasResolvedTypeClass() const { return false; } |
5528 // Return scope_class from virtual type_class() to factorize finalization | 5532 // Return scope_class from virtual type_class() to factorize finalization |
5529 // with Type, also a parameterized type. | 5533 // with Type, also a parameterized type. |
5530 virtual RawClass* type_class() const { return scope_class(); } | 5534 virtual RawClass* type_class() const { return scope_class(); } |
5531 RawClass* scope_class() const { return raw_ptr()->scope_class_; } | 5535 RawClass* scope_class() const { return raw_ptr()->scope_class_; } |
5532 void set_scope_class(const Class& value) const; | 5536 void set_scope_class(const Class& value) const; |
5533 virtual RawTypeArguments* arguments() const { return raw_ptr()->arguments_; } | 5537 virtual RawTypeArguments* arguments() const { return raw_ptr()->arguments_; } |
5534 virtual void set_arguments(const TypeArguments& value) const; | 5538 virtual void set_arguments(const TypeArguments& value) const; |
5535 RawFunction* signature() const { return raw_ptr()->signature_; } | 5539 RawFunction* signature() const { return raw_ptr()->signature_; } |
5536 virtual intptr_t token_pos() const { return raw_ptr()->token_pos_; } | 5540 virtual TokenPosition token_pos() const { return raw_ptr()->token_pos_; } |
5537 virtual bool IsInstantiated(TrailPtr trail = NULL) const; | 5541 virtual bool IsInstantiated(TrailPtr trail = NULL) const; |
5538 virtual bool IsEquivalent(const Instance& other, TrailPtr trail = NULL) const; | 5542 virtual bool IsEquivalent(const Instance& other, TrailPtr trail = NULL) const; |
5539 virtual bool IsRecursive() const; | 5543 virtual bool IsRecursive() const; |
5540 virtual RawAbstractType* InstantiateFrom( | 5544 virtual RawAbstractType* InstantiateFrom( |
5541 const TypeArguments& instantiator_type_arguments, | 5545 const TypeArguments& instantiator_type_arguments, |
5542 Error* malformed_error, | 5546 Error* malformed_error, |
5543 TrailPtr trail = NULL, | 5547 TrailPtr trail = NULL, |
5544 Heap::Space space = Heap::kNew) const; | 5548 Heap::Space space = Heap::kNew) const; |
5545 virtual RawAbstractType* CloneUnfinalized() const; | 5549 virtual RawAbstractType* CloneUnfinalized() const; |
5546 virtual RawAbstractType* CloneUninstantiated( | 5550 virtual RawAbstractType* CloneUninstantiated( |
5547 const Class& new_owner, | 5551 const Class& new_owner, |
5548 TrailPtr trail = NULL) const; | 5552 TrailPtr trail = NULL) const; |
5549 virtual RawAbstractType* Canonicalize(TrailPtr trail = NULL) const; | 5553 virtual RawAbstractType* Canonicalize(TrailPtr trail = NULL) const; |
5550 | 5554 |
5551 virtual intptr_t Hash() const; | 5555 virtual intptr_t Hash() const; |
5552 | 5556 |
5553 static intptr_t InstanceSize() { | 5557 static intptr_t InstanceSize() { |
5554 return RoundedAllocationSize(sizeof(RawFunctionType)); | 5558 return RoundedAllocationSize(sizeof(RawFunctionType)); |
5555 } | 5559 } |
5556 | 5560 |
5557 static RawFunctionType* New(const Class& scope_class, | 5561 static RawFunctionType* New(const Class& scope_class, |
5558 const TypeArguments& arguments, | 5562 const TypeArguments& arguments, |
5559 const Function& signature, | 5563 const Function& signature, |
5560 intptr_t token_pos, | 5564 TokenPosition token_pos, |
5561 Heap::Space space = Heap::kOld); | 5565 Heap::Space space = Heap::kOld); |
5562 | 5566 |
5563 private: | 5567 private: |
5564 void set_signature(const Function& value) const; | 5568 void set_signature(const Function& value) const; |
5565 void set_token_pos(intptr_t token_pos) const; | 5569 void set_token_pos(TokenPosition token_pos) const; |
5566 void set_type_state(int8_t state) const; | 5570 void set_type_state(int8_t state) const; |
5567 | 5571 |
5568 static RawFunctionType* New(Heap::Space space = Heap::kOld); | 5572 static RawFunctionType* New(Heap::Space space = Heap::kOld); |
5569 | 5573 |
5570 FINAL_HEAP_OBJECT_IMPLEMENTATION(FunctionType, AbstractType); | 5574 FINAL_HEAP_OBJECT_IMPLEMENTATION(FunctionType, AbstractType); |
5571 friend class Class; | 5575 friend class Class; |
5572 friend class TypeArguments; | 5576 friend class TypeArguments; |
5573 }; | 5577 }; |
5574 | 5578 |
5575 | 5579 |
(...skipping 23 matching lines...) Expand all Loading... |
5599 return AbstractType::Handle(type()).HasResolvedTypeClass(); | 5603 return AbstractType::Handle(type()).HasResolvedTypeClass(); |
5600 } | 5604 } |
5601 RawAbstractType* type() const { return raw_ptr()->type_; } | 5605 RawAbstractType* type() const { return raw_ptr()->type_; } |
5602 void set_type(const AbstractType& value) const; | 5606 void set_type(const AbstractType& value) const; |
5603 virtual RawClass* type_class() const { | 5607 virtual RawClass* type_class() const { |
5604 return AbstractType::Handle(type()).type_class(); | 5608 return AbstractType::Handle(type()).type_class(); |
5605 } | 5609 } |
5606 virtual RawTypeArguments* arguments() const { | 5610 virtual RawTypeArguments* arguments() const { |
5607 return AbstractType::Handle(type()).arguments(); | 5611 return AbstractType::Handle(type()).arguments(); |
5608 } | 5612 } |
5609 virtual intptr_t token_pos() const { | 5613 virtual TokenPosition token_pos() const { |
5610 return AbstractType::Handle(type()).token_pos(); | 5614 return AbstractType::Handle(type()).token_pos(); |
5611 } | 5615 } |
5612 virtual bool IsInstantiated(TrailPtr trail = NULL) const; | 5616 virtual bool IsInstantiated(TrailPtr trail = NULL) const; |
5613 virtual bool IsEquivalent(const Instance& other, | 5617 virtual bool IsEquivalent(const Instance& other, |
5614 TrailPtr trail = NULL) const; | 5618 TrailPtr trail = NULL) const; |
5615 virtual bool IsRecursive() const { return true; } | 5619 virtual bool IsRecursive() const { return true; } |
5616 virtual RawTypeRef* InstantiateFrom( | 5620 virtual RawTypeRef* InstantiateFrom( |
5617 const TypeArguments& instantiator_type_arguments, | 5621 const TypeArguments& instantiator_type_arguments, |
5618 Error* bound_error, | 5622 Error* bound_error, |
5619 TrailPtr trail = NULL, | 5623 TrailPtr trail = NULL, |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5682 RawAbstractType* bound() const { return raw_ptr()->bound_; } | 5686 RawAbstractType* bound() const { return raw_ptr()->bound_; } |
5683 void set_bound(const AbstractType& value) const; | 5687 void set_bound(const AbstractType& value) const; |
5684 // Returns true if bounded_type is below upper_bound, otherwise return false | 5688 // Returns true if bounded_type is below upper_bound, otherwise return false |
5685 // and set bound_error if both bounded_type and upper_bound are instantiated. | 5689 // and set bound_error if both bounded_type and upper_bound are instantiated. |
5686 // If one or both are not instantiated, returning false only means that the | 5690 // If one or both are not instantiated, returning false only means that the |
5687 // bound cannot be checked yet and this is not an error. | 5691 // bound cannot be checked yet and this is not an error. |
5688 bool CheckBound(const AbstractType& bounded_type, | 5692 bool CheckBound(const AbstractType& bounded_type, |
5689 const AbstractType& upper_bound, | 5693 const AbstractType& upper_bound, |
5690 Error* bound_error, | 5694 Error* bound_error, |
5691 Heap::Space space = Heap::kNew) const; | 5695 Heap::Space space = Heap::kNew) const; |
5692 virtual intptr_t token_pos() const { return raw_ptr()->token_pos_; } | 5696 virtual TokenPosition token_pos() const { return raw_ptr()->token_pos_; } |
5693 virtual bool IsInstantiated(TrailPtr trail = NULL) const { | 5697 virtual bool IsInstantiated(TrailPtr trail = NULL) const { |
5694 return false; | 5698 return false; |
5695 } | 5699 } |
5696 virtual bool IsEquivalent(const Instance& other, TrailPtr trail = NULL) const; | 5700 virtual bool IsEquivalent(const Instance& other, TrailPtr trail = NULL) const; |
5697 virtual bool IsRecursive() const { return false; } | 5701 virtual bool IsRecursive() const { return false; } |
5698 virtual RawAbstractType* InstantiateFrom( | 5702 virtual RawAbstractType* InstantiateFrom( |
5699 const TypeArguments& instantiator_type_arguments, | 5703 const TypeArguments& instantiator_type_arguments, |
5700 Error* bound_error, | 5704 Error* bound_error, |
5701 TrailPtr trail = NULL, | 5705 TrailPtr trail = NULL, |
5702 Heap::Space space = Heap::kNew) const; | 5706 Heap::Space space = Heap::kNew) const; |
5703 virtual RawAbstractType* CloneUnfinalized() const; | 5707 virtual RawAbstractType* CloneUnfinalized() const; |
5704 virtual RawAbstractType* CloneUninstantiated( | 5708 virtual RawAbstractType* CloneUninstantiated( |
5705 const Class& new_owner, TrailPtr trail = NULL) const; | 5709 const Class& new_owner, TrailPtr trail = NULL) const; |
5706 virtual RawAbstractType* Canonicalize(TrailPtr trail = NULL) const { | 5710 virtual RawAbstractType* Canonicalize(TrailPtr trail = NULL) const { |
5707 return raw(); | 5711 return raw(); |
5708 } | 5712 } |
5709 | 5713 |
5710 virtual intptr_t Hash() const; | 5714 virtual intptr_t Hash() const; |
5711 | 5715 |
5712 static intptr_t InstanceSize() { | 5716 static intptr_t InstanceSize() { |
5713 return RoundedAllocationSize(sizeof(RawTypeParameter)); | 5717 return RoundedAllocationSize(sizeof(RawTypeParameter)); |
5714 } | 5718 } |
5715 | 5719 |
5716 static RawTypeParameter* New(const Class& parameterized_class, | 5720 static RawTypeParameter* New(const Class& parameterized_class, |
5717 intptr_t index, | 5721 intptr_t index, |
5718 const String& name, | 5722 const String& name, |
5719 const AbstractType& bound, | 5723 const AbstractType& bound, |
5720 intptr_t token_pos); | 5724 TokenPosition token_pos); |
5721 | 5725 |
5722 private: | 5726 private: |
5723 void set_parameterized_class(const Class& value) const; | 5727 void set_parameterized_class(const Class& value) const; |
5724 void set_name(const String& value) const; | 5728 void set_name(const String& value) const; |
5725 void set_token_pos(intptr_t token_pos) const; | 5729 void set_token_pos(TokenPosition token_pos) const; |
5726 void set_type_state(int8_t state) const; | 5730 void set_type_state(int8_t state) const; |
5727 | 5731 |
5728 static RawTypeParameter* New(); | 5732 static RawTypeParameter* New(); |
5729 | 5733 |
5730 FINAL_HEAP_OBJECT_IMPLEMENTATION(TypeParameter, AbstractType); | 5734 FINAL_HEAP_OBJECT_IMPLEMENTATION(TypeParameter, AbstractType); |
5731 friend class Class; | 5735 friend class Class; |
5732 }; | 5736 }; |
5733 | 5737 |
5734 | 5738 |
5735 // A BoundedType represents a type instantiated at compile time from a type | 5739 // A BoundedType represents a type instantiated at compile time from a type |
(...skipping 25 matching lines...) Expand all Loading... |
5761 return AbstractType::Handle(type()).unresolved_class(); | 5765 return AbstractType::Handle(type()).unresolved_class(); |
5762 } | 5766 } |
5763 virtual RawTypeArguments* arguments() const { | 5767 virtual RawTypeArguments* arguments() const { |
5764 return AbstractType::Handle(type()).arguments(); | 5768 return AbstractType::Handle(type()).arguments(); |
5765 } | 5769 } |
5766 RawAbstractType* type() const { return raw_ptr()->type_; } | 5770 RawAbstractType* type() const { return raw_ptr()->type_; } |
5767 RawAbstractType* bound() const { return raw_ptr()->bound_; } | 5771 RawAbstractType* bound() const { return raw_ptr()->bound_; } |
5768 RawTypeParameter* type_parameter() const { | 5772 RawTypeParameter* type_parameter() const { |
5769 return raw_ptr()->type_parameter_; | 5773 return raw_ptr()->type_parameter_; |
5770 } | 5774 } |
5771 virtual intptr_t token_pos() const { | 5775 virtual TokenPosition token_pos() const { |
5772 return AbstractType::Handle(type()).token_pos(); | 5776 return AbstractType::Handle(type()).token_pos(); |
5773 } | 5777 } |
5774 virtual bool IsInstantiated(TrailPtr trail = NULL) const { | 5778 virtual bool IsInstantiated(TrailPtr trail = NULL) const { |
5775 // It is not possible to encounter an instantiated bounded type with an | 5779 // It is not possible to encounter an instantiated bounded type with an |
5776 // uninstantiated upper bound. Therefore, we do not need to check if the | 5780 // uninstantiated upper bound. Therefore, we do not need to check if the |
5777 // bound is instantiated. Moreover, doing so could lead into cycles, as in | 5781 // bound is instantiated. Moreover, doing so could lead into cycles, as in |
5778 // class C<T extends C<C>> { }. | 5782 // class C<T extends C<C>> { }. |
5779 return AbstractType::Handle(type()).IsInstantiated(); | 5783 return AbstractType::Handle(type()).IsInstantiated(); |
5780 } | 5784 } |
5781 virtual bool IsEquivalent(const Instance& other, TrailPtr trail = NULL) const; | 5785 virtual bool IsEquivalent(const Instance& other, TrailPtr trail = NULL) const; |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5825 // A MixinAppType object is unfinalized by definition, since it is replaced at | 5829 // A MixinAppType object is unfinalized by definition, since it is replaced at |
5826 // class finalization time with a finalized (and possibly malformed or | 5830 // class finalization time with a finalized (and possibly malformed or |
5827 // malbounded) Type object. | 5831 // malbounded) Type object. |
5828 virtual bool IsFinalized() const { return false; } | 5832 virtual bool IsFinalized() const { return false; } |
5829 virtual bool IsMalformed() const { return false; } | 5833 virtual bool IsMalformed() const { return false; } |
5830 virtual bool IsMalbounded() const { return false; } | 5834 virtual bool IsMalbounded() const { return false; } |
5831 virtual bool IsMalformedOrMalbounded() const { return false; } | 5835 virtual bool IsMalformedOrMalbounded() const { return false; } |
5832 virtual bool IsResolved() const { return false; } | 5836 virtual bool IsResolved() const { return false; } |
5833 virtual bool HasResolvedTypeClass() const { return false; } | 5837 virtual bool HasResolvedTypeClass() const { return false; } |
5834 virtual RawString* Name() const; | 5838 virtual RawString* Name() const; |
5835 virtual intptr_t token_pos() const; | 5839 virtual TokenPosition token_pos() const; |
5836 | 5840 |
5837 // Returns the mixin composition depth of this mixin application type. | 5841 // Returns the mixin composition depth of this mixin application type. |
5838 intptr_t Depth() const; | 5842 intptr_t Depth() const; |
5839 | 5843 |
5840 // Returns the declared super type of the mixin application, which will also | 5844 // Returns the declared super type of the mixin application, which will also |
5841 // be the super type of the first synthesized class, e.g. class "S&M" will | 5845 // be the super type of the first synthesized class, e.g. class "S&M" will |
5842 // refer to super type "S<T>". | 5846 // refer to super type "S<T>". |
5843 RawAbstractType* super_type() const { return raw_ptr()->super_type_; } | 5847 RawAbstractType* super_type() const { return raw_ptr()->super_type_; } |
5844 | 5848 |
5845 // Returns the mixin type at the given mixin composition depth, e.g. N<V> at | 5849 // Returns the mixin type at the given mixin composition depth, e.g. N<V> at |
(...skipping 2531 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
8377 | 8381 |
8378 | 8382 |
8379 RawObject* MegamorphicCache::GetTargetFunction(const Array& array, | 8383 RawObject* MegamorphicCache::GetTargetFunction(const Array& array, |
8380 intptr_t index) { | 8384 intptr_t index) { |
8381 return array.At((index * kEntryLength) + kTargetFunctionIndex); | 8385 return array.At((index * kEntryLength) + kTargetFunctionIndex); |
8382 } | 8386 } |
8383 | 8387 |
8384 } // namespace dart | 8388 } // namespace dart |
8385 | 8389 |
8386 #endif // VM_OBJECT_H_ | 8390 #endif // VM_OBJECT_H_ |
OLD | NEW |