Skip to content

Commit b4c60e6

Browse files
Markzipancommit-bot@chromium.org
authored andcommitted
[dart2js] Removing switch class restrictions.
From the spec: `It is no longer required that the [case expression] evaluate to instances of the same class.` Fixes #42409 Change-Id: Ieecd96cb75d683658ffc767d973b0ff2f5e6d834 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/153060 Reviewed-by: Stephen Adams <[email protected]> Commit-Queue: Mark Zhou <[email protected]>
1 parent 935b69e commit b4c60e6

File tree

1 file changed

+15
-48
lines changed

1 file changed

+15
-48
lines changed

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

Lines changed: 15 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -820,12 +820,6 @@ abstract class KernelImpactRegistryMixin implements ImpactRegistry {
820820

821821
@override
822822
void registerSwitchStatementNode(ir.SwitchStatement node) {
823-
// TODO(32557): Remove this when issue 32557 is fixed.
824-
ir.TreeNode firstCase;
825-
DartType firstCaseType;
826-
DiagnosticMessage error;
827-
List<DiagnosticMessage> infos = <DiagnosticMessage>[];
828-
829823
bool overridesEquals(InterfaceType type) {
830824
if (type == commonElements.symbolImplementationType) {
831825
// Treat symbol constants as if Symbol doesn't override `==`.
@@ -850,50 +844,23 @@ abstract class KernelImpactRegistryMixin implements ImpactRegistry {
850844
ConstantValue value =
851845
elementMap.getConstantValue(staticTypeContext, expression);
852846
DartType type = value.getType(elementMap.commonElements);
853-
if (firstCaseType == null) {
854-
firstCase = expression;
855-
firstCaseType = type;
856-
857-
// We only report the bad type on the first class element. All others
858-
// get a "type differs" error.
859-
if (type == commonElements.doubleType) {
860-
reporter.reportErrorMessage(
861-
computeSourceSpanFromTreeNode(expression),
862-
MessageKind.SWITCH_CASE_VALUE_OVERRIDES_EQUALS,
863-
{'type': "double"});
864-
} else if (type == commonElements.functionType) {
865-
reporter.reportErrorMessage(computeSourceSpanFromTreeNode(node),
866-
MessageKind.SWITCH_CASE_FORBIDDEN, {'type': "Function"});
867-
} else if (value.isObject &&
868-
type != commonElements.typeLiteralType &&
869-
overridesEquals(type)) {
870-
reporter.reportErrorMessage(
871-
computeSourceSpanFromTreeNode(firstCase),
872-
MessageKind.SWITCH_CASE_VALUE_OVERRIDES_EQUALS,
873-
{'type': typeToString(type)});
874-
}
875-
} else {
876-
if (type != firstCaseType) {
877-
if (error == null) {
878-
error = reporter.createMessage(
879-
computeSourceSpanFromTreeNode(node),
880-
MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL,
881-
{'type': typeToString(firstCaseType)});
882-
infos.add(reporter.createMessage(
883-
computeSourceSpanFromTreeNode(firstCase),
884-
MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL_CASE,
885-
{'type': typeToString(firstCaseType)}));
886-
}
887-
infos.add(reporter.createMessage(
888-
computeSourceSpanFromTreeNode(expression),
889-
MessageKind.SWITCH_CASE_TYPES_NOT_EQUAL_CASE,
890-
{'type': typeToString(type)}));
891-
}
847+
if (type == commonElements.doubleType) {
848+
reporter.reportErrorMessage(
849+
computeSourceSpanFromTreeNode(expression),
850+
MessageKind.SWITCH_CASE_VALUE_OVERRIDES_EQUALS,
851+
{'type': "double"});
852+
} else if (type == commonElements.functionType) {
853+
reporter.reportErrorMessage(computeSourceSpanFromTreeNode(node),
854+
MessageKind.SWITCH_CASE_FORBIDDEN, {'type': "Function"});
855+
} else if (value.isObject &&
856+
type != commonElements.typeLiteralType &&
857+
overridesEquals(type)) {
858+
reporter.reportErrorMessage(
859+
computeSourceSpanFromTreeNode(expression),
860+
MessageKind.SWITCH_CASE_VALUE_OVERRIDES_EQUALS,
861+
{'type': typeToString(type)});
892862
}
893863
}
894864
}
895-
if (error != null) {
896-
reporter.reportError(error, infos);
897-
}
898865
}
899866
}

0 commit comments

Comments
 (0)