OLD | NEW |
---|---|
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/parser.h" | 5 #include "vm/parser.h" |
6 | 6 |
7 #include "vm/bigint_operations.h" | 7 #include "vm/bigint_operations.h" |
8 #include "vm/class_finalizer.h" | 8 #include "vm/class_finalizer.h" |
9 #include "vm/compiler.h" | 9 #include "vm/compiler.h" |
10 #include "vm/compiler_stats.h" | 10 #include "vm/compiler_stats.h" |
(...skipping 7076 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
7087 // If the name cannot be resolved, turn it into an instance field access | 7087 // If the name cannot be resolved, turn it into an instance field access |
7088 // if we're compiling an instance method, or issue an error message | 7088 // if we're compiling an instance method, or issue an error message |
7089 // if we're compiling a static method. | 7089 // if we're compiling a static method. |
7090 AstNode* Parser::ResolveVarOrField(intptr_t ident_pos, const String& ident) { | 7090 AstNode* Parser::ResolveVarOrField(intptr_t ident_pos, const String& ident) { |
7091 TRACE_PARSER("ResolveVarOrField"); | 7091 TRACE_PARSER("ResolveVarOrField"); |
7092 // First try to find the variable in the local scope (block scope or | 7092 // First try to find the variable in the local scope (block scope or |
7093 // class scope). | 7093 // class scope). |
7094 AstNode* var_or_field = NULL; | 7094 AstNode* var_or_field = NULL; |
7095 ResolveIdentInLocalScope(ident_pos, ident, &var_or_field); | 7095 ResolveIdentInLocalScope(ident_pos, ident, &var_or_field); |
7096 if (var_or_field == NULL) { | 7096 if (var_or_field == NULL) { |
7097 // Not found in the local scope, so try finding the variable in the | 7097 // Check whether the identifier is a type parameter. Type parameters |
7098 // library scope (current library and all libraries imported by it). | 7098 // can never be used in primary expressions. |
7099 const Class& scope_class = Class::Handle(TypeParametersScopeClass()); | |
7100 if (!scope_class.IsNull()) { | |
7101 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.
| |
7102 scope_class.LookupTypeParameter(ident, ident_pos)); | |
7103 if (!type_param.IsNull()) { | |
7104 String& type_param_name = String::Handle(type_param.Name()); | |
7105 ErrorMsg(ident_pos, "illegal use of type parameter %s", | |
7106 type_param_name.ToCString()); | |
7107 } | |
7108 } | |
7109 // Not found in the local scope, and the name is not a type parameter. | |
7110 // Try finding the variable in the library scope (current library | |
7111 // and all libraries imported by it). | |
7099 QualIdent qual_ident; | 7112 QualIdent qual_ident; |
7100 qual_ident.lib_prefix = NULL; | 7113 qual_ident.lib_prefix = NULL; |
7101 qual_ident.ident_pos = ident_pos; | 7114 qual_ident.ident_pos = ident_pos; |
7102 qual_ident.ident = &(String::ZoneHandle(ident.raw())); | 7115 qual_ident.ident = &(String::ZoneHandle(ident.raw())); |
7103 var_or_field = ResolveIdentInLibraryScope(library_, | 7116 var_or_field = ResolveIdentInLibraryScope(library_, |
7104 qual_ident, | 7117 qual_ident, |
7105 kResolveIncludingImports); | 7118 kResolveIncludingImports); |
7106 } | 7119 } |
7107 if (var_or_field->IsPrimaryNode()) { | 7120 if (var_or_field->IsPrimaryNode()) { |
7108 PrimaryNode* primary = var_or_field->AsPrimaryNode(); | 7121 PrimaryNode* primary = var_or_field->AsPrimaryNode(); |
(...skipping 1266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
8375 void Parser::SkipQualIdent() { | 8388 void Parser::SkipQualIdent() { |
8376 ASSERT(IsIdentifier()); | 8389 ASSERT(IsIdentifier()); |
8377 ConsumeToken(); | 8390 ConsumeToken(); |
8378 if (CurrentToken() == Token::kPERIOD) { | 8391 if (CurrentToken() == Token::kPERIOD) { |
8379 ConsumeToken(); // Consume the kPERIOD token. | 8392 ConsumeToken(); // Consume the kPERIOD token. |
8380 ExpectIdentifier("identifier expected after '.'"); | 8393 ExpectIdentifier("identifier expected after '.'"); |
8381 } | 8394 } |
8382 } | 8395 } |
8383 | 8396 |
8384 } // namespace dart | 8397 } // namespace dart |
OLD | NEW |