| Index: runtime/vm/object.cc
|
| diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
|
| index 21b4366394f74bae4157d03c988fff5d20f04e7c..2456ed6b1defb6ad7f97bc4650d3a575828b11ee 100644
|
| --- a/runtime/vm/object.cc
|
| +++ b/runtime/vm/object.cc
|
| @@ -2424,11 +2424,6 @@ intptr_t Class::NumOwnTypeArguments() const {
|
| }
|
|
|
|
|
| -bool Class::IsGeneric() const {
|
| - return NumTypeParameters() != 0;
|
| -}
|
| -
|
| -
|
| intptr_t Class::NumTypeArguments() const {
|
| // Return cached value if already calculated.
|
| if (num_type_arguments() != kUnknownNumTypeArguments) {
|
| @@ -5891,6 +5886,7 @@ RawTypeParameter* Function::LookupTypeParameter(
|
| REUSABLE_TYPE_ARGUMENTS_HANDLESCOPE(thread);
|
| REUSABLE_TYPE_PARAMETER_HANDLESCOPE(thread);
|
| REUSABLE_STRING_HANDLESCOPE(thread);
|
| + REUSABLE_FUNCTION_HANDLESCOPE(thread);
|
| TypeArguments& type_params = thread->TypeArgumentsHandle();
|
| TypeParameter& type_param = thread->TypeParameterHandle();
|
| String& type_param_name = thread->StringHandle();
|
| @@ -17978,6 +17974,11 @@ void TypeParameter::set_token_pos(TokenPosition token_pos) const {
|
| }
|
|
|
|
|
| +void TypeParameter::set_parent_level(uint8_t value) const {
|
| + StoreNonPointer(&raw_ptr()->parent_level_, value);
|
| +}
|
| +
|
| +
|
| void TypeParameter::set_type_state(int8_t state) const {
|
| ASSERT((state == RawTypeParameter::kAllocated) ||
|
| (state == RawTypeParameter::kBeingFinalized) ||
|
| @@ -17987,19 +17988,32 @@ void TypeParameter::set_type_state(int8_t state) const {
|
|
|
|
|
| const char* TypeParameter::ToCString() const {
|
| - const char* format =
|
| - "TypeParameter: name %s; index: %d; class: %s; bound: %s";
|
| const char* name_cstr = String::Handle(Name()).ToCString();
|
| - const Class& cls = Class::Handle(parameterized_class());
|
| - const char* cls_cstr =
|
| - cls.IsNull() ? " null" : String::Handle(cls.Name()).ToCString();
|
| const AbstractType& upper_bound = AbstractType::Handle(bound());
|
| const char* bound_cstr = String::Handle(upper_bound.Name()).ToCString();
|
| - intptr_t len = OS::SNPrint(
|
| - NULL, 0, format, name_cstr, index(), cls_cstr, bound_cstr) + 1;
|
| - char* chars = Thread::Current()->zone()->Alloc<char>(len);
|
| - OS::SNPrint(chars, len, format, name_cstr, index(), cls_cstr, bound_cstr);
|
| - return chars;
|
| + if (IsFunctionTypeParameter()) {
|
| + const char* format = "TypeParameter: name %s; index: %d; parent_level: %d, "
|
| + "function: %s; bound: %s";
|
| + const Function& function = Function::Handle(parameterized_function());
|
| + const char* fun_cstr = String::Handle(function.name()).ToCString();
|
| + intptr_t len = OS::SNPrint(NULL, 0, format, name_cstr, index(),
|
| + parent_level(), fun_cstr, bound_cstr) + 1;
|
| + char* chars = Thread::Current()->zone()->Alloc<char>(len);
|
| + OS::SNPrint(chars, len, format, name_cstr, index(), parent_level(),
|
| + fun_cstr, bound_cstr);
|
| + return chars;
|
| + } else {
|
| + const char* format =
|
| + "TypeParameter: name %s; index: %d; class: %s; bound: %s";
|
| + const Class& cls = Class::Handle(parameterized_class());
|
| + const char* cls_cstr =
|
| + cls.IsNull() ? " null" : String::Handle(cls.Name()).ToCString();
|
| + intptr_t len = OS::SNPrint(
|
| + NULL, 0, format, name_cstr, index(), cls_cstr, bound_cstr) + 1;
|
| + char* chars = Thread::Current()->zone()->Alloc<char>(len);
|
| + OS::SNPrint(chars, len, format, name_cstr, index(), cls_cstr, bound_cstr);
|
| + return chars;
|
| + }
|
| }
|
|
|
|
|
|
|