| Index: runtime/vm/object.h
|
| diff --git a/runtime/vm/object.h b/runtime/vm/object.h
|
| index 6dd75dd955dc2c9f135008fd6788f895153a7918..3c1ec51eb1bb4ded7efa60df0c8f4cfa7c24a979 100644
|
| --- a/runtime/vm/object.h
|
| +++ b/runtime/vm/object.h
|
| @@ -1527,6 +1527,9 @@ class UnresolvedClass : public Object {
|
| };
|
|
|
|
|
| +typedef ZoneGrowableArray<const AbstractType*> Trail;
|
| +typedef ZoneGrowableArray<const AbstractType*>* TrailPtr;
|
| +
|
| // A TypeArguments is an array of AbstractType.
|
| class TypeArguments : public Object {
|
| public:
|
| @@ -1592,22 +1595,21 @@ class TypeArguments : public Object {
|
| return IsSubvectorEquivalent(other, 0, IsNull() ? 0 : Length());
|
| }
|
|
|
| - bool IsEquivalent(const TypeArguments& other,
|
| - GrowableObjectArray* trail = NULL) const {
|
| + bool IsEquivalent(const TypeArguments& other, TrailPtr trail = NULL) const {
|
| return IsSubvectorEquivalent(other, 0, IsNull() ? 0 : Length(), trail);
|
| }
|
| bool IsSubvectorEquivalent(const TypeArguments& other,
|
| intptr_t from_index,
|
| intptr_t len,
|
| - GrowableObjectArray* trail = NULL) const;
|
| + TrailPtr trail = NULL) const;
|
|
|
| // Check if the vector is instantiated (it must not be null).
|
| - bool IsInstantiated(GrowableObjectArray* trail = NULL) const {
|
| + bool IsInstantiated(TrailPtr trail = NULL) const {
|
| return IsSubvectorInstantiated(0, Length(), trail);
|
| }
|
| bool IsSubvectorInstantiated(intptr_t from_index,
|
| intptr_t len,
|
| - GrowableObjectArray* trail = NULL) const;
|
| + TrailPtr trail = NULL) const;
|
| bool IsUninstantiatedIdentity() const;
|
| bool CanShareInstantiatorTypeArguments(const Class& instantiator_class) const;
|
|
|
| @@ -1628,11 +1630,10 @@ class TypeArguments : public Object {
|
| // arguments, changing the class owner of type parameters.
|
| // Instantiated type arguments are shared.
|
| RawTypeArguments* CloneUninstantiated(
|
| - const Class& new_owner,
|
| - GrowableObjectArray* trail = NULL) const;
|
| + const Class& new_owner, TrailPtr trail = NULL) const;
|
|
|
| // Canonicalize only if instantiated, otherwise returns 'this'.
|
| - RawTypeArguments* Canonicalize(GrowableObjectArray* trail = NULL) const;
|
| + RawTypeArguments* Canonicalize(TrailPtr trail = NULL) const;
|
|
|
| // Return 'this' if this type argument vector is instantiated, i.e. if it does
|
| // not refer to type parameters. Otherwise, return a new type argument vector
|
| @@ -1642,7 +1643,7 @@ class TypeArguments : public Object {
|
| RawTypeArguments* InstantiateFrom(
|
| const TypeArguments& instantiator_type_arguments,
|
| Error* bound_error,
|
| - GrowableObjectArray* trail = NULL) const;
|
| + TrailPtr trail = NULL) const;
|
|
|
| // Runtime instantiation with canonicalization. Not to be used during type
|
| // finalization at compile time.
|
| @@ -4971,15 +4972,14 @@ class AbstractType : public Instance {
|
| virtual RawUnresolvedClass* unresolved_class() const;
|
| virtual RawTypeArguments* arguments() const;
|
| virtual intptr_t token_pos() const;
|
| - virtual bool IsInstantiated(GrowableObjectArray* trail = NULL) const;
|
| + virtual bool IsInstantiated(TrailPtr trail = NULL) const;
|
| virtual bool CanonicalizeEquals(const Instance& other) const {
|
| return Equals(other);
|
| }
|
| virtual bool Equals(const Instance& other) const {
|
| return IsEquivalent(other);
|
| }
|
| - virtual bool IsEquivalent(const Instance& other,
|
| - GrowableObjectArray* trail = NULL) const;
|
| + virtual bool IsEquivalent(const Instance& other, TrailPtr trail = NULL) const;
|
| virtual bool IsRecursive() const;
|
|
|
| // Instantiate this type using the given type argument vector.
|
| @@ -4988,7 +4988,7 @@ class AbstractType : public Instance {
|
| virtual RawAbstractType* InstantiateFrom(
|
| const TypeArguments& instantiator_type_arguments,
|
| Error* bound_error,
|
| - GrowableObjectArray* trail = NULL) const;
|
| + TrailPtr trail = NULL) const;
|
|
|
| // Return a clone of this unfinalized type or the type itself if it is
|
| // already finalized. Apply recursively to type arguments, i.e. finalized
|
| @@ -5001,25 +5001,22 @@ class AbstractType : public Instance {
|
| // Apply recursively to type arguments, i.e. instantiated type arguments of
|
| // an uninstantiated type are not cloned, but shared.
|
| virtual RawAbstractType* CloneUninstantiated(
|
| - const Class& new_owner,
|
| - GrowableObjectArray* trail = NULL) const;
|
| + const Class& new_owner, TrailPtr trail = NULL) const;
|
|
|
| virtual RawInstance* CheckAndCanonicalize(const char** error_str) const {
|
| return Canonicalize();
|
| }
|
|
|
| // Return the canonical version of this type.
|
| - virtual RawAbstractType* Canonicalize(
|
| - GrowableObjectArray* trail = NULL) const;
|
| + virtual RawAbstractType* Canonicalize(TrailPtr trail = NULL) const;
|
|
|
| // Return the object associated with the receiver in the trail or
|
| - // Object::null() if the receiver is not contained in the trail.
|
| - RawObject* OnlyBuddyInTrail(GrowableObjectArray* trail) const;
|
| + // AbstractType::null() if the receiver is not contained in the trail.
|
| + RawAbstractType* OnlyBuddyInTrail(TrailPtr trail) const;
|
|
|
| // If the trail is null, allocate a trail, add the pair <receiver, buddy> to
|
| // the trail. The receiver may only be added once with its only buddy.
|
| - void AddOnlyBuddyToTrail(GrowableObjectArray** trail,
|
| - const Object& buddy) const;
|
| + void AddOnlyBuddyToTrail(TrailPtr* trail, const AbstractType& buddy) const;
|
|
|
| // The name of this type, including the names of its type arguments, if any.
|
| virtual RawString* Name() const {
|
| @@ -5158,20 +5155,18 @@ class Type : public AbstractType {
|
| virtual RawTypeArguments* arguments() const;
|
| void set_arguments(const TypeArguments& value) const;
|
| virtual intptr_t token_pos() const { return raw_ptr()->token_pos_; }
|
| - virtual bool IsInstantiated(GrowableObjectArray* trail = NULL) const;
|
| - virtual bool IsEquivalent(const Instance& other,
|
| - GrowableObjectArray* trail = NULL) const;
|
| + virtual bool IsInstantiated(TrailPtr trail = NULL) const;
|
| + virtual bool IsEquivalent(const Instance& other, TrailPtr trail = NULL) const;
|
| virtual bool IsRecursive() const;
|
| virtual RawAbstractType* InstantiateFrom(
|
| const TypeArguments& instantiator_type_arguments,
|
| Error* malformed_error,
|
| - GrowableObjectArray* trail = NULL) const;
|
| + TrailPtr trail = NULL) const;
|
| virtual RawAbstractType* CloneUnfinalized() const;
|
| virtual RawAbstractType* CloneUninstantiated(
|
| const Class& new_owner,
|
| - GrowableObjectArray* trail = NULL) const;
|
| - virtual RawAbstractType* Canonicalize(
|
| - GrowableObjectArray* trail = NULL) const;
|
| + TrailPtr trail = NULL) const;
|
| + virtual RawAbstractType* Canonicalize(TrailPtr trail = NULL) const;
|
|
|
| virtual intptr_t Hash() const;
|
|
|
| @@ -5280,33 +5275,31 @@ class TypeRef : public AbstractType {
|
| virtual intptr_t token_pos() const {
|
| return AbstractType::Handle(type()).token_pos();
|
| }
|
| - virtual bool IsInstantiated(GrowableObjectArray* trail = NULL) const;
|
| + virtual bool IsInstantiated(TrailPtr trail = NULL) const;
|
| virtual bool IsEquivalent(const Instance& other,
|
| - GrowableObjectArray* trail = NULL) const;
|
| + TrailPtr trail = NULL) const;
|
| virtual bool IsRecursive() const { return true; }
|
| virtual RawTypeRef* InstantiateFrom(
|
| const TypeArguments& instantiator_type_arguments,
|
| Error* bound_error,
|
| - GrowableObjectArray* trail = NULL) const;
|
| + TrailPtr trail = NULL) const;
|
| virtual RawTypeRef* CloneUninstantiated(
|
| const Class& new_owner,
|
| - GrowableObjectArray* trail = NULL) const;
|
| - virtual RawAbstractType* Canonicalize(
|
| - GrowableObjectArray* trail = NULL) const;
|
| + TrailPtr trail = NULL) const;
|
| + virtual RawAbstractType* Canonicalize(TrailPtr trail = NULL) const;
|
|
|
| virtual intptr_t Hash() const;
|
|
|
| // Return true if the receiver is contained in the trail.
|
| // Otherwise, if the trail is null, allocate a trail, then add the receiver to
|
| // the trail and return false.
|
| - bool TestAndAddToTrail(GrowableObjectArray** trail) const;
|
| + bool TestAndAddToTrail(TrailPtr* trail) const;
|
|
|
| // Return true if the pair <receiver, buddy> is contained in the trail.
|
| // Otherwise, if the trail is null, allocate a trail, add the pair <receiver,
|
| // buddy> to the trail and return false.
|
| // The receiver may be added several times, each time with a different buddy.
|
| - bool TestAndAddBuddyToTrail(GrowableObjectArray** trail,
|
| - const Object& buddy) const;
|
| + bool TestAndAddBuddyToTrail(TrailPtr* trail, const AbstractType& buddy) const;
|
|
|
| static intptr_t InstanceSize() {
|
| return RoundedAllocationSize(sizeof(RawTypeRef));
|
| @@ -5361,22 +5354,19 @@ class TypeParameter : public AbstractType {
|
| const AbstractType& upper_bound,
|
| Error* bound_error) const;
|
| virtual intptr_t token_pos() const { return raw_ptr()->token_pos_; }
|
| - virtual bool IsInstantiated(GrowableObjectArray* trail = NULL) const {
|
| + virtual bool IsInstantiated(TrailPtr trail = NULL) const {
|
| return false;
|
| }
|
| - virtual bool IsEquivalent(const Instance& other,
|
| - GrowableObjectArray* trail = NULL) const;
|
| + virtual bool IsEquivalent(const Instance& other, TrailPtr trail = NULL) const;
|
| virtual bool IsRecursive() const { return false; }
|
| virtual RawAbstractType* InstantiateFrom(
|
| const TypeArguments& instantiator_type_arguments,
|
| Error* bound_error,
|
| - GrowableObjectArray* trail = NULL) const;
|
| + TrailPtr trail = NULL) const;
|
| virtual RawAbstractType* CloneUnfinalized() const;
|
| virtual RawAbstractType* CloneUninstantiated(
|
| - const Class& new_owner,
|
| - GrowableObjectArray* trail = NULL) const;
|
| - virtual RawAbstractType* Canonicalize(
|
| - GrowableObjectArray* trail = NULL) const {
|
| + const Class& new_owner, TrailPtr trail = NULL) const;
|
| + virtual RawAbstractType* Canonicalize(TrailPtr trail = NULL) const {
|
| return raw();
|
| }
|
|
|
| @@ -5444,26 +5434,23 @@ class BoundedType : public AbstractType {
|
| virtual intptr_t token_pos() const {
|
| return AbstractType::Handle(type()).token_pos();
|
| }
|
| - virtual bool IsInstantiated(GrowableObjectArray* trail = NULL) const {
|
| + virtual bool IsInstantiated(TrailPtr trail = NULL) const {
|
| // It is not possible to encounter an instantiated bounded type with an
|
| // uninstantiated upper bound. Therefore, we do not need to check if the
|
| // bound is instantiated. Moreover, doing so could lead into cycles, as in
|
| // class C<T extends C<C>> { }.
|
| return AbstractType::Handle(type()).IsInstantiated();
|
| }
|
| - virtual bool IsEquivalent(const Instance& other,
|
| - GrowableObjectArray* trail = NULL) const;
|
| + virtual bool IsEquivalent(const Instance& other, TrailPtr trail = NULL) const;
|
| virtual bool IsRecursive() const;
|
| virtual RawAbstractType* InstantiateFrom(
|
| const TypeArguments& instantiator_type_arguments,
|
| Error* bound_error,
|
| - GrowableObjectArray* trail = NULL) const;
|
| + TrailPtr trail = NULL) const;
|
| virtual RawAbstractType* CloneUnfinalized() const;
|
| virtual RawAbstractType* CloneUninstantiated(
|
| - const Class& new_owner,
|
| - GrowableObjectArray* trail = NULL) const;
|
| - virtual RawAbstractType* Canonicalize(
|
| - GrowableObjectArray* trail = NULL) const {
|
| + const Class& new_owner, TrailPtr trail = NULL) const;
|
| + virtual RawAbstractType* Canonicalize(TrailPtr trail = NULL) const {
|
| return raw();
|
| }
|
|
|
|
|