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

Unified Diff: sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart

Issue 448943004: Refactor and simplify the dart2dart renamer. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: fix a number of tests, and remove unused typedef Created 6 years, 4 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: sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart
diff --git a/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart
index 92c0156325d3392253a5ee2faa22db0d9f4d731c..82bbf9b1aa87ed5b307652697dfd13ebb2be4325 100644
--- a/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart
@@ -23,11 +23,11 @@ class DartBackend extends Backend {
final bool stripAsserts;
// TODO(antonm): make available from command-line options.
final bool outputAst = false;
- final Map<Node, String> renames;
- final Map<LibraryElement, String> imports;
final Map<ClassNode, List<Node>> memberNodes;
Map<Element, LibraryElement> reexportingLibraries;
+ PlaceholderRenamer placeholderRenamer;
+
// TODO(zarah) Maybe change this to a command-line option.
// Right now, it is set by the tests.
bool useMirrorHelperLibrary = false;
@@ -105,8 +105,6 @@ class DartBackend extends Backend {
DartBackend(Compiler compiler, List<String> strips)
: tasks = <CompilerTask>[],
- renames = new Map<Node, String>(),
- imports = new Map<LibraryElement, String>(),
memberNodes = new Map<ClassNode, List<Node>>(),
reexportingLibraries = <Element, LibraryElement>{},
forceStripTypes = strips.indexOf('types') != -1,
@@ -396,14 +394,15 @@ class DartBackend extends Backend {
bool shouldCutDeclarationTypes = forceStripTypes
|| (compiler.enableMinification
&& isSafeToRemoveTypeDeclarations(classMembers));
- renamePlaceholders(
- compiler, collector, renames, imports,
- fixedMemberNames, reexportingLibraries,
- shouldCutDeclarationTypes,
- uniqueGlobalNaming: useMirrorHelperLibrary);
+
+ placeholderRenamer =
+ new PlaceholderRenamer(compiler, fixedMemberNames, reexportingLibraries,
+ cutDeclarationTypes: shouldCutDeclarationTypes);
+
+ placeholderRenamer.computeRenamings(collector);
// Sort elements.
- final sortedTopLevels = sortElements(topLevelElements);
+ final List<Element> sortedTopLevels = sortElements(topLevelElements);
final sortedClassMembers = new Map<ClassElement, List<Element>>();
classMembers.forEach((classElement, members) {
sortedClassMembers[classElement] = sortElements(members);
@@ -430,7 +429,7 @@ class DartBackend extends Backend {
return;
}
- final topLevelNodes = <Node>[];
+ final List<Node> topLevelNodes = <Node>[];
for (final element in sortedTopLevels) {
topLevelNodes.add(elementAsts[element].ast);
if (element.isClass && !element.isMixinApplication) {
@@ -443,18 +442,34 @@ class DartBackend extends Backend {
}
if (useMirrorHelperLibrary) {
- mirrorRenamer.addRenames(renames, topLevelNodes, collector);
+ mirrorRenamer.addRenames(placeholderRenamer.renames,
+ topLevelNodes, collector);
}
- final unparser = new EmitterUnparser(renames, stripTypes: forceStripTypes,
- minify: compiler.enableMinification);
- emitCode(unparser, imports, topLevelNodes, memberNodes);
- String assembledCode = unparser.result;
- compiler.outputProvider('', 'dart')
- ..add(assembledCode)
- ..close();
- compiler.assembledCode = assembledCode;
+ final unparser = new EmitterUnparser(placeholderRenamer.renames,
+ stripTypes: forceStripTypes,
+ minify: compiler.enableMinification);
+ for(LibraryElement library in placeholderRenamer.platformImports) {
+ if (library.isPlatformLibrary && !library.isInternalLibrary) {
+ unparser.unparseImportTag(library.canonicalUri.toString());
+ }
+ }
+ for (int i = 0; i < sortedTopLevels.length; i++) {
+ Element element = sortedTopLevels[i];
+ Node node = topLevelNodes[i];
+ if (node is ClassNode) {
+ // TODO(smok): Filter out default constructors here.
+ unparser.unparseClassWithBody(node, memberNodes[node]);
+ } else {
+ unparser.unparse(node);
+ }
+ unparser.newline();
+ }
+ compiler.assembledCode = unparser.result;
+ compiler.outputProvider("", "dart")
+ ..add(compiler.assembledCode)
+ ..close();
// Output verbose info about size ratio of resulting bundle to all
// referenced non-platform sources.
logResultBundleSizeInfo(topLevelElements);

Powered by Google App Engine
This is Rietveld 408576698