| 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);
|
| }
|
|
|