| Index: sdk/lib/_internal/compiler/implementation/compiler.dart
|
| diff --git a/sdk/lib/_internal/compiler/implementation/compiler.dart b/sdk/lib/_internal/compiler/implementation/compiler.dart
|
| index 774c2c6ea2ee79119c8b246b669bb2a8f42aed93..7b5569f4d7749e172ec351ad91a77752e84f35e1 100644
|
| --- a/sdk/lib/_internal/compiler/implementation/compiler.dart
|
| +++ b/sdk/lib/_internal/compiler/implementation/compiler.dart
|
| @@ -74,8 +74,12 @@ abstract class Backend {
|
|
|
| void enqueueHelpers(Enqueuer world);
|
| void codegen(WorkItem work);
|
| - void processNativeClasses(Enqueuer world,
|
| - Collection<LibraryElement> libraries);
|
| +
|
| + // The backend determines the native resolution enqueuer so tools like
|
| + // dart2dart can ignore the native classes.
|
| + NativeEnqueuer nativeResolutionEnqueuer(world);
|
| + NativeEnqueuer nativeCodegenEnqueuer(world);
|
| +
|
| void assembleProgram();
|
| List<CompilerTask> get tasks;
|
|
|
| @@ -521,11 +525,18 @@ abstract class Compiler implements DiagnosticListener {
|
| });
|
| }
|
|
|
| + enqueuer.resolution.nativeEnqueuer =
|
| + backend.nativeResolutionEnqueuer(enqueuer.resolution);
|
| + enqueuer.codegen.nativeEnqueuer =
|
| + backend.nativeCodegenEnqueuer(enqueuer.codegen);
|
| +
|
| log('Resolving...');
|
| phase = PHASE_RESOLVING;
|
| backend.enqueueHelpers(enqueuer.resolution);
|
| processQueue(enqueuer.resolution, main);
|
| log('Resolved ${enqueuer.resolution.resolvedElements.length} elements.');
|
| + log('Resolved ${enqueuer.resolution.nativeEnqueuer.registeredClasses.length} native elements used, '
|
| + '${enqueuer.resolution.nativeEnqueuer.unusedClasses.length} native elements dead.');
|
|
|
| if (compilationFailed) return;
|
|
|
| @@ -540,6 +551,8 @@ abstract class Compiler implements DiagnosticListener {
|
| phase = PHASE_COMPILING;
|
| processQueue(enqueuer.codegen, main);
|
| log('Compiled ${codegenWorld.generatedCode.length} methods.');
|
| + log('Compiled ${enqueuer.codegen.nativeEnqueuer.registeredClasses.length} native classes, '
|
| + '${enqueuer.codegen.nativeEnqueuer.unusedClasses.length} native classes omitted.');
|
|
|
| if (compilationFailed) return;
|
|
|
| @@ -549,7 +562,7 @@ abstract class Compiler implements DiagnosticListener {
|
| }
|
|
|
| void processQueue(Enqueuer world, Element main) {
|
| - backend.processNativeClasses(world, libraries.values);
|
| + world.nativeEnqueuer.processNativeClasses(libraries.values);
|
| world.addToWorkList(main);
|
| progress.reset();
|
| world.forEach((WorkItem work) {
|
| @@ -652,6 +665,7 @@ abstract class Compiler implements DiagnosticListener {
|
| TreeElements result = world.getCachedElements(element);
|
| if (result != null) return result;
|
| if (!identical(world, enqueuer.resolution)) {
|
| + throw 'Internal error: unresolved element: $element.';
|
| internalErrorOnElement(element,
|
| 'Internal error: unresolved element: $element.');
|
| }
|
|
|