Skip to content

Commit ca59d05

Browse files
joshualittCommit Bot
authored and
Commit Bot
committed
[dart2js] Eliminate a use of a tree node in impact data(2).
This CL moves the handling of the runtime type use hint to when we build impact data. Change-Id: I2807f05f604103809f8b62da55f43dd89029e7ef Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/239845 Reviewed-by: Sigmund Cherem <[email protected]> Commit-Queue: Joshua Litt <[email protected]>
1 parent c224d21 commit ca59d05

File tree

4 files changed

+29
-40
lines changed

4 files changed

+29
-40
lines changed

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

+2-4
Original file line numberDiff line numberDiff line change
@@ -177,10 +177,8 @@ abstract class ImpactRegistry {
177177
List<String> namedArguments,
178178
List<ir.DartType> typeArguments);
179179

180-
// TODO(johnniwinther): Change [node] to `InstanceGet` when the old method
181-
// invocation encoding is no longer used.
182-
void registerRuntimeTypeUse(ir.Expression node, RuntimeTypeUseKind kind,
183-
ir.DartType receiverType, ir.DartType argumentType);
180+
void registerRuntimeTypeUse(RuntimeTypeUseKind kind, ir.DartType receiverType,
181+
ir.DartType argumentType);
184182

185183
void registerConstructorNode(ir.Constructor node);
186184
void registerFieldNode(ir.Field node);

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

+23-16
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import '../elements/entities.dart';
1414
import '../elements/types.dart';
1515
import '../ir/scope.dart';
1616
import '../kernel/element_map.dart';
17+
import '../options.dart';
1718
import '../serialization/serialization.dart';
1819
import '../util/enumset.dart';
1920
import 'constants.dart';
@@ -57,6 +58,8 @@ class ImpactBuilder extends StaticTypeVisitor implements ImpactRegistry {
5758
String _typeToString(DartType type) =>
5859
type.toStructuredText(_elementMap.types, _elementMap.options);
5960

61+
CompilerOptions get _options => _elementMap.options;
62+
6063
/// Return the named arguments names as a list of strings.
6164
List<String> _getNamedArguments(ir.Arguments arguments) =>
6265
arguments.named.map((n) => n.name).toList();
@@ -551,12 +554,23 @@ class ImpactBuilder extends StaticTypeVisitor implements ImpactRegistry {
551554
return super.visitSwitchStatement(node);
552555
}
553556

554-
// TODO(johnniwinther): Change [node] `InstanceGet` when the old method
555-
// invocation encoding is no longer used.
556557
@override
557558
void handleRuntimeTypeUse(ir.Expression node, RuntimeTypeUseKind kind,
558559
ir.DartType receiverType, ir.DartType argumentType) {
559-
registerRuntimeTypeUse(node, kind, receiverType, argumentType);
560+
if (_options.omitImplicitChecks) {
561+
switch (kind) {
562+
case RuntimeTypeUseKind.string:
563+
if (!_options.laxRuntimeTypeToString) {
564+
_reporter.reportHintMessage(computeSourceSpanFromTreeNode(node),
565+
MessageKind.RUNTIME_TYPE_TO_STRING);
566+
}
567+
break;
568+
case RuntimeTypeUseKind.equals:
569+
case RuntimeTypeUseKind.unknown:
570+
break;
571+
}
572+
}
573+
registerRuntimeTypeUse(kind, receiverType, argumentType);
560574
}
561575

562576
@override
@@ -952,14 +966,12 @@ class ImpactBuilder extends StaticTypeVisitor implements ImpactRegistry {
952966
_data._intLiterals.add(value);
953967
}
954968

955-
// TODO(johnniwinther): Change [node] `InstanceGet` when the old method
956-
// invocation encoding is no longer used.
957969
@override
958-
void registerRuntimeTypeUse(ir.Expression node, RuntimeTypeUseKind kind,
959-
ir.DartType receiverType, ir.DartType argumentType) {
970+
void registerRuntimeTypeUse(RuntimeTypeUseKind kind, ir.DartType receiverType,
971+
ir.DartType argumentType) {
960972
_data._runtimeTypeUses ??= [];
961973
_data._runtimeTypeUses
962-
.add(_RuntimeTypeUse(node, kind, receiverType, argumentType));
974+
.add(_RuntimeTypeUse(kind, receiverType, argumentType));
963975
}
964976

965977
@override
@@ -1520,7 +1532,7 @@ class ImpactData {
15201532
if (_runtimeTypeUses != null) {
15211533
for (_RuntimeTypeUse data in _runtimeTypeUses) {
15221534
registry.registerRuntimeTypeUse(
1523-
data.node, data.kind, data.receiverType, data.argumentType);
1535+
data.kind, data.receiverType, data.argumentType);
15241536
}
15251537
}
15261538
if (_forInData != null) {
@@ -2094,28 +2106,23 @@ class _ContainerLiteral {
20942106
class _RuntimeTypeUse {
20952107
static const String tag = '_RuntimeTypeUse';
20962108

2097-
// TODO(johnniwinther): Change [node] `InstanceGet` when the old method
2098-
// invocation encoding is no longer used.
2099-
final ir.Expression node;
21002109
final RuntimeTypeUseKind kind;
21012110
final ir.DartType receiverType;
21022111
final ir.DartType argumentType;
21032112

2104-
_RuntimeTypeUse(this.node, this.kind, this.receiverType, this.argumentType);
2113+
_RuntimeTypeUse(this.kind, this.receiverType, this.argumentType);
21052114

21062115
factory _RuntimeTypeUse.fromDataSource(DataSourceReader source) {
21072116
source.begin(tag);
2108-
ir.TreeNode node = source.readTreeNode();
21092117
RuntimeTypeUseKind kind = source.readEnum(RuntimeTypeUseKind.values);
21102118
ir.DartType receiverType = source.readDartTypeNode();
21112119
ir.DartType argumentType = source.readDartTypeNode(allowNull: true);
21122120
source.end(tag);
2113-
return _RuntimeTypeUse(node, kind, receiverType, argumentType);
2121+
return _RuntimeTypeUse(kind, receiverType, argumentType);
21142122
}
21152123

21162124
void toDataSink(DataSinkWriter sink) {
21172125
sink.begin(tag);
2118-
sink.writeTreeNode(node);
21192126
sink.writeEnum(kind);
21202127
sink.writeDartTypeNode(receiverType);
21212128
sink.writeDartTypeNode(argumentType, allowNull: true);

pkg/compiler/lib/src/kernel/kernel_impact.dart

+2-18
Original file line numberDiff line numberDiff line change
@@ -633,29 +633,13 @@ class KernelImpactConverter implements ImpactRegistry {
633633
const <DartType>[]));
634634
}
635635

636-
// TODO(johnniwinther): Change [node] `InstanceGet` when the old method
637-
// invocation encoding is no longer used.
638636
@override
639-
void registerRuntimeTypeUse(ir.Expression node, RuntimeTypeUseKind kind,
640-
ir.DartType receiverType, ir.DartType argumentType) {
637+
void registerRuntimeTypeUse(RuntimeTypeUseKind kind, ir.DartType receiverType,
638+
ir.DartType argumentType) {
641639
DartType receiverDartType = elementMap.getDartType(receiverType);
642640
DartType argumentDartType =
643641
argumentType == null ? null : elementMap.getDartType(argumentType);
644642

645-
if (_options.omitImplicitChecks) {
646-
switch (kind) {
647-
case RuntimeTypeUseKind.string:
648-
if (!_options.laxRuntimeTypeToString) {
649-
reporter.reportHintMessage(computeSourceSpanFromTreeNode(node),
650-
MessageKind.RUNTIME_TYPE_TO_STRING);
651-
}
652-
break;
653-
case RuntimeTypeUseKind.equals:
654-
case RuntimeTypeUseKind.unknown:
655-
break;
656-
}
657-
}
658-
659643
// Enable runtime type support if we discover a getter called
660644
// runtimeType. We have to enable runtime type before hitting the
661645
// codegen, so that constructors know whether they need to generate code

pkg/compiler/test/impact/impact_test.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -94,8 +94,8 @@ class ImpactDataGoldener implements ImpactRegistry {
9494
ImpactDataGoldener(this.elementMap, this.features);
9595

9696
@override
97-
void registerRuntimeTypeUse(ir.Expression node, RuntimeTypeUseKind kind,
98-
ir.DartType receiverType, ir.DartType argumentType) {
97+
void registerRuntimeTypeUse(RuntimeTypeUseKind kind, ir.DartType receiverType,
98+
ir.DartType argumentType) {
9999
final runtimeTypeUse = RuntimeTypeUse(
100100
kind,
101101
elementMap.getDartType(receiverType),

0 commit comments

Comments
 (0)