Skip to content

Commit 22dc855

Browse files
committed
[cfe] Implement toText for Binary/Unary/ParenthesizedExpression
Change-Id: Ic3585081aa8910a75c54fadb8e8e583445d0d532 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/155328 Reviewed-by: Dmitry Stefantsov <[email protected]>
1 parent 1d09221 commit 22dc855

File tree

2 files changed

+84
-3
lines changed

2 files changed

+84
-3
lines changed

pkg/front_end/lib/src/fasta/kernel/internal_ast.dart

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3555,6 +3555,16 @@ class BinaryExpression extends InternalExpression {
35553555
String toString() {
35563556
return "BinaryExpression(${toStringInternal()})";
35573557
}
3558+
3559+
@override
3560+
int get precedence => Precedence.binaryPrecedence[binaryName.name];
3561+
3562+
@override
3563+
void toTextInternal(AstPrinter printer) {
3564+
printer.writeExpression(left, minimumPrecedence: precedence);
3565+
printer.write(' ${binaryName.name} ');
3566+
printer.writeExpression(right, minimumPrecedence: precedence);
3567+
}
35583568
}
35593569

35603570
/// Internal expression for a unary expression.
@@ -3588,10 +3598,23 @@ class UnaryExpression extends InternalExpression {
35883598
}
35893599
}
35903600

3601+
@override
3602+
int get precedence => Precedence.PREFIX;
3603+
35913604
@override
35923605
String toString() {
35933606
return "UnaryExpression(${toStringInternal()})";
35943607
}
3608+
3609+
@override
3610+
void toTextInternal(AstPrinter printer) {
3611+
if (unaryName == unaryMinusName) {
3612+
printer.write('-');
3613+
} else {
3614+
printer.write('${unaryName.name}');
3615+
}
3616+
printer.writeExpression(expression, minimumPrecedence: precedence);
3617+
}
35953618
}
35963619

35973620
/// Internal expression for a parenthesized expression.
@@ -3624,10 +3647,20 @@ class ParenthesizedExpression extends InternalExpression {
36243647
}
36253648
}
36263649

3650+
@override
3651+
int get precedence => Precedence.CALLEE;
3652+
36273653
@override
36283654
String toString() {
36293655
return "ParenthesizedExpression(${toStringInternal()})";
36303656
}
3657+
3658+
@override
3659+
void toTextInternal(AstPrinter printer) {
3660+
printer.write('(');
3661+
printer.writeExpression(expression);
3662+
printer.write(')');
3663+
}
36313664
}
36323665

36333666
/// Creates a [Let] of [variable] with the given [body] using

pkg/front_end/test/text_representation/internal_ast_text_representation_test.dart

Lines changed: 51 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -644,11 +644,59 @@ void _testEqualsExpression() {
644644
0 != 1''');
645645
}
646646

647-
void _testBinaryExpression() {}
647+
void _testBinaryExpression() {
648+
testExpression(
649+
new BinaryExpression(new IntLiteral(0), new Name('+'), new IntLiteral(1)),
650+
'''
651+
0 + 1''');
652+
testExpression(
653+
new BinaryExpression(
654+
new BinaryExpression(
655+
new IntLiteral(0), new Name('-'), new IntLiteral(1)),
656+
new Name('+'),
657+
new BinaryExpression(
658+
new IntLiteral(2), new Name('-'), new IntLiteral(3))),
659+
'''
660+
0 - 1 + 2 - 3''');
661+
testExpression(
662+
new BinaryExpression(
663+
new BinaryExpression(
664+
new IntLiteral(0), new Name('*'), new IntLiteral(1)),
665+
new Name('+'),
666+
new BinaryExpression(
667+
new IntLiteral(2), new Name('/'), new IntLiteral(3))),
668+
'''
669+
0 * 1 + 2 / 3''');
670+
testExpression(
671+
new BinaryExpression(
672+
new BinaryExpression(
673+
new IntLiteral(0), new Name('+'), new IntLiteral(1)),
674+
new Name('*'),
675+
new BinaryExpression(
676+
new IntLiteral(2), new Name('-'), new IntLiteral(3))),
677+
'''
678+
(0 + 1) * (2 - 3)''');
679+
}
648680

649-
void _testUnaryExpression() {}
681+
void _testUnaryExpression() {
682+
testExpression(new UnaryExpression(new Name('unary-'), new IntLiteral(0)), '''
683+
-0''');
684+
testExpression(new UnaryExpression(new Name('~'), new IntLiteral(0)), '''
685+
~0''');
650686

651-
void _testParenthesizedExpression() {}
687+
testExpression(
688+
new UnaryExpression(
689+
new Name('unary-'),
690+
new BinaryExpression(
691+
new IntLiteral(0), new Name('+'), new IntLiteral(1))),
692+
'''
693+
-(0 + 1)''');
694+
}
695+
696+
void _testParenthesizedExpression() {
697+
testExpression(new ParenthesizedExpression(new IntLiteral(0)), '''
698+
(0)''');
699+
}
652700

653701
void _testSpreadElement() {
654702
testExpression(new SpreadElement(new IntLiteral(0), false), '''

0 commit comments

Comments
 (0)