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

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: 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..ae51683a4033842fc85d013952a2f73ba610abbf 100644
--- a/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart_backend/backend.dart
@@ -23,8 +23,6 @@ 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;
@@ -105,8 +103,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 +392,15 @@ class DartBackend extends Backend {
bool shouldCutDeclarationTypes = forceStripTypes
|| (compiler.enableMinification
&& isSafeToRemoveTypeDeclarations(classMembers));
- renamePlaceholders(
- compiler, collector, renames, imports,
- fixedMemberNames, reexportingLibraries,
- shouldCutDeclarationTypes,
- uniqueGlobalNaming: useMirrorHelperLibrary);
+
+ PlaceholderRenamer placeholderRenamer =
+ new PlaceholderRenamer(compiler, fixedMemberNames, reexportingLibraries,
+ cutDeclarationTypes: shouldCutDeclarationTypes);
jgruber1 2014/08/07 15:15:04 Does cutDeclarationTypes have to be optional?
sigurdm 2014/08/14 09:39:16 No - it is named because named parameters are much
+
+ 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 +427,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 +440,38 @@ 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);
+ final unparser = new EmitterUnparser(placeholderRenamer.renames,
+ stripTypes: forceStripTypes,
+ minify: compiler.enableMinification);
String assembledCode = unparser.result;
compiler.outputProvider('', 'dart')
..add(assembledCode)
..close();
compiler.assembledCode = assembledCode;
+ 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.outputProvider("", "dart")
+ ..add(unparser.result)
+ ..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