Index: pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart |
diff --git a/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart b/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart |
index 5e8711a31123b8d5edbd77d0f8edb89f5f9bb513..119629b9addf848b006cf5af34389a3bb14fba81 100644 |
--- a/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart |
+++ b/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart |
@@ -472,16 +472,35 @@ class AstBuilder extends ScopeListener { |
void endFormalParameter(Token thisKeyword) { |
debugEvent("FormalParameter"); |
- if (thisKeyword != null) { |
- internalError("'this' can't be used here."); |
- } |
SimpleIdentifier name = pop(); |
TypeName type = pop(); |
Token keyword = _popOptionalSingleModifier(); |
pop(); // TODO(paulberry): Metadata. |
// TODO(paulberry): handle covariant keyword. |
- SimpleFormalParameter node = ast.simpleFormalParameter( |
- null, null, toAnalyzerToken(keyword), type, name); |
+ |
+ FormalParameter node; |
+ if (thisKeyword == null) { |
+ node = ast.simpleFormalParameter( |
+ null, null, toAnalyzerToken(keyword), type, name); |
+ } else { |
+ // TODO(scheglov): Ideally the period token should be passed in. |
+ Token period = identical('.', thisKeyword.next?.stringValue) |
+ ? thisKeyword.next |
+ : null; |
+ TypeParameterList typeParameters; // TODO(scheglov) |
+ FormalParameterList formalParameters; // TODO(scheglov) |
+ node = ast.fieldFormalParameter( |
+ null, |
+ null, |
+ toAnalyzerToken(keyword), |
+ type, |
+ toAnalyzerToken(thisKeyword), |
+ toAnalyzerToken(period), |
+ name, |
+ typeParameters, |
+ formalParameters); |
+ } |
+ |
scope[name.name] = name.staticElement = new AnalyzerParameterElement(node); |
push(node); |
} |