mirror of
https://github.com/dart-lang/sdk
synced 2024-10-14 11:58:13 +00:00
Add Forest API for logical expressions
Change-Id: Ib9efeb06d1c6857b07f3c42724310621416a0fc8 Reviewed-on: https://dart-review.googlesource.com/57080 Reviewed-by: Dan Rubel <danrubel@google.com> Reviewed-by: Peter von der Ahé <ahe@google.com> Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
This commit is contained in:
parent
66c590d3ad
commit
ae9f5d2a1b
|
@ -413,6 +413,11 @@ class AstBuildingForest
|
|||
throw new UnimplementedError();
|
||||
}
|
||||
|
||||
@override
|
||||
Expression logicalExpression(
|
||||
Expression leftOperand, Token operator, Expression rightOperand) =>
|
||||
astFactory.binaryExpression(leftOperand, operator, rightOperand);
|
||||
|
||||
@override
|
||||
Object mapEntry(Expression key, Token colon, Expression value) =>
|
||||
astFactory.mapLiteralEntry(key, colon, value);
|
||||
|
|
|
@ -1037,13 +1037,10 @@ abstract class BodyBuilder<Expression, Statement, Arguments>
|
|||
void doLogicalExpression(Token token) {
|
||||
Expression argument = popForValue();
|
||||
Expression receiver = pop();
|
||||
var logicalExpression = new ShadowLogicalExpression(
|
||||
toKernelExpression(receiver),
|
||||
token.stringValue,
|
||||
toKernelExpression(argument))
|
||||
..fileOffset = offsetForToken(token);
|
||||
Expression logicalExpression =
|
||||
forest.logicalExpression(receiver, token, argument);
|
||||
typePromoter.exitLogicalExpression(
|
||||
toKernelExpression(argument), logicalExpression);
|
||||
toKernelExpression(argument), toKernelExpression(logicalExpression));
|
||||
push(logicalExpression);
|
||||
}
|
||||
|
||||
|
|
|
@ -83,6 +83,7 @@ import 'kernel_shadow_ast.dart'
|
|||
ShadowLabeledStatement,
|
||||
ShadowListLiteral,
|
||||
ShadowLoadLibrary,
|
||||
ShadowLogicalExpression,
|
||||
ShadowMapLiteral,
|
||||
ShadowNot,
|
||||
ShadowNullLiteral,
|
||||
|
@ -426,6 +427,14 @@ class Fangorn extends Forest<Expression, Statement, Token, Arguments> {
|
|||
LabelTarget<Statement> target, Statement statement) =>
|
||||
statement;
|
||||
|
||||
@override
|
||||
Expression logicalExpression(
|
||||
Expression leftOperand, Token operator, Expression rightOperand) {
|
||||
return new ShadowLogicalExpression(
|
||||
leftOperand, operator.stringValue, rightOperand)
|
||||
..fileOffset = offsetForToken(operator);
|
||||
}
|
||||
|
||||
@override
|
||||
Expression notExpression(Expression operand, Token token) {
|
||||
return new ShadowNot(operand)..fileOffset = offsetForToken(token);
|
||||
|
|
|
@ -250,6 +250,11 @@ abstract class Forest<Expression, Statement, Location, Arguments> {
|
|||
Statement labeledStatement(
|
||||
LabelTarget<Statement> target, Statement statement);
|
||||
|
||||
/// Return a representation of a logical expression having the [leftOperand],
|
||||
/// [rightOperand] and the [operator] (either `&&` or `||`).
|
||||
Expression logicalExpression(
|
||||
Expression leftOperand, Location operator, Expression rightOperand);
|
||||
|
||||
Expression notExpression(Expression operand, Location location);
|
||||
|
||||
/// Return a representation of a parenthesized condition consisting of the
|
||||
|
|
Loading…
Reference in a new issue