| Index: runtime/vm/parser.cc
|
| ===================================================================
|
| --- runtime/vm/parser.cc (revision 6643)
|
| +++ runtime/vm/parser.cc (working copy)
|
| @@ -7094,8 +7094,21 @@
|
| AstNode* var_or_field = NULL;
|
| ResolveIdentInLocalScope(ident_pos, ident, &var_or_field);
|
| if (var_or_field == NULL) {
|
| - // Not found in the local scope, so try finding the variable in the
|
| - // library scope (current library and all libraries imported by it).
|
| + // Check whether the identifier is a type parameter. Type parameters
|
| + // can never be used in primary expressions.
|
| + const Class& scope_class = Class::Handle(TypeParametersScopeClass());
|
| + if (!scope_class.IsNull()) {
|
| + TypeParameter& type_param = TypeParameter::Handle(
|
| + scope_class.LookupTypeParameter(ident, ident_pos));
|
| + if (!type_param.IsNull()) {
|
| + String& type_param_name = String::Handle(type_param.Name());
|
| + ErrorMsg(ident_pos, "illegal use of type parameter %s",
|
| + type_param_name.ToCString());
|
| + }
|
| + }
|
| + // Not found in the local scope, and the name is not a type parameter.
|
| + // Try finding the variable in the library scope (current library
|
| + // and all libraries imported by it).
|
| QualIdent qual_ident;
|
| qual_ident.lib_prefix = NULL;
|
| qual_ident.ident_pos = ident_pos;
|
|
|