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

Unified Diff: pkg/front_end/lib/src/fasta/source/source_loader.dart

Issue 2828253003: Add top level type inference logic for integer literals. (Closed)
Patch Set: Clean up, bug fix, and remove unintentional expectations changes Created 3 years, 8 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
Index: pkg/front_end/lib/src/fasta/source/source_loader.dart
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 7799c30fc7f76c3d40c686e74537aedfa396ffb3..4211963cb804808d241cdbcbff57105ded46d637 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -10,12 +10,20 @@ import 'dart:typed_data' show Uint8List;
import 'package:front_end/src/base/instrumentation.dart' show Instrumentation;
+import 'package:front_end/src/fasta/builder/ast_factory.dart' show AstFactory;
+
+import 'package:front_end/src/fasta/kernel/kernel_ast_factory.dart'
+ show KernelAstFactory;
+
import 'package:front_end/src/fasta/kernel/kernel_shadow_ast.dart'
show KernelTypeInferrer;
import 'package:front_end/src/fasta/kernel/kernel_target.dart'
show KernelTarget;
+import 'package:front_end/src/fasta/type_inference/type_inferrer.dart'
+ show TypeInferrer;
+
import 'package:kernel/ast.dart' show Program;
import 'package:kernel/class_hierarchy.dart' show ClassHierarchy;
@@ -56,6 +64,10 @@ class SourceLoader<L> extends Loader<L> {
ClassHierarchy hierarchy;
CoreTypes coreTypes;
+ final AstFactory astFactory = new KernelAstFactory();
+
+ TypeInferrer topLevelTypeInferrer;
+
Instrumentation instrumentation;
SourceLoader(KernelTarget target) : super(target);
@@ -129,9 +141,8 @@ class SourceLoader<L> extends Loader<L> {
KernelTarget get target => super.target;
DietListener createDietListener(LibraryBuilder library) {
- var typeInferrer = new KernelTypeInferrer(
- coreTypes, hierarchy, instrumentation, target.strongMode);
- return new DietListener(library, hierarchy, coreTypes, typeInferrer);
+ return new DietListener(
+ library, hierarchy, coreTypes, createLocalTypeInferrer());
}
void resolveParts() {
@@ -368,5 +379,40 @@ class SourceLoader<L> extends Loader<L> {
ticker.logMs("Checked overrides");
}
+ void createTopLevelTypeInferrer() {
+ topLevelTypeInferrer =
+ new KernelTypeInferrer(instrumentation, target.strongMode);
+ }
+
+ /// Performs the first phase of top level initializer inference, which
+ /// consists of creating kernel objects for all fields and top level variables
+ /// that might be subject to type inference, and records dependencies between
+ /// them.
+ void prepareInitializerInference() {
+ topLevelTypeInferrer.coreTypes = coreTypes;
+ topLevelTypeInferrer.classHierarchy = hierarchy;
+ builders.forEach((Uri uri, LibraryBuilder library) {
+ if (library is SourceLibraryBuilder) {
+ library.prepareInitializerInference(
+ topLevelTypeInferrer, library, null);
+ }
+ });
+ ticker.logMs("Prepared initializer inference");
+ }
+
+ /// Performs the second phase of top level initializer inference, which is to
+ /// visit fields and top level variables in topologically-sorted order and
+ /// assign their types.
+ void performInitializerInference() {
+ topLevelTypeInferrer.performInitializerInference();
+ ticker.logMs("Performed initializer inference");
+ }
+
+ /// Creates the type inferrer that should be used inside of method bodies.
+ TypeInferrer createLocalTypeInferrer() {
+ // For kernel, the top level and local type inferrers are the same.
+ return topLevelTypeInferrer;
+ }
+
List<Uri> getDependencies() => sourceBytes.keys.toList();
}

Powered by Google App Engine
This is Rietveld 408576698