[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:
committed by
commit-bot@chromium.org
parent
e50a064034
commit
3a021a6545
@@ -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,
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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
|
||||
|
||||
------------------------
|
||||
""");
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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";
|
||||
|
||||
|
||||
Reference in New Issue
Block a user