| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 import 'dart:collection' show Queue; | 5 import 'dart:collection' show Queue; |
| 6 | 6 |
| 7 import '../common.dart'; | 7 import '../common.dart'; |
| 8 import '../common/backend_api.dart' show | 8 import '../common/backend_api.dart' show |
| 9 ForeignResolver; | 9 ForeignResolver; |
| 10 import '../common/registry.dart' show | 10 import '../common/registry.dart' show |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 processedLibraries = compiler.cacheStrategy.newSet(); | 134 processedLibraries = compiler.cacheStrategy.newSet(); |
| 135 | 135 |
| 136 JavaScriptBackend get backend => compiler.backend; | 136 JavaScriptBackend get backend => compiler.backend; |
| 137 BackendHelpers get helpers => backend.helpers; | 137 BackendHelpers get helpers => backend.helpers; |
| 138 Resolution get resolution => compiler.resolution; | 138 Resolution get resolution => compiler.resolution; |
| 139 | 139 |
| 140 DiagnosticReporter get reporter => compiler.reporter; | 140 DiagnosticReporter get reporter => compiler.reporter; |
| 141 CoreTypes get coreTypes => compiler.coreTypes; | 141 CoreTypes get coreTypes => compiler.coreTypes; |
| 142 | 142 |
| 143 void processNativeClasses(Iterable<LibraryElement> libraries) { | 143 void processNativeClasses(Iterable<LibraryElement> libraries) { |
| 144 if (compiler.hasIncrementalSupport) { | 144 if (compiler.options.hasIncrementalSupport) { |
| 145 // Since [Set.add] returns bool if an element was added, this restricts | 145 // Since [Set.add] returns bool if an element was added, this restricts |
| 146 // [libraries] to ones that haven't already been processed. This saves | 146 // [libraries] to ones that haven't already been processed. This saves |
| 147 // time during incremental compiles. | 147 // time during incremental compiles. |
| 148 libraries = libraries.where(processedLibraries.add); | 148 libraries = libraries.where(processedLibraries.add); |
| 149 } | 149 } |
| 150 libraries.forEach(processNativeClassesInLibrary); | 150 libraries.forEach(processNativeClassesInLibrary); |
| 151 if (helpers.isolateHelperLibrary != null) { | 151 if (helpers.isolateHelperLibrary != null) { |
| 152 processNativeClassesInLibrary(helpers.isolateHelperLibrary); | 152 processNativeClassesInLibrary(helpers.isolateHelperLibrary); |
| 153 } | 153 } |
| 154 processSubclassesOfNativeClasses(libraries); | 154 processSubclassesOfNativeClasses(libraries); |
| (...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 363 if (flushing) return; | 363 if (flushing) return; |
| 364 flushing = true; | 364 flushing = true; |
| 365 while (!queue.isEmpty) { | 365 while (!queue.isEmpty) { |
| 366 (queue.removeFirst())(); | 366 (queue.removeFirst())(); |
| 367 } | 367 } |
| 368 flushing = false; | 368 flushing = false; |
| 369 } | 369 } |
| 370 | 370 |
| 371 processClass(BaseClassElementX classElement, cause) { | 371 processClass(BaseClassElementX classElement, cause) { |
| 372 // TODO(ahe): Fix this assertion to work in incremental compilation. | 372 // TODO(ahe): Fix this assertion to work in incremental compilation. |
| 373 assert(compiler.hasIncrementalSupport || | 373 assert(compiler.options.hasIncrementalSupport || |
| 374 !registeredClasses.contains(classElement)); | 374 !registeredClasses.contains(classElement)); |
| 375 | 375 |
| 376 bool firstTime = registeredClasses.isEmpty; | 376 bool firstTime = registeredClasses.isEmpty; |
| 377 pendingClasses.remove(classElement); | 377 pendingClasses.remove(classElement); |
| 378 registeredClasses.add(classElement); | 378 registeredClasses.add(classElement); |
| 379 | 379 |
| 380 // TODO(ahe): Is this really a global dependency? | 380 // TODO(ahe): Is this really a global dependency? |
| 381 classElement.ensureResolved(resolution); | 381 classElement.ensureResolved(resolution); |
| 382 compiler.backend.registerInstantiatedType( | 382 compiler.backend.registerInstantiatedType( |
| 383 classElement.rawType, world, compiler.globalDependencies); | 383 classElement.rawType, world, compiler.globalDependencies); |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 577 'native exception'); | 577 'native exception'); |
| 578 } | 578 } |
| 579 } | 579 } |
| 580 | 580 |
| 581 | 581 |
| 582 class NativeResolutionEnqueuer extends NativeEnqueuerBase { | 582 class NativeResolutionEnqueuer extends NativeEnqueuerBase { |
| 583 | 583 |
| 584 Map<String, ClassElement> tagOwner = new Map<String, ClassElement>(); | 584 Map<String, ClassElement> tagOwner = new Map<String, ClassElement>(); |
| 585 | 585 |
| 586 NativeResolutionEnqueuer(Enqueuer world, Compiler compiler) | 586 NativeResolutionEnqueuer(Enqueuer world, Compiler compiler) |
| 587 : super(world, compiler, compiler.enableNativeLiveTypeAnalysis); | 587 : super(world, compiler, compiler.options.enableNativeLiveTypeAnalysis); |
| 588 | 588 |
| 589 void processNativeClass(ClassElement classElement) { | 589 void processNativeClass(ClassElement classElement) { |
| 590 super.processNativeClass(classElement); | 590 super.processNativeClass(classElement); |
| 591 | 591 |
| 592 // Js Interop interfaces do not have tags. | 592 // Js Interop interfaces do not have tags. |
| 593 if (backend.isJsInterop(classElement)) return; | 593 if (backend.isJsInterop(classElement)) return; |
| 594 // Since we map from dispatch tags to classes, a dispatch tag must be used | 594 // Since we map from dispatch tags to classes, a dispatch tag must be used |
| 595 // on only one native class. | 595 // on only one native class. |
| 596 for (String tag in backend.getNativeTagsOfClass(classElement)) { | 596 for (String tag in backend.getNativeTagsOfClass(classElement)) { |
| 597 ClassElement owner = tagOwner[tag]; | 597 ClassElement owner = tagOwner[tag]; |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 663 } | 663 } |
| 664 | 664 |
| 665 | 665 |
| 666 class NativeCodegenEnqueuer extends NativeEnqueuerBase { | 666 class NativeCodegenEnqueuer extends NativeEnqueuerBase { |
| 667 | 667 |
| 668 final CodeEmitterTask emitter; | 668 final CodeEmitterTask emitter; |
| 669 | 669 |
| 670 final Set<ClassElement> doneAddSubtypes = new Set<ClassElement>(); | 670 final Set<ClassElement> doneAddSubtypes = new Set<ClassElement>(); |
| 671 | 671 |
| 672 NativeCodegenEnqueuer(Enqueuer world, Compiler compiler, this.emitter) | 672 NativeCodegenEnqueuer(Enqueuer world, Compiler compiler, this.emitter) |
| 673 : super(world, compiler, compiler.enableNativeLiveTypeAnalysis); | 673 : super(world, compiler, compiler.options.enableNativeLiveTypeAnalysis); |
| 674 | 674 |
| 675 void processNativeClasses(Iterable<LibraryElement> libraries) { | 675 void processNativeClasses(Iterable<LibraryElement> libraries) { |
| 676 super.processNativeClasses(libraries); | 676 super.processNativeClasses(libraries); |
| 677 | 677 |
| 678 // HACK HACK - add all the resolved classes. | 678 // HACK HACK - add all the resolved classes. |
| 679 NativeEnqueuerBase enqueuer = compiler.enqueuer.resolution.nativeEnqueuer; | 679 NativeEnqueuerBase enqueuer = compiler.enqueuer.resolution.nativeEnqueuer; |
| 680 for (final classElement in enqueuer.registeredClasses) { | 680 for (final classElement in enqueuer.registeredClasses) { |
| 681 if (unusedClasses.contains(classElement)) { | 681 if (unusedClasses.contains(classElement)) { |
| 682 enqueueClass(classElement, 'was resolved'); | 682 enqueueClass(classElement, 'was resolved'); |
| 683 } | 683 } |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 721 superclass, | 721 superclass, |
| 722 () => <ClassElement>[]); | 722 () => <ClassElement>[]); |
| 723 directSubtypes.add(cls); | 723 directSubtypes.add(cls); |
| 724 } | 724 } |
| 725 | 725 |
| 726 void logSummary(log(message)) { | 726 void logSummary(log(message)) { |
| 727 log('Compiled ${registeredClasses.length} native classes, ' | 727 log('Compiled ${registeredClasses.length} native classes, ' |
| 728 '${unusedClasses.length} native classes omitted.'); | 728 '${unusedClasses.length} native classes omitted.'); |
| 729 } | 729 } |
| 730 } | 730 } |
| OLD | NEW |