Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(281)

Side by Side Diff: runtime/vm/object.h

Issue 103913005: Introduce class TypeRef in the VM to fully support recursive types. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 4144 matching lines...) Expand 10 before | Expand all | Expand 10 after
4155 virtual bool IsMalformed() const; 4155 virtual bool IsMalformed() const;
4156 virtual bool IsMalbounded() const; 4156 virtual bool IsMalbounded() const;
4157 virtual bool IsMalformedOrMalbounded() const; 4157 virtual bool IsMalformedOrMalbounded() const;
4158 virtual RawLanguageError* error() const { return raw_ptr()->error_; } 4158 virtual RawLanguageError* error() const { return raw_ptr()->error_; }
4159 virtual void set_error(const LanguageError& value) const; 4159 virtual void set_error(const LanguageError& value) const;
4160 virtual bool IsResolved() const; // Class and all arguments classes resolved. 4160 virtual bool IsResolved() const; // Class and all arguments classes resolved.
4161 virtual bool HasResolvedTypeClass() const; // Own type class resolved. 4161 virtual bool HasResolvedTypeClass() const; // Own type class resolved.
4162 virtual RawClass* type_class() const; 4162 virtual RawClass* type_class() const;
4163 void set_type_class(const Object& value) const; 4163 void set_type_class(const Object& value) const;
4164 virtual RawUnresolvedClass* unresolved_class() const; 4164 virtual RawUnresolvedClass* unresolved_class() const;
4165 RawString* TypeClassName() const;
4166 virtual RawAbstractTypeArguments* arguments() const; 4165 virtual RawAbstractTypeArguments* arguments() const;
4167 void set_arguments(const AbstractTypeArguments& value) const; 4166 void set_arguments(const AbstractTypeArguments& value) const;
4168 virtual intptr_t token_pos() const { return raw_ptr()->token_pos_; } 4167 virtual intptr_t token_pos() const { return raw_ptr()->token_pos_; }
4169 virtual bool IsInstantiated() const; 4168 virtual bool IsInstantiated() const;
4170 virtual bool Equals(const Instance& other) const; 4169 virtual bool Equals(const Instance& other) const;
4171 virtual RawAbstractType* InstantiateFrom( 4170 virtual RawAbstractType* InstantiateFrom(
4172 const AbstractTypeArguments& instantiator_type_arguments, 4171 const AbstractTypeArguments& instantiator_type_arguments,
4173 Error* malformed_error) const; 4172 Error* malformed_error) const;
4174 virtual RawAbstractType* CloneUnfinalized() const; 4173 virtual RawAbstractType* CloneUnfinalized() const;
4175 virtual RawAbstractType* Canonicalize() const; 4174 virtual RawAbstractType* Canonicalize() const;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
4237 void set_token_pos(intptr_t token_pos) const; 4236 void set_token_pos(intptr_t token_pos) const;
4238 void set_type_state(int8_t state) const; 4237 void set_type_state(int8_t state) const;
4239 4238
4240 static RawType* New(Heap::Space space = Heap::kOld); 4239 static RawType* New(Heap::Space space = Heap::kOld);
4241 4240
4242 FINAL_HEAP_OBJECT_IMPLEMENTATION(Type, AbstractType); 4241 FINAL_HEAP_OBJECT_IMPLEMENTATION(Type, AbstractType);
4243 friend class Class; 4242 friend class Class;
4244 }; 4243 };
4245 4244
4246 4245
4246 // A TypeRef is used to break cycles in the representation of recursive types.
4247 // Its only field is the recursive AbstractType it refers to.
4248 // Note that the cycle always involves type arguments.
4249 class TypeRef : public AbstractType {
4250 public:
4251 virtual bool IsFinalized() const {
4252 return AbstractType::Handle(type()).IsFinalized();
4253 }
4254 virtual bool IsBeingFinalized() const {
4255 return AbstractType::Handle(type()).IsBeingFinalized();
4256 }
4257 virtual bool IsMalformed() const {
4258 return AbstractType::Handle(type()).IsMalformed();
4259 }
4260 virtual bool IsMalbounded() const {
4261 return AbstractType::Handle(type()).IsMalbounded();
4262 }
4263 virtual bool IsMalformedOrMalbounded() const {
4264 return AbstractType::Handle(type()).IsMalformedOrMalbounded();
4265 }
4266 virtual bool IsResolved() const { return true; }
4267 virtual bool HasResolvedTypeClass() const { return true; }
4268 RawAbstractType* type() const { return raw_ptr()->type_; }
4269 void set_type(const AbstractType& value) const;
4270 virtual RawClass* type_class() const {
4271 return AbstractType::Handle(type()).type_class();
4272 }
4273 virtual RawAbstractTypeArguments* arguments() const {
4274 return AbstractType::Handle(type()).arguments();
4275 }
4276 virtual intptr_t token_pos() const {
4277 return AbstractType::Handle(type()).token_pos();
4278 }
4279 virtual bool IsInstantiated() const;
4280 virtual bool Equals(const Instance& other) const;
4281 virtual RawAbstractType* InstantiateFrom(
4282 const AbstractTypeArguments& instantiator_type_arguments,
4283 Error* bound_error) const;
4284 virtual RawAbstractType* Canonicalize() const;
4285
4286 virtual intptr_t Hash() const;
4287
4288 static intptr_t InstanceSize() {
4289 return RoundedAllocationSize(sizeof(RawTypeRef));
4290 }
4291
4292 static RawTypeRef* New(const AbstractType& type);
4293
4294 private:
4295 bool is_being_checked() const {
4296 return raw_ptr()->is_being_checked_;
4297 }
4298 void set_is_being_checked(bool value) const;
4299
4300 static RawTypeRef* New();
4301
4302 FINAL_HEAP_OBJECT_IMPLEMENTATION(TypeRef, AbstractType);
4303 friend class Class;
4304 };
4305
4306
4247 // A TypeParameter represents a type parameter of a parameterized class. 4307 // A TypeParameter represents a type parameter of a parameterized class.
4248 // It specifies its index (and its name for debugging purposes), as well as its 4308 // It specifies its index (and its name for debugging purposes), as well as its
4249 // upper bound. 4309 // upper bound.
4250 // For example, the type parameter 'V' is specified as index 1 in the context of 4310 // For example, the type parameter 'V' is specified as index 1 in the context of
4251 // the class HashMap<K, V>. At compile time, the TypeParameter is not 4311 // the class HashMap<K, V>. At compile time, the TypeParameter is not
4252 // instantiated yet, i.e. it is only a place holder. 4312 // instantiated yet, i.e. it is only a place holder.
4253 // Upon finalization, the TypeParameter index is changed to reflect its position 4313 // Upon finalization, the TypeParameter index is changed to reflect its position
4254 // as type argument (rather than type parameter) of the parameterized class. 4314 // as type argument (rather than type parameter) of the parameterized class.
4255 // If the type parameter is declared without an extends clause, its bound is set 4315 // If the type parameter is declared without an extends clause, its bound is set
4256 // to the ObjectType. 4316 // to the ObjectType.
(...skipping 2190 matching lines...) Expand 10 before | Expand all | Expand 10 after
6447 6507
6448 6508
6449 RawObject* MegamorphicCache::GetTargetFunction(const Array& array, 6509 RawObject* MegamorphicCache::GetTargetFunction(const Array& array,
6450 intptr_t index) { 6510 intptr_t index) {
6451 return array.At((index * kEntryLength) + kTargetFunctionIndex); 6511 return array.At((index * kEntryLength) + kTargetFunctionIndex);
6452 } 6512 }
6453 6513
6454 } // namespace dart 6514 } // namespace dart
6455 6515
6456 #endif // VM_OBJECT_H_ 6516 #endif // VM_OBJECT_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698