mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 08:51:21 +00:00
Implement AstBuilder.handleOperatorName.
R=scheglov@google.com Review-Url: https://codereview.chromium.org/2723873002 .
This commit is contained in:
parent
c9442bb8a2
commit
8849a29406
|
@ -169,20 +169,6 @@ class ClassMemberParserTest_Fasta extends FastaParserTestCase
|
|||
super.test_parseClassMember_operator_functionType();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_parseClassMember_operator_index() {
|
||||
// TODO(paulberry): Unhandled event: OperatorName
|
||||
super.test_parseClassMember_operator_index();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_parseClassMember_operator_indexAssign() {
|
||||
// TODO(paulberry): Unhandled event: OperatorName
|
||||
super.test_parseClassMember_operator_indexAssign();
|
||||
}
|
||||
|
||||
@override
|
||||
@failingTest
|
||||
void test_parseClassMember_redirectingFactory_const() {
|
||||
|
@ -256,7 +242,7 @@ class ClassMemberParserTest_Fasta extends FastaParserTestCase
|
|||
@override
|
||||
@failingTest
|
||||
void test_parseOperator() {
|
||||
// TODO(paulberry): Unhandled event: OperatorName
|
||||
// TODO(paulberry): handle doc comments
|
||||
super.test_parseOperator();
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -854,6 +854,7 @@ class Listener {
|
|||
logEvent("Operator");
|
||||
}
|
||||
|
||||
/// Handle the end of a construct of the form "operator <token>".
|
||||
void handleOperatorName(Token operatorKeyword, Token token) {
|
||||
logEvent("OperatorName");
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue