| Index: runtime/vm/parser.cc
|
| diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
|
| index f708b97b19f7bc70ab23d418b3afbcbade38320b..6e83ad6ded5681538d7c7850ccce109337ad2d85 100644
|
| --- a/runtime/vm/parser.cc
|
| +++ b/runtime/vm/parser.cc
|
| @@ -12098,34 +12098,12 @@ AstNode* Parser::ParseSelectors(AstNode* primary, bool is_cascade) {
|
| false /* is_conditional */);
|
| }
|
| } else if (primary_node->primary().IsTypeParameter()) {
|
| - TypeParameter& type_parameter = TypeParameter::ZoneHandle(Z);
|
| - type_parameter = TypeParameter::Cast(primary_node->primary()).raw();
|
| - const String& name = String::ZoneHandle(Z, type_parameter.name());
|
| - if (type_parameter.IsClassTypeParameter()) {
|
| - if (ParsingStaticMember()) {
|
| - // Treat as this.T(), because T is in scope.
|
| - ReportError(primary_pos,
|
| - "cannot access type parameter '%s' "
|
| - "from static function",
|
| - name.ToCString());
|
| - } else {
|
| - // Treat as call to unresolved (instance) method.
|
| - selector =
|
| - ParseInstanceCall(LoadReceiver(primary_pos), name,
|
| - primary_pos, false /* is_conditional */);
|
| - }
|
| - } else {
|
| - ASSERT(type_parameter.IsFunctionTypeParameter());
|
| - // TODO(regis): Should we throw a type error instead?
|
| - ReportError(primary_pos,
|
| - "illegal use of function type parameter '%s'",
|
| - name.ToCString());
|
| - }
|
| + selector = LoadTypeParameter(primary_node);
|
| } else if (primary_node->primary().IsClass()) {
|
| const Class& type_class = Class::Cast(primary_node->primary());
|
| AbstractType& type = Type::ZoneHandle(
|
| - Z, Type::New(type_class, TypeArguments::Handle(Z), primary_pos,
|
| - Heap::kOld));
|
| + Z, Type::New(type_class, Object::null_type_arguments(),
|
| + primary_pos, Heap::kOld));
|
| type ^= CanonicalizeType(type);
|
| // Type may be malbounded, but not malformed.
|
| ASSERT(!type.IsMalformed());
|
|
|