Index: runtime/vm/object.h |
diff --git a/runtime/vm/object.h b/runtime/vm/object.h |
index 6f67c74a5d3087756558b05cad11b33e49bce104..4e27ea1a83573bbae47a5c40fb4418c1eeb08bdc 100644 |
--- a/runtime/vm/object.h |
+++ b/runtime/vm/object.h |
@@ -2200,40 +2200,28 @@ class Function : public Object { |
// Update the signature type (with a canonical version). |
void SetSignatureType(const Type& value) const; |
- // Build a string of the form 'C<T, R>(T, {B b, C c}) => R' representing the |
+ // Return a new function with instantiated result and parameter types. |
+ RawFunction* InstantiateSignatureFrom( |
+ const TypeArguments& instantiator_type_arguments, |
+ Heap::Space space) const; |
+ |
+ // Build a string of the form '(T, {B b, C c}) => R' representing the |
// internal signature of the given function. In this example, T and R are |
// type parameters of class C, the owner of the function. |
- RawString* Signature() const { |
- const bool instantiate = false; |
- return BuildSignature(instantiate, kInternalName, |
- Object::null_type_arguments()); |
- } |
+ RawString* Signature() const { return BuildSignature(kInternalName); } |
// Build a string of the form '(T, {B b, C c}) => R' representing the |
// user visible signature of the given function. In this example, T and R are |
- // type parameters of class C, the owner of the function, also called the |
- // scope class of the function type. |
- // Implicit parameters are hidden, as well as the prefix denoting the |
- // scope class and its type parameters. |
+ // type parameters of class C, the owner of the function. |
+ // Implicit parameters are hidden. |
RawString* UserVisibleSignature() const { |
- const bool instantiate = false; |
- return BuildSignature(instantiate, kUserVisibleName, |
- Object::null_type_arguments()); |
- } |
- |
- // Build a string of the form '(A, {B b, C c}) => D' representing the |
- // signature of the given function, where all generic types (e.g. '<T, R>' in |
- // 'C<T, R>(T, {B b, C c}) => R') are instantiated using the given |
- // instantiator type argument vector of a C instance (e.g. '<A, D>'). |
- RawString* InstantiatedSignatureFrom(const TypeArguments& instantiator, |
- NameVisibility name_visibility) const { |
- const bool instantiate = true; |
- return BuildSignature(instantiate, name_visibility, instantiator); |
+ return BuildSignature(kUserVisibleName); |
} |
// Returns true if the signature of this function is instantiated, i.e. if it |
// does not involve generic parameter types or generic result type. |
- bool HasInstantiatedSignature() const; |
+ bool HasInstantiatedSignature(Genericity genericity = kAny, |
+ TrailPtr trail = NULL) const; |
// Build a string of the form 'T, {B b, C c}' representing the user |
// visible formal parameters of the function. |
@@ -2666,31 +2654,23 @@ class Function : public Object { |
// Returns true if the type of this function is a subtype of the type of |
// the other function. |
- bool IsSubtypeOf(const TypeArguments& type_arguments, |
- const Function& other, |
- const TypeArguments& other_type_arguments, |
+ bool IsSubtypeOf(const Function& other, |
Error* bound_error, |
Heap::Space space) const { |
- return TypeTest(kIsSubtypeOf, type_arguments, other, other_type_arguments, |
- bound_error, space); |
+ return TypeTest(kIsSubtypeOf, other, bound_error, space); |
} |
// Returns true if the type of this function is more specific than the type of |
// the other function. |
- bool IsMoreSpecificThan(const TypeArguments& type_arguments, |
- const Function& other, |
- const TypeArguments& other_type_arguments, |
+ bool IsMoreSpecificThan(const Function& other, |
Error* bound_error, |
Heap::Space space) const { |
- return TypeTest(kIsMoreSpecificThan, type_arguments, other, |
- other_type_arguments, bound_error, space); |
+ return TypeTest(kIsMoreSpecificThan, other, bound_error, space); |
} |
// Check the subtype or 'more specific' relationship. |
bool TypeTest(TypeTestKind test_kind, |
- const TypeArguments& type_arguments, |
const Function& other, |
- const TypeArguments& other_type_arguments, |
Error* bound_error, |
Heap::Space space) const; |
@@ -2833,7 +2813,7 @@ class Function : public Object { |
// Allocates a new Function object representing a signature function. |
// The owner is the scope class of the function type. |
- static RawFunction* NewSignatureFunction(const Class& owner, |
+ static RawFunction* NewSignatureFunction(const Object& owner, |
TokenPosition token_pos); |
static RawFunction* NewEvalFunction(const Class& owner, |
@@ -3006,13 +2986,9 @@ class Function : public Object { |
void BuildSignatureParameters( |
Thread* thread, |
Zone* zone, |
- bool instantiate, |
NameVisibility name_visibility, |
- const TypeArguments& instantiator, |
GrowableHandlePtrArray<const String>* pieces) const; |
- RawString* BuildSignature(bool instantiate, |
- NameVisibility name_visibility, |
- const TypeArguments& instantiator) const; |
+ RawString* BuildSignature(NameVisibility name_visibility) const; |
// Checks the type of the formal parameter at the given position for |
// subtyping or 'more specific' relationship between the type of this function |
@@ -3020,9 +2996,7 @@ class Function : public Object { |
bool TestParameterType(TypeTestKind test_kind, |
intptr_t parameter_position, |
intptr_t other_parameter_position, |
- const TypeArguments& type_arguments, |
const Function& other, |
- const TypeArguments& other_type_arguments, |
Error* bound_error, |
Heap::Space space) const; |
@@ -5928,7 +5902,10 @@ class Type : public AbstractType { |
TrailPtr trail = NULL) const; |
virtual bool IsEquivalent(const Instance& other, TrailPtr trail = NULL) const; |
virtual bool IsRecursive() const; |
- // If signature is not null, this type represents a function type. |
+ // If signature is not null, this type represents a function type. Note that |
+ // the signature fully represents the type and type arguments can be ignored. |
+ // However, in case of a generic typedef, they document how the typedef class |
+ // was parameterized to obtain the actual signature. |
RawFunction* signature() const; |
void set_signature(const Function& value) const; |
virtual bool IsFunctionType() const { |