Chromium Code Reviews| 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::ZoneHandle( |
|
siva
2012/04/17 16:06:07
TypeParameter::Handle(....)
hausner
2012/04/17 16:10:56
Thanks, done. The dangers of mindless copy-paste.
|
| + 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; |