Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(111)

Unified Diff: pkg/analyzer/lib/src/generated/resolver.dart

Issue 2067843002: ExitDetector: Don't short-circuit return on non-exiting case statements (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/analyzer/test/generated/all_the_rest_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer/lib/src/generated/resolver.dart
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index ca02438d7ee4fb47d33baf18f7a934a0e4910bd9..1ae2befb8d806ae8dfcff9d897935c8819c1b7b0 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -3755,6 +3755,7 @@ class ExitDetector extends GeneralizingAstVisitor<bool> {
_enclosingBlockContainsBreak = false;
try {
bool hasDefault = false;
+ bool hasNonExitingCase;
Brian Wilkerson 2016/06/14 16:27:14 nit: While not strictly necessary, I'd prefer all
srawlins 2016/06/14 18:28:17 Done.
List<SwitchMember> members = node.members;
for (int i = 0; i < members.length; i++) {
SwitchMember switchMember = members[i];
@@ -3763,16 +3764,20 @@ class ExitDetector extends GeneralizingAstVisitor<bool> {
// If this is the last member and there are no statements, return
Brian Wilkerson 2016/06/14 16:27:15 nit: the code below no longer returns
srawlins 2016/06/14 18:28:17 Done.
// false
if (switchMember.statements.isEmpty && i + 1 == members.length) {
- return false;
+ hasNonExitingCase = true;
+ continue;
}
}
// For switch members with no statements, don't visit the children,
// otherwise, return false if no return is found in the children
Brian Wilkerson 2016/06/14 16:27:15 nit: the code below no longer returns
srawlins 2016/06/14 18:28:17 Done.
// statements.
if (!switchMember.statements.isEmpty && !switchMember.accept(this)) {
- return false;
+ hasNonExitingCase = true;
}
}
+ if (hasNonExitingCase) {
+ return false;
+ }
// As all cases exit, return whether that list includes `default`.
return hasDefault;
} finally {
« no previous file with comments | « no previous file | pkg/analyzer/test/generated/all_the_rest_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698