[CFE] Handle unevaluated constants differently in constant evaluator

This for instance avoids an exponential blowup that would previously
have occurred in certain cases.

Change-Id: I258d8153e75f7059bca346826b5dec62cc1bac84
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/249000
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Joshua Litt <joshualitt@google.com>
Reviewed-by: Aske Simon Christensen <askesc@google.com>
Commit-Queue: Jens Johansen <jensj@google.com>
This commit is contained in:
Jens Johansen
2022-06-22 08:51:04 +00:00
committed by Commit Bot
parent ac586ff2a6
commit 3c8a679b46
40 changed files with 1757 additions and 908 deletions
+9 -1
View File
@@ -25,7 +25,7 @@ import 'log.dart' show Logger, StdoutLogger, splitLines;
import 'multitest.dart' show MultitestTransformer, isError;
import 'expectation.dart' show Expectation, ExpectationSet;
import 'expectation.dart' show Expectation, ExpectationGroup, ExpectationSet;
typedef Future<ChainContext> CreateContext(
Chain suite, Map<String, String> environment);
@@ -148,6 +148,14 @@ abstract class ChainContext {
}
final Set<Expectation> expectedOutcomes = processExpectedOutcomes(
expectations.expectations(description.shortName), description);
bool shouldSkip = false;
for (Expectation expectation in expectedOutcomes) {
if (expectation.group == ExpectationGroup.Skip) {
shouldSkip = true;
break;
}
}
if (shouldSkip) continue;
final StringBuffer sb = new StringBuffer();
final Step? lastStep = steps.isNotEmpty ? steps.last : null;
final Iterator<Step> iterator = steps.iterator;