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

Unified Diff: pkg/dev_compiler/lib/src/compiler/code_generator.dart

Issue 2353133004: fix #27403, use AST summaries in DDC (Closed)
Patch Set: merge Created 4 years, 3 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
« no previous file with comments | « pkg/dev_compiler/lib/src/analyzer/context.dart ('k') | pkg/dev_compiler/lib/src/compiler/compiler.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/dev_compiler/lib/src/compiler/code_generator.dart
diff --git a/pkg/dev_compiler/lib/src/compiler/code_generator.dart b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
index dd31245a4b39b344fa9ae173bce4f26644e2f484..c62aa11e635e922f45cb7278f7ae3701ea1a856d 100644
--- a/pkg/dev_compiler/lib/src/compiler/code_generator.dart
+++ b/pkg/dev_compiler/lib/src/compiler/code_generator.dart
@@ -14,13 +14,20 @@ import 'package:analyzer/src/dart/ast/token.dart' show StringToken;
import 'package:analyzer/src/dart/element/element.dart'
show LocalVariableElementImpl;
import 'package:analyzer/src/dart/element/type.dart' show DynamicTypeImpl;
+import 'package:analyzer/src/dart/sdk/sdk.dart';
import 'package:analyzer/src/generated/engine.dart' show AnalysisContext;
import 'package:analyzer/src/generated/resolver.dart'
show TypeProvider, NamespaceBuilder;
import 'package:analyzer/src/generated/type_system.dart'
show StrongTypeSystemImpl;
+import 'package:analyzer/src/summary/idl.dart' show UnlinkedUnit;
+import 'package:analyzer/src/summary/link.dart' as summary_link;
+import 'package:analyzer/src/summary/package_bundle_reader.dart';
+import 'package:analyzer/src/summary/summarize_ast.dart'
+ show serializeAstUnlinked;
import 'package:analyzer/src/summary/summarize_elements.dart'
show PackageBundleAssembler;
+import 'package:analyzer/src/summary/summary_sdk.dart';
import 'package:analyzer/src/task/strong/ast_properties.dart'
show isDynamicInvoke, setIsDynamicInvoke;
import 'package:path/path.dart' show separator;
@@ -47,6 +54,8 @@ import 'type_utilities.dart';
class CodeGenerator extends GeneralizingAstVisitor
with ClosureAnnotator, JsTypeRefCodegen, NullableTypeInference {
final AnalysisContext context;
+ final SummaryDataStore summaryData;
+
final CompilerOptions options;
final rules = new StrongTypeSystemImpl();
@@ -138,7 +147,8 @@ class CodeGenerator extends GeneralizingAstVisitor
/// Whether we are currently generating code for the body of a `JS()` call.
bool _isInForeignJS = false;
- CodeGenerator(AnalysisContext c, this.options, this._extensionTypes)
+ CodeGenerator(
+ AnalysisContext c, this.summaryData, this.options, this._extensionTypes)
: context = c,
types = c.typeProvider,
_asyncStreamIterator =
@@ -175,14 +185,37 @@ class CodeGenerator extends GeneralizingAstVisitor
return new JSModuleFile(unit.name, errors, options, module, dartApiSummary);
}
- List<int> _summarizeModule(List<CompilationUnit> compilationUnits) {
+ List<int> _summarizeModule(List<CompilationUnit> units) {
if (!options.summarizeApi) return null;
+ if (!units.any((u) => u.element.librarySource.isInSystemLibrary)) {
+ var sdk = context.sourceFactory.dartSdk;
+ summaryData.addBundle(
+ null,
+ sdk is SummaryBasedDartSdk
+ ? sdk.bundle
+ : (sdk as FolderBasedDartSdk).getSummarySdkBundle(true));
+ }
+
var assembler = new PackageBundleAssembler();
- compilationUnits
- .map((u) => u.element.library)
- .toSet()
- .forEach(assembler.serializeLibraryElement);
+ assembler.recordDependencies(summaryData);
+
+ var uriToUnit = new Map<String, UnlinkedUnit>.fromIterable(units,
+ key: (u) => u.element.source.uri.toString(), value: (unit) {
+ var unlinked = serializeAstUnlinked(unit);
+ assembler.addUnlinkedUnit(unit.element.source, unlinked);
+ return unlinked;
+ });
+
+ summary_link
+ .link(
+ uriToUnit.keys.toSet(),
+ (uri) => summaryData.linkedMap[uri],
+ (uri) => summaryData.unlinkedMap[uri] ?? uriToUnit[uri],
+ context.declaredVariables.get,
+ true)
+ .forEach(assembler.addLinkedLibrary);
+
return assembler.assemble().toBuffer();
}
« no previous file with comments | « pkg/dev_compiler/lib/src/analyzer/context.dart ('k') | pkg/dev_compiler/lib/src/compiler/compiler.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698