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

Side by Side Diff: dart/sdk/lib/_internal/compiler/implementation/compiler.dart

Issue 16101007: Implement LibraryMirror.metadata. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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 part of dart2js; 5 part of dart2js;
6 6
7 /** 7 /**
8 * If true, print a warning for each method that was resolved, but not 8 * If true, print a warning for each method that was resolved, but not
9 * compiled. 9 * compiled.
10 */ 10 */
(...skipping 625 matching lines...) Expand 10 before | Expand all | Expand 10 after
636 if (dynamicClass != null) { 636 if (dynamicClass != null) {
637 // When loading the built-in libraries, dynamicClass is null. We 637 // When loading the built-in libraries, dynamicClass is null. We
638 // take advantage of this as core imports js_helper and sees [dynamic] 638 // take advantage of this as core imports js_helper and sees [dynamic]
639 // this way. 639 // this way.
640 withCurrentElement(dynamicClass, () { 640 withCurrentElement(dynamicClass, () {
641 library.addToScope(dynamicClass, this); 641 library.addToScope(dynamicClass, this);
642 }); 642 });
643 } 643 }
644 if (uri == Uri.parse('dart:mirrors')) { 644 if (uri == Uri.parse('dart:mirrors')) {
645 mirrorSystemClass = library.find(const SourceString('MirrorSystem')); 645 mirrorSystemClass = library.find(const SourceString('MirrorSystem'));
646 metadataHandler = constantHandler;
646 } else if (uri == Uri.parse('dart:_collection-dev')) { 647 } else if (uri == Uri.parse('dart:_collection-dev')) {
647 symbolImplementationClass = library.find(const SourceString('Symbol')); 648 symbolImplementationClass = library.find(const SourceString('Symbol'));
648 } 649 }
649 } 650 }
650 651
651 void onClassResolved(ClassElement cls) { 652 void onClassResolved(ClassElement cls) {
652 if (mirrorSystemClass == cls) { 653 if (mirrorSystemClass == cls) {
653 mirrorSystemGetNameFunction = 654 mirrorSystemGetNameFunction =
654 cls.lookupLocalMember(const SourceString('getName')); 655 cls.lookupLocalMember(const SourceString('getName'));
655 } else if (symbolClass == cls) { 656 } else if (symbolClass == cls) {
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
815 } 816 }
816 817
817 log('Resolving...'); 818 log('Resolving...');
818 phase = PHASE_RESOLVING; 819 phase = PHASE_RESOLVING;
819 if (analyzeAll) { 820 if (analyzeAll) {
820 libraries.forEach((_, lib) => fullyEnqueueLibrary(lib)); 821 libraries.forEach((_, lib) => fullyEnqueueLibrary(lib));
821 } 822 }
822 // Elements required by enqueueHelpers are global dependencies 823 // Elements required by enqueueHelpers are global dependencies
823 // that are not pulled in by a particular element. 824 // that are not pulled in by a particular element.
824 backend.enqueueHelpers(enqueuer.resolution, globalDependencies); 825 backend.enqueueHelpers(enqueuer.resolution, globalDependencies);
826 resolveReflectiveDataIfNeeded();
825 processQueue(enqueuer.resolution, main); 827 processQueue(enqueuer.resolution, main);
826 enqueuer.resolution.logSummary(log); 828 enqueuer.resolution.logSummary(log);
827 829
828 if (compilationFailed) return; 830 if (compilationFailed) return;
829 if (analyzeOnly) return; 831 if (analyzeOnly) return;
830 assert(main != null); 832 assert(main != null);
831 phase = PHASE_DONE_RESOLVING; 833 phase = PHASE_DONE_RESOLVING;
832 834
833 // TODO(ahe): Remove this line. Eventually, enqueuer.resolution 835 // TODO(ahe): Remove this line. Eventually, enqueuer.resolution
834 // should know this. 836 // should know this.
(...skipping 22 matching lines...) Expand all
857 processQueue(enqueuer.codegen, main); 859 processQueue(enqueuer.codegen, main);
858 enqueuer.codegen.logSummary(log); 860 enqueuer.codegen.logSummary(log);
859 861
860 if (compilationFailed) return; 862 if (compilationFailed) return;
861 863
862 backend.assembleProgram(); 864 backend.assembleProgram();
863 865
864 checkQueues(); 866 checkQueues();
865 } 867 }
866 868
869 void resolveReflectiveDataIfNeeded() {
870 // Only need reflective data when dart:mirrors is loaded.
871 if (mirrorSystemClass == null) return;
872
873 for (LibraryElement library in libraries.values) {
874 for (Link link = library.metadata; !link.isEmpty; link = link.tail) {
875 link.head.ensureResolved(this);
876 }
877 }
878 }
879
867 void fullyEnqueueLibrary(LibraryElement library) { 880 void fullyEnqueueLibrary(LibraryElement library) {
868 library.forEachLocalMember(fullyEnqueueTopLevelElement); 881 library.forEachLocalMember(fullyEnqueueTopLevelElement);
869 } 882 }
870 883
871 void fullyEnqueueTopLevelElement(Element element) { 884 void fullyEnqueueTopLevelElement(Element element) {
872 if (element.isClass()) { 885 if (element.isClass()) {
873 ClassElement cls = element; 886 ClassElement cls = element;
874 cls.ensureResolved(this); 887 cls.ensureResolved(this);
875 cls.forEachLocalMember(enqueuer.resolution.addToWorkList); 888 cls.forEachLocalMember(enqueuer.resolution.addToWorkList);
876 enqueuer.resolution.registerInstantiatedClass( 889 enqueuer.resolution.registerInstantiatedClass(
(...skipping 455 matching lines...) Expand 10 before | Expand all | Expand 10 after
1332 1345
1333 void close() {} 1346 void close() {}
1334 1347
1335 toString() => name; 1348 toString() => name;
1336 1349
1337 /// Convenience method for getting an [api.CompilerOutputProvider]. 1350 /// Convenience method for getting an [api.CompilerOutputProvider].
1338 static NullSink outputProvider(String name, String extension) { 1351 static NullSink outputProvider(String name, String extension) {
1339 return new NullSink('$name.$extension'); 1352 return new NullSink('$name.$extension');
1340 } 1353 }
1341 } 1354 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698