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 3204 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3215 | 3215 |
3216 // Check if this type represents the 'num' type. | 3216 // Check if this type represents the 'num' type. |
3217 bool IsNumberType() const; | 3217 bool IsNumberType() const; |
3218 | 3218 |
3219 // Check if this type represents the 'String' type. | 3219 // Check if this type represents the 'String' type. |
3220 bool IsStringType() const; | 3220 bool IsStringType() const; |
3221 | 3221 |
3222 // Check if this type represents the 'Function' type. | 3222 // Check if this type represents the 'Function' type. |
3223 bool IsFunctionType() const; | 3223 bool IsFunctionType() const; |
3224 | 3224 |
3225 // Check if this type represents the 'List' interface. | |
3226 bool IsListInterface() const; | |
3227 | |
3228 // Check if this type is an interface type. | 3225 // Check if this type is an interface type. |
3229 bool IsInterfaceType() const { | 3226 bool IsInterfaceType() const { |
3230 if (!HasResolvedTypeClass()) { | 3227 if (!HasResolvedTypeClass()) { |
3231 return false; | 3228 return false; |
3232 } | 3229 } |
3233 const Class& cls = Class::Handle(type_class()); | 3230 const Class& cls = Class::Handle(type_class()); |
3234 return !cls.IsNull() && cls.is_interface(); | 3231 return !cls.IsNull() && cls.is_interface(); |
3235 } | 3232 } |
3236 | 3233 |
3237 // Check the subtype relationship. | 3234 // Check the subtype relationship. |
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3336 | 3333 |
3337 // The 'double' type. | 3334 // The 'double' type. |
3338 static RawType* Double(); | 3335 static RawType* Double(); |
3339 | 3336 |
3340 // The 'num' interface type. | 3337 // The 'num' interface type. |
3341 static RawType* Number(); | 3338 static RawType* Number(); |
3342 | 3339 |
3343 // The 'String' type. | 3340 // The 'String' type. |
3344 static RawType* StringType(); | 3341 static RawType* StringType(); |
3345 | 3342 |
| 3343 // The 'Array' type. |
| 3344 static RawType* ArrayType(); |
| 3345 |
3346 // The 'Function' interface type. | 3346 // The 'Function' interface type. |
3347 static RawType* Function(); | 3347 static RawType* Function(); |
3348 | 3348 |
3349 // The 'List' interface type. | |
3350 static RawType* ListInterface(); | |
3351 | |
3352 // The finalized type of the given non-parameterized class. | 3349 // The finalized type of the given non-parameterized class. |
3353 static RawType* NewNonParameterizedType(const Class& type_class); | 3350 static RawType* NewNonParameterizedType(const Class& type_class); |
3354 | 3351 |
3355 static RawType* New(const Object& clazz, | 3352 static RawType* New(const Object& clazz, |
3356 const AbstractTypeArguments& arguments, | 3353 const AbstractTypeArguments& arguments, |
3357 intptr_t token_pos, | 3354 intptr_t token_pos, |
3358 Heap::Space space = Heap::kOld); | 3355 Heap::Space space = Heap::kOld); |
3359 | 3356 |
3360 private: | 3357 private: |
3361 void set_token_pos(intptr_t token_pos) const; | 3358 void set_token_pos(intptr_t token_pos) const; |
(...skipping 888 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4250 } | 4247 } |
4251 void SetAt(intptr_t index, const Object& value) const { | 4248 void SetAt(intptr_t index, const Object& value) const { |
4252 // TODO(iposva): Add storing NoGCScope. | 4249 // TODO(iposva): Add storing NoGCScope. |
4253 StorePointer(ObjectAddr(index), value.raw()); | 4250 StorePointer(ObjectAddr(index), value.raw()); |
4254 } | 4251 } |
4255 | 4252 |
4256 virtual RawAbstractTypeArguments* GetTypeArguments() const { | 4253 virtual RawAbstractTypeArguments* GetTypeArguments() const { |
4257 return raw_ptr()->type_arguments_; | 4254 return raw_ptr()->type_arguments_; |
4258 } | 4255 } |
4259 virtual void SetTypeArguments(const AbstractTypeArguments& value) const { | 4256 virtual void SetTypeArguments(const AbstractTypeArguments& value) const { |
| 4257 ASSERT(value.IsNull() || ((value.Length() == 1) && value.IsInstantiated())); |
4260 StorePointer(&raw_ptr()->type_arguments_, value.raw()); | 4258 StorePointer(&raw_ptr()->type_arguments_, value.raw()); |
4261 } | 4259 } |
4262 | 4260 |
4263 virtual bool Equals(const Instance& other) const; | 4261 virtual bool Equals(const Instance& other) const; |
4264 | 4262 |
4265 static const intptr_t kBytesPerElement = kWordSize; | 4263 static const intptr_t kBytesPerElement = kWordSize; |
4266 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement; | 4264 static const intptr_t kMaxElements = kSmiMax / kBytesPerElement; |
4267 | 4265 |
4268 static intptr_t type_arguments_offset() { | 4266 static intptr_t type_arguments_offset() { |
4269 return OFFSET_OF(RawArray, type_arguments_); | 4267 return OFFSET_OF(RawArray, type_arguments_); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4377 void Grow(intptr_t new_capacity, Heap::Space space = Heap::kNew) const; | 4375 void Grow(intptr_t new_capacity, Heap::Space space = Heap::kNew) const; |
4378 RawObject* RemoveLast() const; | 4376 RawObject* RemoveLast() const; |
4379 | 4377 |
4380 virtual RawAbstractTypeArguments* GetTypeArguments() const { | 4378 virtual RawAbstractTypeArguments* GetTypeArguments() const { |
4381 ASSERT(AbstractTypeArguments::AreEqual( | 4379 ASSERT(AbstractTypeArguments::AreEqual( |
4382 AbstractTypeArguments::Handle(Array::Handle(data()).GetTypeArguments()), | 4380 AbstractTypeArguments::Handle(Array::Handle(data()).GetTypeArguments()), |
4383 AbstractTypeArguments::Handle(raw_ptr()->type_arguments_))); | 4381 AbstractTypeArguments::Handle(raw_ptr()->type_arguments_))); |
4384 return raw_ptr()->type_arguments_; | 4382 return raw_ptr()->type_arguments_; |
4385 } | 4383 } |
4386 virtual void SetTypeArguments(const AbstractTypeArguments& value) const { | 4384 virtual void SetTypeArguments(const AbstractTypeArguments& value) const { |
| 4385 ASSERT(value.IsNull() || ((value.Length() == 1) && value.IsInstantiated())); |
4387 const Array& contents = Array::Handle(data()); | 4386 const Array& contents = Array::Handle(data()); |
4388 contents.SetTypeArguments(value); | 4387 contents.SetTypeArguments(value); |
4389 StorePointer(&raw_ptr()->type_arguments_, value.raw()); | 4388 StorePointer(&raw_ptr()->type_arguments_, value.raw()); |
4390 } | 4389 } |
4391 | 4390 |
4392 virtual bool Equals(const Instance& other) const; | 4391 virtual bool Equals(const Instance& other) const; |
4393 | 4392 |
4394 static intptr_t type_arguments_offset() { | 4393 static intptr_t type_arguments_offset() { |
4395 return OFFSET_OF(RawGrowableObjectArray, type_arguments_); | 4394 return OFFSET_OF(RawGrowableObjectArray, type_arguments_); |
4396 } | 4395 } |
(...skipping 1525 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5922 if (this->CharAt(i) != str.CharAt(begin_index + i)) { | 5921 if (this->CharAt(i) != str.CharAt(begin_index + i)) { |
5923 return false; | 5922 return false; |
5924 } | 5923 } |
5925 } | 5924 } |
5926 return true; | 5925 return true; |
5927 } | 5926 } |
5928 | 5927 |
5929 } // namespace dart | 5928 } // namespace dart |
5930 | 5929 |
5931 #endif // VM_OBJECT_H_ | 5930 #endif // VM_OBJECT_H_ |
OLD | NEW |