[dart2js] Narrow scope of static type visitor.
The static type visitor only needs to be a TreeVisitor.
Change-Id: I5501a7e71719e711895c0ac18b49c9323665c9d1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/249460
Reviewed-by: Stephen Adams <sra@google.com>
Reviewed-by: Nate Biggs <natebiggs@google.com>
diff --git a/pkg/compiler/lib/src/ir/cached_static_type.dart b/pkg/compiler/lib/src/ir/cached_static_type.dart
index fa192c5..d25cf28 100644
--- a/pkg/compiler/lib/src/ir/cached_static_type.dart
+++ b/pkg/compiler/lib/src/ir/cached_static_type.dart
@@ -23,7 +23,7 @@
: super(staticTypeContext.typeEnvironment);
@override
- ir.DartType getStaticType(ir.Expression node) => node.accept(this)!;
+ ir.DartType getStaticType(ir.Expression node) => node.accept(this);
@override
ir.DartType getForInIteratorType(ir.ForInStatement node) =>
diff --git a/pkg/compiler/lib/src/ir/static_type.dart b/pkg/compiler/lib/src/ir/static_type.dart
index 061804e..94e403b 100644
--- a/pkg/compiler/lib/src/ir/static_type.dart
+++ b/pkg/compiler/lib/src/ir/static_type.dart
@@ -166,10 +166,6 @@
}
@override
- ir.DartType defaultNode(ir.Node node) =>
- throw UnsupportedError('Unhandled node $node (${node.runtimeType})');
-
- @override
Null visitComponent(ir.Component node) {
visitNodes(node.libraries);
}
@@ -461,7 +457,7 @@
for (ir.Member member in cls.members) {
if (member.name.text == name) return member;
}
- throw fail("Member '$name' not found in $cls");
+ throw StateError("Member '$name' not found in $cls");
}
ir.Procedure _objectEquals;
@@ -1217,7 +1213,7 @@
ir.DartType thenType = visitNode(then);
TypeMap afterThen = typeMap;
typeMap = afterConditionWhenFalse;
- ir.DartType otherwiseType = visitNode(otherwise);
+ ir.DartType otherwiseType = visitNodeOrNull(otherwise);
TypeMap afterOtherwise = typeMap;
if (completes(thenType) && completes(otherwiseType)) {
typeMap = afterThen.join(afterOtherwise);
@@ -1438,7 +1434,7 @@
Set<ir.VariableDeclaration> _oldVariables = _currentVariables;
_currentVariables = {};
visitSignature(node.function);
- visitNode(node.function.body);
+ visitNodeOrNull(node.function.body);
handleFunctionExpression(node);
_invalidatedVariables.removeAll(_currentVariables);
_currentVariables = _oldVariables;
@@ -1529,7 +1525,7 @@
visitNodes(node.variables);
TypeMap beforeLoop = typeMap =
typeMap.remove(variableScopeModel.getScopeFor(node).assignedVariables);
- visitNode(node.condition);
+ visitNodeOrNull(node.condition);
typeMap = typeMapWhenTrue;
visitNode(node.body);
visitNodes(node.updates);
@@ -1621,7 +1617,7 @@
@override
ir.DartType visitReturnStatement(ir.ReturnStatement node) {
- visitNode(node.expression);
+ visitNodeOrNull(node.expression);
return const DoesNotCompleteType();
}
@@ -1675,7 +1671,7 @@
TypeMap afterConditionWhenTrue = typeMapWhenTrue;
TypeMap afterConditionWhenFalse = typeMapWhenFalse;
typeMap = afterConditionWhenFalse;
- visitNode(node.message);
+ visitNodeOrNull(node.message);
handleAssertStatement(node);
typeMap = useAsserts ? afterConditionWhenTrue : beforeCondition;
}
@@ -1690,7 +1686,7 @@
Set<ir.VariableDeclaration> _oldVariables = _currentVariables;
_currentVariables = {};
visitSignature(node.function);
- visitNode(node.function.body);
+ visitNodeOrNull(node.function.body);
handleFunctionDeclaration(node);
_invalidatedVariables.removeAll(_currentVariables);
_currentVariables = _oldVariables;
@@ -1701,7 +1697,7 @@
void visitParameter(ir.VariableDeclaration node) {
_currentVariables.add(node);
- visitNode(node.initializer);
+ visitNodeOrNull(node.initializer);
handleParameter(node);
}
@@ -1722,7 +1718,7 @@
_currentVariables = {};
currentLibrary = node.enclosingLibrary;
visitSignature(node.function);
- visitNode(node.function.body);
+ visitNodeOrNull(node.function.body);
handleProcedure(node);
_invalidatedVariables.removeAll(_currentVariables);
_currentVariables = null;
@@ -1740,7 +1736,7 @@
currentLibrary = node.enclosingLibrary;
visitSignature(node.function);
visitNodes(node.initializers);
- visitNode(node.function.body);
+ visitNodeOrNull(node.function.body);
handleConstructor(node);
_invalidatedVariables.removeAll(_currentVariables);
_currentVariables = null;
@@ -1756,7 +1752,7 @@
typeEnvironment.coreTypes, node.enclosingLibrary.nonNullable));
_currentVariables = {};
currentLibrary = node.enclosingLibrary;
- visitNode(node.initializer);
+ visitNodeOrNull(node.initializer);
handleField(node);
_invalidatedVariables.removeAll(_currentVariables);
_currentVariables = null;
@@ -1768,7 +1764,7 @@
void _processLocalVariable(ir.VariableDeclaration node) {
_currentVariables.add(node);
- ir.DartType type = visitNode(node.initializer);
+ ir.DartType type = visitNodeOrNull(node.initializer);
if (node.initializer != null &&
variableScopeModel.isEffectivelyFinal(node) &&
inferEffectivelyFinalVariableTypes) {
diff --git a/pkg/compiler/lib/src/ir/static_type_base.dart b/pkg/compiler/lib/src/ir/static_type_base.dart
index 79ed5f4..9357bb0 100644
--- a/pkg/compiler/lib/src/ir/static_type_base.dart
+++ b/pkg/compiler/lib/src/ir/static_type_base.dart
@@ -55,14 +55,11 @@
/// expression kind. For instance method invocations whose static type depend
/// on the static types of the receiver and type arguments and the signature
/// of the targeted procedure.
-abstract class StaticTypeBase extends ir.Visitor<ir.DartType?>
- with ir.VisitorNullMixin<ir.DartType> {
+abstract class StaticTypeBase extends ir.TreeVisitor<ir.DartType> {
final ir.TypeEnvironment _typeEnvironment;
StaticTypeBase(this._typeEnvironment);
- fail(String message) => message;
-
ir.TypeEnvironment get typeEnvironment => _typeEnvironment;
ir.StaticTypeContext get staticTypeContext;
@@ -70,33 +67,28 @@
ThisInterfaceType get thisType;
@override
- ir.DartType? defaultNode(ir.Node node) {
- return null;
+ ir.DartType defaultTreeNode(ir.TreeNode node) {
+ throw UnsupportedError('Unhandled node $node (${node.runtimeType})');
}
- ir.DartType? visitNode(ir.Node? node) {
- return node?.accept(this);
- }
+ ir.DartType visitNode(ir.TreeNode node) => node.accept(this);
- Null visitNodes(List<ir.Node> nodes) {
- for (ir.Node node in nodes) {
+ ir.DartType? visitNodeOrNull(ir.TreeNode? node) => node?.accept(this);
+
+ void visitNodes(Iterable<ir.TreeNode> nodes) {
+ for (ir.TreeNode node in nodes) {
visitNode(node);
}
}
@override
- ir.DartType defaultExpression(ir.Expression node) {
- throw fail('Unhandled node $node (${node.runtimeType})');
- }
-
- @override
ir.DartType visitAsExpression(ir.AsExpression node) {
return node.type;
}
@override
ir.DartType visitAwaitExpression(ir.AwaitExpression node) {
- return typeEnvironment.flatten(visitNode(node.operand)!);
+ return typeEnvironment.flatten(visitNode(node.operand));
}
@override
@@ -150,7 +142,7 @@
}
@override
- ir.DartType? visitVariableSet(ir.VariableSet node) {
+ ir.DartType visitVariableSet(ir.VariableSet node) {
return visitNode(node.value);
}
@@ -161,12 +153,12 @@
ir.DartType visitStaticGet(ir.StaticGet node) => node.target.getterType;
@override
- ir.DartType? visitStaticSet(ir.StaticSet node) {
+ ir.DartType visitStaticSet(ir.StaticSet node) {
return visitNode(node.value);
}
@override
- ir.DartType? visitSuperPropertySet(ir.SuperPropertySet node) {
+ ir.DartType visitSuperPropertySet(ir.SuperPropertySet node) {
return visitNode(node.value);
}
@@ -205,12 +197,12 @@
}
@override
- ir.DartType? visitLet(ir.Let node) {
+ ir.DartType visitLet(ir.Let node) {
return visitNode(node.body);
}
@override
- ir.DartType? visitBlockExpression(ir.BlockExpression node) {
+ ir.DartType visitBlockExpression(ir.BlockExpression node) {
return visitNode(node.value);
}
diff --git a/pkg/compiler/test/analyses/analysis_helper.dart b/pkg/compiler/test/analyses/analysis_helper.dart
index f7a975c..251ed4d 100644
--- a/pkg/compiler/test/analyses/analysis_helper.dart
+++ b/pkg/compiler/test/analyses/analysis_helper.dart
@@ -312,8 +312,8 @@
}
@override
- ir.DartType visitNode(ir.Node node) {
- ir.DartType staticType = node?.accept(this);
+ ir.DartType visitNode(ir.TreeNode node) {
+ ir.DartType staticType = node.accept(this);
assert(
node is! ir.Expression ||
staticType is ir.NullType ||