[cfe] Remove EvaluationMode.legacy

This is no longer valid. Since the SDK is agnostic we should default to weak mode.

Change-Id: Ia9fbf911e7ebb595c93a71afe3bb8de7495cebba
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149065
Reviewed-by: Jens Johansen <jensj@google.com>
This commit is contained in:
Johnni Winther
2020-05-30 09:47:02 +00:00
committed by commit-bot@chromium.org
parent e50a064034
commit 3a021a6545
15 changed files with 108 additions and 41 deletions
@@ -27,7 +27,7 @@ class AllowedExperiments {
/// are enabled for all files of this package.
final Map<String, List<String>> packageExperiments;
AllowedExperiments({
const AllowedExperiments({
@required this.sdkDefaultExperiments,
@required this.sdkLibraryExperiments,
@required this.packageExperiments,
+5 -4
View File
@@ -21,16 +21,17 @@ class Dart2jsConstantEvaluator extends ir.ConstantEvaluator {
ir.TypeEnvironment typeEnvironment, ReportErrorFunction reportError,
{Map<String, String> environment: const {},
bool enableTripleShift = false,
bool supportReevaluationForTesting: false})
bool supportReevaluationForTesting: false,
ir.EvaluationMode evaluationMode})
: _supportReevaluationForTesting = supportReevaluationForTesting,
// TODO(johnniwinther,sigmund): Pass evaluation mode for nnbd
// strong/weak mode.
assert(evaluationMode != null),
super(
const Dart2jsConstantsBackend(supportsUnevaluatedConstants: false),
environment,
typeEnvironment,
new ErrorReporter(reportError),
enableTripleShift: enableTripleShift);
enableTripleShift: enableTripleShift,
evaluationMode: evaluationMode);
@override
ErrorReporter get errorReporter => super.errorReporter;
@@ -2,6 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:front_end/src/api_prototype/constant_evaluator.dart' as ir;
import 'package:front_end/src/api_unstable/dart2js.dart' as ir;
import 'package:kernel/ast.dart' as ir;
@@ -1184,7 +1185,10 @@ class JsKernelToElementMap implements JsToElementMap, IrToElementMap {
},
environment: _environment.toMap(),
enableTripleShift:
options.languageExperiments[ir.ExperimentalFlag.tripleShift]);
options.languageExperiments[ir.ExperimentalFlag.tripleShift],
evaluationMode: options.nullSafetyMode == NullSafetyMode.sound
? ir.EvaluationMode.strong
: ir.EvaluationMode.weak);
}
@override
@@ -4,6 +4,7 @@
library dart2js.kernel.element_map;
import 'package:front_end/src/api_prototype/constant_evaluator.dart' as ir;
import 'package:front_end/src/api_unstable/dart2js.dart' as ir;
import 'package:js_runtime/shared/embedded_names.dart';
import 'package:kernel/ast.dart' as ir;
@@ -817,7 +818,10 @@ class KernelToElementMapImpl implements KernelToElementMap, IrToElementMap {
},
environment: _environment.toMap(),
enableTripleShift:
options.languageExperiments[ir.ExperimentalFlag.tripleShift]);
options.languageExperiments[ir.ExperimentalFlag.tripleShift],
evaluationMode: options.nullSafetyMode == NullSafetyMode.sound
? ir.EvaluationMode.strong
: ir.EvaluationMode.weak);
}
@override
@@ -20,6 +20,8 @@ import 'package:compiler/src/ir/constants.dart';
import 'package:compiler/src/ir/visitors.dart';
import 'package:compiler/src/kernel/kernel_strategy.dart';
import 'package:compiler/src/kernel/element_map_impl.dart';
import 'package:compiler/src/options.dart';
import 'package:front_end/src/api_prototype/constant_evaluator.dart' as ir;
import 'package:front_end/src/api_unstable/dart2js.dart' as ir;
import 'package:kernel/ast.dart' as ir;
import 'package:kernel/type_environment.dart' as ir;
@@ -686,7 +688,13 @@ Future testData(TestData data) async {
// the "real error message" is the first in the context.
errors.add(context.first.code.name);
reportLocatedMessage(elementMap.reporter, message, context);
}, environment: environment, supportReevaluationForTesting: true);
},
environment: environment,
supportReevaluationForTesting: true,
evaluationMode:
compiler.options.nullSafetyMode == NullSafetyMode.sound
? ir.EvaluationMode.strong
: ir.EvaluationMode.weak);
ir.Constant evaluatedConstant = evaluator.evaluate(
new ir.StaticTypeContext(node, typeEnvironment), initializer);
@@ -5,8 +5,9 @@
// NOTE: THIS FILE IS GENERATED. DO NOT EDIT.
//
// Instead modify 'tools/experimental_features.yaml' and run
// 'pkg/front_end/tool/fasta generate-experimental-flags' to update.
// 'dart pkg/front_end/tool/fasta.dart generate-experimental-flags' to update.
import 'package:_fe_analyzer_shared/src/sdk/allowed_experiments.dart';
import 'package:kernel/kernel.dart' show Version;
enum ExperimentalFlag {
@@ -78,3 +79,8 @@ const Map<ExperimentalFlag, bool> expiredExperimentalFlags = {
ExperimentalFlag.tripleShift: false,
ExperimentalFlag.variance: false,
};
const AllowedExperiments allowedExperiments =
const AllowedExperiments(sdkDefaultExperiments: [
"non-nullable",
], sdkLibraryExperiments: {}, packageExperiments: {});
@@ -128,7 +128,6 @@ void transformLibraries(
}
enum EvaluationMode {
legacy,
weak,
agnostic,
strong,
@@ -764,7 +763,7 @@ class ConstantEvaluator extends RecursiveVisitor<Constant> {
{this.desugarSets = false,
this.enableTripleShift = false,
this.errorOnUnevaluatedConstant = false,
this.evaluationMode: EvaluationMode.legacy})
this.evaluationMode: EvaluationMode.weak})
: numberSemantics = backend.numberSemantics,
coreTypes = typeEnvironment.coreTypes,
canonicalizationCache = <Constant, Constant>{},
@@ -799,7 +798,6 @@ class ConstantEvaluator extends RecursiveVisitor<Constant> {
DartType convertType(DartType type) {
switch (evaluationMode) {
case EvaluationMode.legacy:
case EvaluationMode.strong:
case EvaluationMode.agnostic:
return type;
@@ -812,7 +810,6 @@ class ConstantEvaluator extends RecursiveVisitor<Constant> {
List<DartType> convertTypes(List<DartType> types) {
switch (evaluationMode) {
case EvaluationMode.legacy:
case EvaluationMode.strong:
case EvaluationMode.agnostic:
return types;
@@ -2182,7 +2179,6 @@ class ConstantEvaluator extends RecursiveVisitor<Constant> {
}
return makeBoolConstant(strongResult);
case EvaluationMode.weak:
case EvaluationMode.legacy:
return makeBoolConstant(performIs(constant, strongMode: false));
}
throw new UnsupportedError("Unexpected evaluation mode $evaluationMode");
@@ -2327,7 +2323,6 @@ class ConstantEvaluator extends RecursiveVisitor<Constant> {
result = strongResult;
break;
case EvaluationMode.weak:
case EvaluationMode.legacy:
result =
isSubtype(constant, type, SubtypeCheckMode.ignoringNullabilities);
break;
@@ -1095,20 +1095,23 @@ class KernelTarget extends TargetImplementation {
TypeEnvironment environment =
new TypeEnvironment(loader.coreTypes, loader.hierarchy);
constants.EvaluationMode evaluationMode;
if (enableNonNullable) {
switch (loader.nnbdMode) {
case NnbdMode.Weak:
evaluationMode = constants.EvaluationMode.weak;
break;
case NnbdMode.Strong:
evaluationMode = constants.EvaluationMode.strong;
break;
case NnbdMode.Agnostic:
evaluationMode = constants.EvaluationMode.agnostic;
break;
}
} else {
evaluationMode = constants.EvaluationMode.legacy;
// If nnbd is not enabled we will use weak evaluation mode. This is needed
// because the SDK might be agnostic and therefore needs to be weakened
// for legacy mode.
assert(
enableNonNullable || loader.nnbdMode == NnbdMode.Weak,
"Non-weak nnbd mode found without experiment enabled: "
"${loader.nnbdMode}.");
switch (loader.nnbdMode) {
case NnbdMode.Weak:
evaluationMode = constants.EvaluationMode.weak;
break;
case NnbdMode.Strong:
evaluationMode = constants.EvaluationMode.strong;
break;
case NnbdMode.Agnostic:
evaluationMode = constants.EvaluationMode.agnostic;
break;
}
constants.transformLibraries(
+2 -1
View File
@@ -617,7 +617,8 @@ class Outline extends Step<TestDescription, ComponentResult, FastaContext> {
TestOptions testOptions = context.computeTestOptions(description);
Map<ExperimentalFlag, bool> experimentalFlags =
testOptions.computeExperimentalFlags(context.experimentalFlags);
NnbdMode nnbdMode = context.weak
NnbdMode nnbdMode = context.weak ||
!experimentalFlags[ExperimentalFlag.nonNullable]
? NnbdMode.Weak
: (testOptions.nnbdAgnosticMode ? NnbdMode.Agnostic : NnbdMode.Strong);
List<Uri> inputs = <Uri>[description.uri];
@@ -1205,6 +1205,7 @@ watch
watcher
wb
wc
weakened
weakener
weird
weren't
@@ -7,6 +7,8 @@ import 'dart:io' show File, Platform;
import 'package:_fe_analyzer_shared/src/scanner/characters.dart'
show $A, $MINUS, $a, $z;
import 'package:_fe_analyzer_shared/src/sdk/allowed_experiments.dart';
import 'package:dart_style/dart_style.dart' show DartFormatter;
import 'package:yaml/yaml.dart' show YamlMap, loadYaml;
@@ -33,6 +35,11 @@ Uri computeYamlFile() {
.resolve("../../../../tools/experimental_features.yaml");
}
Uri computeAllowListFile() {
return Platform.script
.resolve("../../../../sdk_nnbd/lib/_internal/allowed_experiments.json");
}
String generateKernelFile() {
Uri yamlFile = computeYamlFile();
Map<dynamic, dynamic> yaml =
@@ -57,7 +64,7 @@ String generateKernelFile() {
// NOTE: THIS FILE IS GENERATED. DO NOT EDIT.
//
// Instead modify 'tools/experimental_features.yaml' and run
// 'pkg/front_end/tool/fasta generate-experimental-flags' to update.
// 'dart pkg/front_end/tool/fasta.dart generate-experimental-flags' to update.
import "ast.dart";
@@ -91,8 +98,9 @@ String generateCfeFile() {
// NOTE: THIS FILE IS GENERATED. DO NOT EDIT.
//
// Instead modify 'tools/experimental_features.yaml' and run
// 'pkg/front_end/tool/fasta generate-experimental-flags' to update.
// 'dart pkg/front_end/tool/fasta.dart generate-experimental-flags' to update.
import 'package:_fe_analyzer_shared/src/sdk/allowed_experiments.dart';
import 'package:kernel/kernel.dart' show Version;
''');
@@ -164,7 +172,44 @@ const Map<ExperimentalFlag, bool> expiredExperimentalFlags = {
bool expired = (features[key] as YamlMap)['expired'] == true;
sb.writeln(' ExperimentalFlag.${keyToIdentifier(key)}: ${expired},');
}
sb.writeln('};');
sb.write('''
};
''');
Uri allowListFile = computeAllowListFile();
AllowedExperiments allowedExperiments = parseAllowedExperiments(
new File.fromUri(allowListFile).readAsStringSync());
sb.write('''
const AllowedExperiments allowedExperiments = const AllowedExperiments(
''');
sb.writeln('sdkDefaultExperiments: [');
for (String sdkDefaultExperiment
in allowedExperiments.sdkDefaultExperiments) {
sb.writeln('"$sdkDefaultExperiment",');
}
sb.writeln('],');
sb.writeln('sdkLibraryExperiments: {');
allowedExperiments.sdkLibraryExperiments
.forEach((String library, List<String> experiments) {
sb.writeln('"$library": [');
for (String experiment in experiments) {
sb.writeln('"$experiment",');
}
sb.writeln('],');
});
sb.writeln('},');
sb.writeln('packageExperiments: {');
allowedExperiments.packageExperiments
.forEach((String package, List<String> experiments) {
sb.writeln('"$package": [');
for (String experiment in experiments) {
sb.writeln('"$experiment",');
}
sb.writeln('],');
});
sb.writeln('});');
return new DartFormatter().format("$sb");
}
@@ -37,7 +37,7 @@ The generated file
${generatedFile.path}
is out of date. To regenerate the file, run
pkg/front_end/tool/fasta generate-experimental-flags
dart pkg/front_end/tool/fasta.dart generate-experimental-flags
------------------------
""");
+3
View File
@@ -26,6 +26,9 @@ main(List<String> args) async {
futures.add(
run("pkg/front_end/test/lint_suite.dart", ["--", "lint/front_end/..."]));
futures.add(run("pkg/front_end/test/deps_test.dart", [], filter: false));
futures.add(run(
"pkg/front_end/tool/_fasta/generate_experimental_flags_test.dart", [],
filter: false));
await Future.wait(futures);
print("\n-----------------------\n");
print("Done with exitcode $exitCode in ${stopwatch.elapsedMilliseconds} ms");
+2 -6
View File
@@ -100,12 +100,8 @@ Future<CompilerOutcome> runTransformation(List<String> arguments) async {
break;
case 'constants':
final VmConstantsBackend backend = new VmConstantsBackend(coreTypes);
component = constants.transformComponent(
component,
backend,
defines,
const constants.SimpleErrorReporter(),
constants.EvaluationMode.legacy);
component = constants.transformComponent(component, backend, defines,
const constants.SimpleErrorReporter(), constants.EvaluationMode.weak);
break;
case 'empty':
component = empty.transformComponent(component);
+1 -1
View File
@@ -5,7 +5,7 @@
// NOTE: THIS FILE IS GENERATED. DO NOT EDIT.
//
// Instead modify 'tools/experimental_features.yaml' and run
// 'pkg/front_end/tool/fasta generate-experimental-flags' to update.
// 'dart pkg/front_end/tool/fasta.dart generate-experimental-flags' to update.
import "ast.dart";