| 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 d0a12712f33b0a8b59702df5996717386197c9be..5a14cae0ff85418224322eeffdf0f131ad1e142a 100644
|
| --- a/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart
|
| +++ b/pkg/front_end/lib/src/fasta/analyzer/ast_builder.dart
|
| @@ -1147,7 +1147,6 @@ class AstBuilder extends ScopeListener {
|
| FormalParameterList parameters = pop();
|
| TypeParameterList typeParameters = pop(); // TODO(paulberry)
|
| var name = pop();
|
| - Token operatorKeyword = null; // TODO(paulberry)
|
| TypeAnnotation returnType = pop(); // TODO(paulberry)
|
| Token modifierKeyword = null; // TODO(paulberry)
|
| Token externalKeyword = null;
|
| @@ -1174,19 +1173,17 @@ class AstBuilder extends ScopeListener {
|
| List<Annotation> metadata = pop();
|
| // TODO(paulberry): capture doc comments. See dartbug.com/28851.
|
| Comment comment = null;
|
| - SimpleIdentifier returnType2;
|
| Token period;
|
| - SimpleIdentifier name2;
|
| - void unnamedConstructor() {
|
| + void unnamedConstructor(SimpleIdentifier returnType, SimpleIdentifier name) {
|
| push(ast.constructorDeclaration(
|
| comment,
|
| metadata,
|
| toAnalyzerToken(externalKeyword),
|
| toAnalyzerToken(constKeyword),
|
| toAnalyzerToken(factoryKeyword),
|
| - returnType2,
|
| + returnType,
|
| toAnalyzerToken(period),
|
| - name2,
|
| + name,
|
| parameters,
|
| toAnalyzerToken(separator),
|
| initializers,
|
| @@ -1194,7 +1191,7 @@ class AstBuilder extends ScopeListener {
|
| body));
|
| }
|
|
|
| - void method() {
|
| + void method(Token operatorKeyword, SimpleIdentifier name) {
|
| push(ast.methodDeclaration(
|
| comment,
|
| metadata,
|
| @@ -1210,12 +1207,13 @@ class AstBuilder extends ScopeListener {
|
| }
|
|
|
| if (name is SimpleIdentifier) {
|
| - returnType2 = name;
|
| if (name.name == className) {
|
| - unnamedConstructor();
|
| + unnamedConstructor(name, null);
|
| } else {
|
| - method();
|
| + method(null, name);
|
| }
|
| + } else if (name is _OperatorName) {
|
| + method(name.operatorKeyword, name.name);
|
| } else {
|
| throw new UnimplementedError();
|
| }
|
| @@ -1312,6 +1310,13 @@ class AstBuilder extends ScopeListener {
|
| toAnalyzerToken(beginToken), arguments, toAnalyzerToken(endToken)));
|
| }
|
|
|
| + @override
|
| + void handleOperatorName(Token operatorKeyword, Token token) {
|
| + debugEvent("OperatorName");
|
| + push(new _OperatorName(operatorKeyword,
|
| + ast.simpleIdentifier(toAnalyzerToken(token), isDeclaration: true)));
|
| + }
|
| +
|
| /**
|
| * Pop the modifiers list, if the list is empty return `null`, if the list
|
| * has one item return it; otherwise return `null`.
|
| @@ -1390,3 +1395,12 @@ class _OptionalFormalParameters {
|
| _OptionalFormalParameters(
|
| this.parameters, this.leftDelimiter, this.rightDelimiter);
|
| }
|
| +
|
| +/// Data structure placed on the stack to represent the keyword "operator"
|
| +/// followed by a token.
|
| +class _OperatorName {
|
| + final Token operatorKeyword;
|
| + final SimpleIdentifier name;
|
| +
|
| + _OperatorName(this.operatorKeyword, this.name);
|
| +}
|
|
|