Index: runtime/vm/object.h |
diff --git a/runtime/vm/object.h b/runtime/vm/object.h |
index 0e820b7cc6ba95898c660be91eff476fa86d45e6..91f37f20eab8291175b7f96aec4895a66a6595ac 100644 |
--- a/runtime/vm/object.h |
+++ b/runtime/vm/object.h |
@@ -2289,6 +2289,27 @@ class Function : public Object { |
RawArray* parameter_names() const { return raw_ptr()->parameter_names_; } |
void set_parameter_names(const Array& value) const; |
+ // The type parameters (and their bounds) are specified as an array of |
+ // TypeParameter. |
+ RawTypeArguments* type_parameters() const { |
+ return raw_ptr()->type_parameters_; |
+ } |
+ void set_type_parameters(const TypeArguments& value) const; |
+ intptr_t NumTypeParameters(Thread* thread) const; |
+ intptr_t NumTypeParameters() const { |
+ return NumTypeParameters(Thread::Current()); |
+ } |
siva
2016/09/19 23:23:46
Do we really want this version of NumTypeParmeters
regis
2016/09/23 00:35:23
Done.
|
+ |
+ // Return a TypeParameter if the type_name is a type parameter of this |
+ // function or of one of its parent functions. |
+ // Unless NULL, adjust function_level accordingly (in and out parameter). |
+ // Return null otherwise. |
+ RawTypeParameter* LookupTypeParameter(const String& type_name, |
+ intptr_t* function_level) const; |
+ |
+ // Return true if this function declares type parameters. |
+ bool IsGeneric() const { return NumTypeParameters() > 0; } |
+ |
// Not thread-safe; must be called in the main thread. |
// Sets function's code and code's function. |
void InstallOptimizedCode(const Code& code, bool is_osr) const; |
@@ -6106,6 +6127,15 @@ class TypeParameter : public AbstractType { |
virtual bool HasResolvedTypeClass() const { return false; } |
classid_t parameterized_class_id() const; |
RawClass* parameterized_class() const; |
+ RawFunction* parameterized_function() const { |
+ return raw_ptr()->parameterized_function_; |
+ } |
+ bool IsClassTypeParameter() const { |
+ return parameterized_class_id() != kIllegalCid; |
+ } |
+ bool IsFunctionTypeParameter() const { |
+ return parameterized_function() != Function::null(); |
+ } |
RawString* name() const { return raw_ptr()->name_; } |
intptr_t index() const { return raw_ptr()->index_; } |
void set_index(intptr_t value) const; |
@@ -6152,7 +6182,9 @@ class TypeParameter : public AbstractType { |
return RoundedAllocationSize(sizeof(RawTypeParameter)); |
} |
+ // Only one of parameterized_class and parameterized_function is non-null. |
static RawTypeParameter* New(const Class& parameterized_class, |
+ const Function& parameterized_function, |
intptr_t index, |
const String& name, |
const AbstractType& bound, |
@@ -6163,6 +6195,7 @@ class TypeParameter : public AbstractType { |
void SetHash(intptr_t value) const; |
void set_parameterized_class(const Class& value) const; |
+ void set_parameterized_function(const Function& value) const; |
void set_name(const String& value) const; |
void set_token_pos(TokenPosition token_pos) const; |
void set_type_state(int8_t state) const; |