Skip to content

Commit afac6b1

Browse files
mralephcommit-bot@chromium.org
authored andcommitted
[kernel] Fix text serialization for Constant nodes
Make sure to use Printer methods when formatting class references instead of going through TreeNode.toString which uses globalNames instead of Printer's own syntheticNames. Change-Id: I3107a1b4d5d6d2b26a9f0001f846bd74b85853df Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/108803 Reviewed-by: Jens Johansen <[email protected]> Commit-Queue: Vyacheslav Egorov <[email protected]> Auto-Submit: Vyacheslav Egorov <[email protected]>
1 parent b64ab73 commit afac6b1

File tree

1 file changed

+65
-51
lines changed

1 file changed

+65
-51
lines changed

pkg/kernel/lib/text/ast_to_text.dart

Lines changed: 65 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1303,19 +1303,20 @@ class Printer extends Visitor<Null> {
13031303
}
13041304

13051305
visitInstanceCreation(InstanceCreation node) {
1306-
write('${node.classNode}');
1306+
writeClassReferenceFromReference(node.classReference);
13071307
if (node.typeArguments.isNotEmpty) {
13081308
writeSymbol('<');
13091309
writeList(node.typeArguments, writeType);
13101310
writeSymbol('>');
13111311
}
1312-
write(' {');
1312+
writeSymbol('{');
13131313
bool first = true;
13141314
node.fieldValues.forEach((Reference fieldRef, Expression value) {
13151315
if (!first) {
13161316
writeComma();
13171317
}
1318-
write('${fieldRef.asField.name}: ');
1318+
writeWord('${fieldRef.asField.name.name}');
1319+
writeSymbol(':');
13191320
writeExpression(value);
13201321
first = false;
13211322
});
@@ -1339,8 +1340,7 @@ class Printer extends Visitor<Null> {
13391340
writeExpression(unusedArgument);
13401341
first = false;
13411342
}
1342-
1343-
write('}');
1343+
writeSymbol('}');
13441344
}
13451345

13461346
visitIsExpression(IsExpression node) {
@@ -2001,77 +2001,91 @@ class Printer extends Visitor<Null> {
20012001
}
20022002
}
20032003

2004+
void writeConstantReference(Constant node) {
2005+
writeWord(syntheticNames.nameConstant(node));
2006+
}
2007+
20042008
visitConstantExpression(ConstantExpression node) {
2005-
writeWord(syntheticNames.nameConstant(node.constant));
2009+
writeConstantReference(node.constant);
20062010
}
20072011

20082012
defaultConstant(Constant node) {
2009-
final String name = syntheticNames.nameConstant(node);
2010-
endLine(' $name = $node');
2013+
writeIndentation();
2014+
writeConstantReference(node);
2015+
writeSpaced('=');
2016+
endLine('$node');
20112017
}
20122018

20132019
visitListConstant(ListConstant node) {
2014-
final String name = syntheticNames.nameConstant(node);
2015-
write(' $name = ');
2016-
final String entries = node.entries.map((Constant constant) {
2017-
return syntheticNames.nameConstant(constant);
2018-
}).join(', ');
2019-
endLine('${node.runtimeType}<${node.typeArgument}>($entries)');
2020+
writeIndentation();
2021+
writeConstantReference(node);
2022+
writeSpaced('=');
2023+
writeWord('ListConstant');
2024+
writeSymbol('<');
2025+
writeType(node.typeArgument);
2026+
writeSymbol('>(');
2027+
writeList(node.entries, writeConstantReference);
2028+
endLine(')');
20202029
}
20212030

20222031
visitSetConstant(SetConstant node) {
2023-
final String name = syntheticNames.nameConstant(node);
2024-
write(' $name = ');
2025-
final String entries = node.entries.map((Constant constant) {
2026-
return syntheticNames.nameConstant(constant);
2027-
}).join(', ');
2028-
endLine('${node.runtimeType}<${node.typeArgument}>($entries)');
2032+
writeIndentation();
2033+
writeConstantReference(node);
2034+
writeSpaced('=');
2035+
write('SetConstant<');
2036+
writeSymbol('<');
2037+
writeType(node.typeArgument);
2038+
writeSymbol('>(');
2039+
writeList(node.entries, writeConstantReference);
2040+
endLine(')');
20292041
}
20302042

20312043
visitMapConstant(MapConstant node) {
2032-
final String name = syntheticNames.nameConstant(node);
2033-
write(' $name = ');
2034-
final String entries = node.entries.map((ConstantMapEntry entry) {
2035-
final String key = syntheticNames.nameConstant(entry.key);
2036-
final String value = syntheticNames.nameConstant(entry.value);
2037-
return '$key: $value';
2038-
}).join(', ');
2039-
endLine(
2040-
'${node.runtimeType}<${node.keyType}, ${node.valueType}>($entries)');
2044+
writeIndentation();
2045+
writeConstantReference(node);
2046+
writeSpaced('=');
2047+
write('MapConstant<');
2048+
writeList([node.keyType, node.valueType], writeType);
2049+
writeSymbol('>(');
2050+
writeList(node.entries, (entry) {
2051+
writeConstantReference(entry.key);
2052+
writeSymbol(':');
2053+
writeConstantReference(entry.value);
2054+
});
2055+
endLine(')');
20412056
}
20422057

20432058
visitInstanceConstant(InstanceConstant node) {
2044-
final String name = syntheticNames.nameConstant(node);
2045-
write(' $name = ');
2046-
final sb = new StringBuffer();
2047-
sb.write('${node.classNode}');
2059+
writeIndentation();
2060+
writeConstantReference(node);
2061+
writeSpaced('=');
2062+
writeClassReferenceFromReference(node.classReference);
20482063
if (!node.classNode.typeParameters.isEmpty) {
2049-
sb.write('<');
2050-
sb.write(node.typeArguments.map((type) => type.toString()).join(', '));
2051-
sb.write('>');
2064+
writeSymbol('<');
2065+
writeList(node.typeArguments, writeType);
2066+
writeSymbol('>');
20522067
}
2053-
sb.write(' {');
2054-
bool first = true;
2055-
node.fieldValues.forEach((Reference fieldRef, Constant constant) {
2056-
final String name = syntheticNames.nameConstant(constant);
2057-
if (!first) {
2058-
sb.write(', ');
2059-
}
2060-
sb.write('${fieldRef.asField.name}: $name');
2061-
first = false;
2068+
writeSymbol(' {');
2069+
writeList(node.fieldValues.entries, (entry) {
2070+
writeWord('${entry.key.asField.name.name}');
2071+
writeSymbol(':');
2072+
writeConstantReference(entry.value);
20622073
});
2063-
sb.write('}');
2064-
endLine(sb.toString());
2074+
endLine('}');
20652075
}
20662076

20672077
visitStringConstant(StringConstant node) {
2068-
final String name = syntheticNames.nameConstant(node);
2069-
endLine(' $name = "${escapeString(node.value)}"');
2078+
writeIndentation();
2079+
writeConstantReference(node);
2080+
writeSpaced('=');
2081+
endLine('"${escapeString(node.value)}"');
20702082
}
20712083

20722084
visitUnevaluatedConstant(UnevaluatedConstant node) {
2073-
final String name = syntheticNames.nameConstant(node);
2074-
write(' $name = (');
2085+
writeIndentation();
2086+
writeConstantReference(node);
2087+
writeSpaced('=');
2088+
writeSymbol('(');
20752089
writeExpression(node.expression);
20762090
endLine(')');
20772091
}

0 commit comments

Comments
 (0)