| 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);
|
|
|