[CFE/VM] Make IncrementalCompilerResult classHierarchy, coreTypes non-nullable; always use latest
This also fixes a potential leak on missing .accept call where using the
non-latest coreTypes in the VM causes us to hold on to old libraries.
Tested: CI
Change-Id: I3a4a25dab83de0d5113b9f08ec745ac181c24b9b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/411580
Commit-Queue: Jens Johansen <jensj@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Nicholas Shahan <nshahan@google.com>
diff --git a/pkg/dev_compiler/lib/src/command/command.dart b/pkg/dev_compiler/lib/src/command/command.dart
index e9bab19..7ffc832 100644
--- a/pkg/dev_compiler/lib/src/command/command.dart
+++ b/pkg/dev_compiler/lib/src/command/command.dart
@@ -349,7 +349,7 @@
incrementalCompilerResult.component,
cachedSdkInput?.component,
doneAdditionalDills,
- incrementalCompilerResult.classHierarchy!,
+ incrementalCompilerResult.classHierarchy,
incrementalCompilerResult.neededDillLibraries);
}
compilerState.options.onDiagnostic = null; // See http://dartbug.com/36983.
diff --git a/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart b/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
index 634ddc0..9313ef3 100644
--- a/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
+++ b/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
@@ -461,7 +461,7 @@
if (errors.isNotEmpty) return null;
var coreTypes = incrementalCompilerResult.coreTypes;
- var hierarchy = incrementalCompilerResult.classHierarchy!;
+ var hierarchy = incrementalCompilerResult.classHierarchy;
var kernel2jsCompiler = ProgramCompiler(
finalComponent,
diff --git a/pkg/dev_compiler/test/expression_compiler/test_compiler.dart b/pkg/dev_compiler/test/expression_compiler/test_compiler.dart
index 08a4d54..209330e 100644
--- a/pkg/dev_compiler/test/expression_compiler/test_compiler.dart
+++ b/pkg/dev_compiler/test/expression_compiler/test_compiler.dart
@@ -60,7 +60,7 @@
// Initialize DDC.
var moduleName = p.basenameWithoutExtension(output.toFilePath());
- var classHierarchy = compilerResult.classHierarchy!;
+ var classHierarchy = compilerResult.classHierarchy;
var compilerOptions = Options(
replCompile: true,
moduleName: moduleName,
diff --git a/pkg/dev_compiler/test/module_symbols/module_symbols_test_shared.dart b/pkg/dev_compiler/test/module_symbols/module_symbols_test_shared.dart
index 7a3153a..6dfb9ab 100644
--- a/pkg/dev_compiler/test/module_symbols/module_symbols_test_shared.dart
+++ b/pkg/dev_compiler/test/module_symbols/module_symbols_test_shared.dart
@@ -33,7 +33,7 @@
// Initialize DDC.
var moduleName = 'foo.dart';
- var classHierarchy = compilerResult.classHierarchy!;
+ var classHierarchy = compilerResult.classHierarchy;
var compilerOptions = Options(
replCompile: true,
moduleName: moduleName,
diff --git a/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart b/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart
index 6937e52..af317af 100644
--- a/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart
+++ b/pkg/front_end/lib/src/api_prototype/incremental_kernel_generator.dart
@@ -146,10 +146,12 @@
class IncrementalCompilerResult {
final Component component;
- final ClassHierarchy? classHierarchy;
- final CoreTypes? coreTypes;
+ final ClassHierarchy classHierarchy;
+ final CoreTypes coreTypes;
final Set<Library>? neededDillLibraries;
IncrementalCompilerResult(this.component,
- {this.classHierarchy, this.coreTypes, this.neededDillLibraries});
+ {required this.classHierarchy,
+ required this.coreTypes,
+ this.neededDillLibraries});
}
diff --git a/pkg/front_end/test/ast_nodes_has_to_string_test.dart b/pkg/front_end/test/ast_nodes_has_to_string_test.dart
index 43d7979..5e4ebbd 100644
--- a/pkg/front_end/test/ast_nodes_has_to_string_test.dart
+++ b/pkg/front_end/test/ast_nodes_has_to_string_test.dart
@@ -29,7 +29,7 @@
/*Uri initializeFrom*/ null, /*bool outlineOnly*/ true);
IncrementalCompilerResult compilerResult = await compiler.computeDelta();
c = compilerResult.component;
- classHierarchy = compilerResult.classHierarchy!;
+ classHierarchy = compilerResult.classHierarchy;
List<Library> libraries = c.libraries
.where((Library lib) =>
(lib.importUri.toString() == "package:kernel/ast.dart"))
diff --git a/pkg/front_end/test/expression_suite.dart b/pkg/front_end/test/expression_suite.dart
index 69fd5e0..4e6eb4f 100644
--- a/pkg/front_end/test/expression_suite.dart
+++ b/pkg/front_end/test/expression_suite.dart
@@ -417,7 +417,7 @@
IncrementalCompilerResult compilerResult,
Context context) async {
Map<String, DartType>? definitions = createDefinitionsWithTypes(
- compilerResult.classHierarchy?.knownLibraries,
+ compilerResult.classHierarchy.knownLibraries,
test.definitionTypes,
test.definitions);
@@ -428,7 +428,7 @@
}
}
List<TypeParameter>? typeParams = createTypeParametersWithBounds(
- compilerResult.classHierarchy?.knownLibraries,
+ compilerResult.classHierarchy.knownLibraries,
test.typeBounds,
test.typeDefaults,
test.typeDefinitions);
@@ -471,7 +471,7 @@
IncrementalCompiler compilerNoNNBD,
IncrementalCompilerResult compilerResult,
Context context) async {
- for (Library lib in compilerResult.classHierarchy!.knownLibraries) {
+ for (Library lib in compilerResult.classHierarchy.knownLibraries) {
if (!context.fuzzedLibraries.add(lib.importUri)) continue;
for (Member m in lib.members) {
diff --git a/pkg/frontend_server/test/frontend_server_test.dart b/pkg/frontend_server/test/frontend_server_test.dart
index ddd8d88..1e1d4ca 100644
--- a/pkg/frontend_server/test/frontend_server_test.dart
+++ b/pkg/frontend_server/test/frontend_server_test.dart
@@ -17,6 +17,8 @@
import 'package:frontend_server/starter.dart';
import 'package:kernel/ast.dart' show Component, Library;
import 'package:kernel/binary/ast_to_binary.dart';
+import 'package:kernel/class_hierarchy.dart';
+import 'package:kernel/core_types.dart';
import 'package:kernel/kernel.dart' show loadComponentFromBinary;
import 'package:kernel/target/targets.dart';
import 'package:kernel/verifier.dart' show VerificationStage, verifyComponent;
@@ -111,8 +113,12 @@
@override
Future<IncrementalCompilerResult> compile({List<Uri>? entryPoints}) async {
+ Component component = new Component();
+ CoreTypes coreTypes = new CoreTypes(component);
+ ClassHierarchy classHierarchy = new ClassHierarchy(component, coreTypes);
return new Future<IncrementalCompilerResult>.value(
- new IncrementalCompilerResult(new Component()));
+ new IncrementalCompilerResult(component,
+ coreTypes: coreTypes, classHierarchy: classHierarchy));
}
@override
diff --git a/pkg/vm/lib/incremental_compiler.dart b/pkg/vm/lib/incremental_compiler.dart
index a1405cc..7b7f98f 100644
--- a/pkg/vm/lib/incremental_compiler.dart
+++ b/pkg/vm/lib/incremental_compiler.dart
@@ -97,20 +97,19 @@
}
IncrementalCompilerResult _combinePendingDeltas(bool includePlatform) {
+ assert(_pendingDeltas.isNotEmpty);
Procedure? mainMethod;
NonNullableByDefaultCompiledMode compilationMode =
NonNullableByDefaultCompiledMode.Invalid;
Map<Uri, Library> combined = <Uri, Library>{};
Map<Uri, Source> uriToSource = new Map<Uri, Source>();
- ClassHierarchy? classHierarchy;
- CoreTypes? coreTypes;
+ ClassHierarchy classHierarchy = _pendingDeltas.last.classHierarchy;
+ CoreTypes coreTypes = _pendingDeltas.last.coreTypes;
for (IncrementalCompilerResult deltaResult in _pendingDeltas) {
Component delta = deltaResult.component;
if (delta.mainMethod != null) {
mainMethod = delta.mainMethod;
}
- classHierarchy ??= deltaResult.classHierarchy;
- coreTypes ??= deltaResult.coreTypes;
compilationMode = delta.mode;
uriToSource.addAll(delta.uriToSource);
for (Library library in delta.libraries) {
@@ -149,6 +148,7 @@
"compilation only; cannot accept",
);
}
+ if (_pendingDeltas.isEmpty) return;
Map<Uri, Library> combined = <Uri, Library>{};
Map<Uri, Source> uriToSource = <Uri, Source>{};
@@ -249,10 +249,11 @@
String? scriptUri,
bool isStatic,
) {
- ClassHierarchy? classHierarchy =
+ assert(_lastKnownGood != null || _pendingDeltas.isNotEmpty);
+ ClassHierarchy classHierarchy =
(_lastKnownGood ?? _combinePendingDeltas(false)).classHierarchy;
Map<String, DartType>? completeDefinitions = createDefinitionsWithTypes(
- classHierarchy?.knownLibraries,
+ classHierarchy.knownLibraries,
definitionTypes,
definitions,
);
@@ -269,7 +270,7 @@
}
List<TypeParameter>? typeParameters = createTypeParametersWithBounds(
- classHierarchy?.knownLibraries,
+ classHierarchy.knownLibraries,
typeBounds,
typeDefaults,
typeDefinitions,