Skip to content

Commit cf3ef9e

Browse files
author
Dart CI
committed
Version 2.13.0-85.0.dev
Merge commit 'e74b2391ed16034b0901f56bcf412c8d6ae8ae70' into 'dev'
2 parents ac2d5fd + e74b239 commit cf3ef9e

46 files changed

Lines changed: 846 additions & 239 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

pkg/_fe_analyzer_shared/lib/src/messages/codes.dart

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,11 @@ class LocatedMessage implements Comparable<LocatedMessage> {
131131
return message.compareTo(message);
132132
}
133133

134-
FormattedMessage withFormatting(String formatted, int line, int column,
135-
Severity severity, List<FormattedMessage> relatedInformation,
134+
FormattedMessage withFormatting(PlainAndColorizedString formatted, int line,
135+
int column, Severity severity, List<FormattedMessage> relatedInformation,
136136
{List<Uri>? involvedFiles}) {
137-
return new FormattedMessage(
138-
this, formatted, line, column, severity, relatedInformation,
137+
return new FormattedMessage(this, formatted.plain, formatted.colorized,
138+
line, column, severity, relatedInformation,
139139
involvedFiles: involvedFiles);
140140
}
141141

@@ -162,10 +162,20 @@ class LocatedMessage implements Comparable<LocatedMessage> {
162162
'messageObject=$messageObject)';
163163
}
164164

165+
class PlainAndColorizedString {
166+
final String plain;
167+
final String colorized;
168+
169+
const PlainAndColorizedString(this.plain, this.colorized);
170+
const PlainAndColorizedString.plainOnly(this.plain) : this.colorized = plain;
171+
}
172+
165173
class FormattedMessage implements DiagnosticMessage {
166174
final LocatedMessage locatedMessage;
167175

168-
final String formatted;
176+
final String formattedPlain;
177+
178+
final String formattedColorized;
169179

170180
final int line;
171181

@@ -178,8 +188,14 @@ class FormattedMessage implements DiagnosticMessage {
178188

179189
final List<Uri>? involvedFiles;
180190

181-
const FormattedMessage(this.locatedMessage, this.formatted, this.line,
182-
this.column, this.severity, this.relatedInformation,
191+
const FormattedMessage(
192+
this.locatedMessage,
193+
this.formattedPlain,
194+
this.formattedColorized,
195+
this.line,
196+
this.column,
197+
this.severity,
198+
this.relatedInformation,
183199
{this.involvedFiles});
184200

185201
Code<dynamic> get code => locatedMessage.code;
@@ -200,18 +216,22 @@ class FormattedMessage implements DiagnosticMessage {
200216

201217
@override
202218
Iterable<String> get ansiFormatted sync* {
203-
yield formatted;
219+
yield formattedColorized;
204220
if (relatedInformation != null) {
205221
for (FormattedMessage m in relatedInformation!) {
206-
yield m.formatted;
222+
yield m.formattedColorized;
207223
}
208224
}
209225
}
210226

211227
@override
212-
Iterable<String> get plainTextFormatted {
213-
// TODO(ahe): Implement this correctly.
214-
return ansiFormatted;
228+
Iterable<String> get plainTextFormatted sync* {
229+
yield formattedPlain;
230+
if (relatedInformation != null) {
231+
for (FormattedMessage m in relatedInformation!) {
232+
yield m.formattedPlain;
233+
}
234+
}
215235
}
216236

217237
Map<String, Object?> toJson() {

pkg/compiler/lib/src/ir/closure.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ class VariableUse {
230230
final VariableUseKind kind;
231231
final ir.Member member;
232232
final ir.LocalFunction localFunction;
233-
final ir.MethodInvocation invocation;
233+
final ir.Expression invocation;
234234
final ir.Instantiation instantiation;
235235

236236
const VariableUse._simple(this.kind)

pkg/compiler/lib/src/ir/scope_visitor.dart

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -933,6 +933,11 @@ class ScopeModelBuilder extends ir.Visitor<EvaluationComplexity>
933933
return const EvaluationComplexity.lazy();
934934
}
935935

936+
@override
937+
EvaluationComplexity visitStaticTearOff(ir.StaticTearOff node) {
938+
return _evaluateImplicitConstant(node);
939+
}
940+
936941
@override
937942
EvaluationComplexity visitStaticSet(ir.StaticSet node) {
938943
node.value = _handleExpression(node.value);
@@ -1029,6 +1034,108 @@ class ScopeModelBuilder extends ir.Visitor<EvaluationComplexity>
10291034
if (receiverComplexity.combine(complexity).isConstant &&
10301035
interfaceTarget is ir.Procedure &&
10311036
interfaceTarget.kind == ir.ProcedureKind.Operator) {
1037+
// Only operator invocations can be part of constant expressions so we
1038+
// only try to compute an implicit constant when the receiver and all
1039+
// arguments are constant - and are used in an operator call.
1040+
return _evaluateImplicitConstant(node);
1041+
}
1042+
return const EvaluationComplexity.lazy();
1043+
}
1044+
1045+
@override
1046+
EvaluationComplexity visitInstanceInvocation(ir.InstanceInvocation node) {
1047+
node.receiver = _handleExpression(node.receiver);
1048+
EvaluationComplexity receiverComplexity = _lastExpressionComplexity;
1049+
if (node.arguments.types.isNotEmpty) {
1050+
ir.TreeNode receiver = node.receiver;
1051+
assert(
1052+
!(receiver is ir.VariableGet &&
1053+
receiver.variable.parent is ir.LocalFunction),
1054+
"Unexpected local function invocation ${node} "
1055+
"(${node.runtimeType}).");
1056+
VariableUse usage = new VariableUse.instanceTypeArgument(node);
1057+
visitNodesInContext(node.arguments.types, usage);
1058+
}
1059+
EvaluationComplexity complexity = visitArguments(node.arguments);
1060+
ir.Member interfaceTarget = node.interfaceTarget;
1061+
if (receiverComplexity.combine(complexity).isConstant &&
1062+
interfaceTarget is ir.Procedure &&
1063+
interfaceTarget.kind == ir.ProcedureKind.Operator) {
1064+
// Only operator invocations can be part of constant expressions so we
1065+
// only try to compute an implicit constant when the receiver and all
1066+
// arguments are constant - and are used in an operator call.
1067+
return _evaluateImplicitConstant(node);
1068+
}
1069+
return const EvaluationComplexity.lazy();
1070+
}
1071+
1072+
@override
1073+
EvaluationComplexity visitDynamicInvocation(ir.DynamicInvocation node) {
1074+
node.receiver = _handleExpression(node.receiver);
1075+
if (node.arguments.types.isNotEmpty) {
1076+
ir.TreeNode receiver = node.receiver;
1077+
assert(
1078+
!(receiver is ir.VariableGet &&
1079+
receiver.variable.parent is ir.LocalFunction),
1080+
"Unexpected local function invocation ${node} "
1081+
"(${node.runtimeType}).");
1082+
VariableUse usage = new VariableUse.instanceTypeArgument(node);
1083+
visitNodesInContext(node.arguments.types, usage);
1084+
}
1085+
visitArguments(node.arguments);
1086+
return const EvaluationComplexity.lazy();
1087+
}
1088+
1089+
@override
1090+
EvaluationComplexity visitFunctionInvocation(ir.FunctionInvocation node) {
1091+
node.receiver = _handleExpression(node.receiver);
1092+
if (node.arguments.types.isNotEmpty) {
1093+
assert(
1094+
!(node.receiver is ir.VariableGet &&
1095+
((node.receiver as ir.VariableGet).variable.parent
1096+
is ir.LocalFunction)),
1097+
"Unexpected local function invocation ${node} "
1098+
"(${node.runtimeType}).");
1099+
VariableUse usage = new VariableUse.instanceTypeArgument(node);
1100+
visitNodesInContext(node.arguments.types, usage);
1101+
}
1102+
visitArguments(node.arguments);
1103+
return const EvaluationComplexity.lazy();
1104+
}
1105+
1106+
@override
1107+
EvaluationComplexity visitLocalFunctionInvocation(
1108+
ir.LocalFunctionInvocation node) {
1109+
if (node.arguments.types.isNotEmpty) {
1110+
assert(
1111+
node.variable.parent is ir.LocalFunction,
1112+
"Unexpected variable in local function invocation ${node} "
1113+
"(${node.runtimeType}).");
1114+
VariableUse usage =
1115+
new VariableUse.localTypeArgument(node.variable.parent, node);
1116+
visitNodesInContext(node.arguments.types, usage);
1117+
}
1118+
visitArguments(node.arguments);
1119+
return const EvaluationComplexity.lazy();
1120+
}
1121+
1122+
@override
1123+
EvaluationComplexity visitEqualsNull(ir.EqualsNull node) {
1124+
node.expression = _handleExpression(node.expression);
1125+
EvaluationComplexity receiverComplexity = _lastExpressionComplexity;
1126+
if (receiverComplexity.isConstant) {
1127+
return _evaluateImplicitConstant(node);
1128+
}
1129+
return const EvaluationComplexity.lazy();
1130+
}
1131+
1132+
@override
1133+
EvaluationComplexity visitEqualsCall(ir.EqualsCall node) {
1134+
node.left = _handleExpression(node.left);
1135+
EvaluationComplexity leftComplexity = _lastExpressionComplexity;
1136+
node.right = _handleExpression(node.right);
1137+
EvaluationComplexity rightComplexity = _lastExpressionComplexity;
1138+
if (leftComplexity.combine(rightComplexity).isConstant) {
10321139
return _evaluateImplicitConstant(node);
10331140
}
10341141
return const EvaluationComplexity.lazy();
@@ -1044,13 +1151,59 @@ class ScopeModelBuilder extends ir.Visitor<EvaluationComplexity>
10441151
return const EvaluationComplexity.lazy();
10451152
}
10461153

1154+
@override
1155+
EvaluationComplexity visitInstanceGet(ir.InstanceGet node) {
1156+
node.receiver = _handleExpression(node.receiver);
1157+
EvaluationComplexity complexity = _lastExpressionComplexity;
1158+
if (complexity.isConstant && node.name.name == 'length') {
1159+
return _evaluateImplicitConstant(node);
1160+
}
1161+
return const EvaluationComplexity.lazy();
1162+
}
1163+
1164+
@override
1165+
EvaluationComplexity visitInstanceTearOff(ir.InstanceTearOff node) {
1166+
node.receiver = _handleExpression(node.receiver);
1167+
return const EvaluationComplexity.lazy();
1168+
}
1169+
1170+
@override
1171+
EvaluationComplexity visitDynamicGet(ir.DynamicGet node) {
1172+
node.receiver = _handleExpression(node.receiver);
1173+
EvaluationComplexity complexity = _lastExpressionComplexity;
1174+
if (complexity.isConstant && node.name.name == 'length') {
1175+
return _evaluateImplicitConstant(node);
1176+
}
1177+
return const EvaluationComplexity.lazy();
1178+
}
1179+
1180+
@override
1181+
EvaluationComplexity visitFunctionTearOff(ir.FunctionTearOff node) {
1182+
node.receiver = _handleExpression(node.receiver);
1183+
return const EvaluationComplexity.lazy();
1184+
}
1185+
10471186
@override
10481187
EvaluationComplexity visitPropertySet(ir.PropertySet node) {
10491188
node.receiver = _handleExpression(node.receiver);
10501189
node.value = _handleExpression(node.value);
10511190
return const EvaluationComplexity.lazy();
10521191
}
10531192

1193+
@override
1194+
EvaluationComplexity visitInstanceSet(ir.InstanceSet node) {
1195+
node.receiver = _handleExpression(node.receiver);
1196+
node.value = _handleExpression(node.value);
1197+
return const EvaluationComplexity.lazy();
1198+
}
1199+
1200+
@override
1201+
EvaluationComplexity visitDynamicSet(ir.DynamicSet node) {
1202+
node.receiver = _handleExpression(node.receiver);
1203+
node.value = _handleExpression(node.value);
1204+
return const EvaluationComplexity.lazy();
1205+
}
1206+
10541207
@override
10551208
EvaluationComplexity visitNot(ir.Not node) {
10561209
node.operand = _handleExpression(node.operand);

pkg/compiler/lib/src/serialization/node_indexer.dart

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,18 +111,90 @@ class _TreeNodeIndexerVisitor extends ir.Visitor<void>
111111
super.visitPropertyGet(node);
112112
}
113113

114+
@override
115+
void visitInstanceGet(ir.InstanceGet node) {
116+
registerNode(node);
117+
super.visitInstanceGet(node);
118+
}
119+
120+
@override
121+
void visitInstanceTearOff(ir.InstanceTearOff node) {
122+
registerNode(node);
123+
super.visitInstanceTearOff(node);
124+
}
125+
126+
@override
127+
void visitDynamicGet(ir.DynamicGet node) {
128+
registerNode(node);
129+
super.visitDynamicGet(node);
130+
}
131+
132+
@override
133+
void visitFunctionTearOff(ir.FunctionTearOff node) {
134+
registerNode(node);
135+
super.visitFunctionTearOff(node);
136+
}
137+
114138
@override
115139
void visitPropertySet(ir.PropertySet node) {
116140
registerNode(node);
117141
super.visitPropertySet(node);
118142
}
119143

144+
@override
145+
void visitInstanceSet(ir.InstanceSet node) {
146+
registerNode(node);
147+
super.visitInstanceSet(node);
148+
}
149+
150+
@override
151+
void visitDynamicSet(ir.DynamicSet node) {
152+
registerNode(node);
153+
super.visitDynamicSet(node);
154+
}
155+
120156
@override
121157
void visitMethodInvocation(ir.MethodInvocation node) {
122158
registerNode(node);
123159
super.visitMethodInvocation(node);
124160
}
125161

162+
@override
163+
void visitInstanceInvocation(ir.InstanceInvocation node) {
164+
registerNode(node);
165+
super.visitInstanceInvocation(node);
166+
}
167+
168+
@override
169+
void visitDynamicInvocation(ir.DynamicInvocation node) {
170+
registerNode(node);
171+
super.visitDynamicInvocation(node);
172+
}
173+
174+
@override
175+
void visitFunctionInvocation(ir.FunctionInvocation node) {
176+
registerNode(node);
177+
super.visitFunctionInvocation(node);
178+
}
179+
180+
@override
181+
void visitLocalFunctionInvocation(ir.LocalFunctionInvocation node) {
182+
registerNode(node);
183+
super.visitLocalFunctionInvocation(node);
184+
}
185+
186+
@override
187+
void visitEqualsNull(ir.EqualsNull node) {
188+
registerNode(node);
189+
super.visitEqualsNull(node);
190+
}
191+
192+
@override
193+
void visitEqualsCall(ir.EqualsCall node) {
194+
registerNode(node);
195+
super.visitEqualsCall(node);
196+
}
197+
126198
@override
127199
void visitStaticInvocation(ir.StaticInvocation node) {
128200
registerNode(node);

0 commit comments

Comments
 (0)