OLD | NEW |
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 library dart2js.compiler_base; | 5 library dart2js.compiler_base; |
6 | 6 |
7 import 'dart:async' show EventSink, Future; | 7 import 'dart:async' show EventSink, Future; |
8 | 8 |
9 import '../compiler_new.dart' as api; | 9 import '../compiler_new.dart' as api; |
10 import 'cache_strategy.dart' show CacheStrategy; | 10 import 'cache_strategy.dart' show CacheStrategy; |
(...skipping 19 matching lines...) Expand all Loading... |
30 import 'dart_types.dart' show DartType, DynamicType, InterfaceType, Types; | 30 import 'dart_types.dart' show DartType, DynamicType, InterfaceType, Types; |
31 import 'deferred_load.dart' show DeferredLoadTask; | 31 import 'deferred_load.dart' show DeferredLoadTask; |
32 import 'diagnostics/code_location.dart'; | 32 import 'diagnostics/code_location.dart'; |
33 import 'diagnostics/diagnostic_listener.dart' show DiagnosticReporter; | 33 import 'diagnostics/diagnostic_listener.dart' show DiagnosticReporter; |
34 import 'diagnostics/invariant.dart' show REPORT_EXCESS_RESOLUTION; | 34 import 'diagnostics/invariant.dart' show REPORT_EXCESS_RESOLUTION; |
35 import 'diagnostics/messages.dart' show Message, MessageTemplate; | 35 import 'diagnostics/messages.dart' show Message, MessageTemplate; |
36 import 'dump_info.dart' show DumpInfoTask; | 36 import 'dump_info.dart' show DumpInfoTask; |
37 import 'elements/elements.dart'; | 37 import 'elements/elements.dart'; |
38 import 'elements/modelx.dart' show ErroneousElementX; | 38 import 'elements/modelx.dart' show ErroneousElementX; |
39 import 'enqueue.dart' | 39 import 'enqueue.dart' |
40 show | 40 show Enqueuer, EnqueueTask, ResolutionEnqueuer, QueueFilter; |
41 CodegenEnqueuer, | |
42 Enqueuer, | |
43 EnqueueTask, | |
44 ResolutionEnqueuer, | |
45 QueueFilter; | |
46 import 'environment.dart'; | 41 import 'environment.dart'; |
47 import 'id_generator.dart'; | 42 import 'id_generator.dart'; |
48 import 'io/source_information.dart' show SourceInformation; | 43 import 'io/source_information.dart' show SourceInformation; |
49 import 'js_backend/backend_helpers.dart' as js_backend show BackendHelpers; | 44 import 'js_backend/backend_helpers.dart' as js_backend show BackendHelpers; |
50 import 'js_backend/js_backend.dart' as js_backend show JavaScriptBackend; | 45 import 'js_backend/js_backend.dart' as js_backend show JavaScriptBackend; |
51 import 'library_loader.dart' | 46 import 'library_loader.dart' |
52 show | 47 show |
53 ElementScanner, | 48 ElementScanner, |
54 LibraryLoader, | 49 LibraryLoader, |
55 LibraryLoaderTask, | 50 LibraryLoaderTask, |
(...skipping 816 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
872 * were resolved, but not compiled (aka excess resolution). | 867 * were resolved, but not compiled (aka excess resolution). |
873 */ | 868 */ |
874 checkQueues() { | 869 checkQueues() { |
875 for (Enqueuer world in [enqueuer.resolution, enqueuer.codegen]) { | 870 for (Enqueuer world in [enqueuer.resolution, enqueuer.codegen]) { |
876 world.forEach((WorkItem work) { | 871 world.forEach((WorkItem work) { |
877 reporter.internalError(work.element, "Work list is not empty."); | 872 reporter.internalError(work.element, "Work list is not empty."); |
878 }); | 873 }); |
879 } | 874 } |
880 if (!REPORT_EXCESS_RESOLUTION) return; | 875 if (!REPORT_EXCESS_RESOLUTION) return; |
881 var resolved = new Set.from(enqueuer.resolution.processedElements); | 876 var resolved = new Set.from(enqueuer.resolution.processedElements); |
882 for (Element e in enqueuer.codegen.generatedCode.keys) { | 877 for (Element e in enqueuer.codegen.processedEntities) { |
883 resolved.remove(e); | 878 resolved.remove(e); |
884 } | 879 } |
885 for (Element e in new Set.from(resolved)) { | 880 for (Element e in new Set.from(resolved)) { |
886 if (e.isClass || | 881 if (e.isClass || |
887 e.isField || | 882 e.isField || |
888 e.isTypeVariable || | 883 e.isTypeVariable || |
889 e.isTypedef || | 884 e.isTypedef || |
890 identical(e.kind, ElementKind.ABSTRACT_FIELD)) { | 885 identical(e.kind, ElementKind.ABSTRACT_FIELD)) { |
891 resolved.remove(e); | 886 resolved.remove(e); |
892 } | 887 } |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
938 } | 933 } |
939 AstElement element = work.element; | 934 AstElement element = work.element; |
940 if (world.hasBeenProcessed(element)) { | 935 if (world.hasBeenProcessed(element)) { |
941 return const WorldImpact(); | 936 return const WorldImpact(); |
942 } | 937 } |
943 WorldImpact worldImpact = analyzeElement(element); | 938 WorldImpact worldImpact = analyzeElement(element); |
944 world.registerProcessedElement(element); | 939 world.registerProcessedElement(element); |
945 return worldImpact; | 940 return worldImpact; |
946 }); | 941 }); |
947 | 942 |
948 WorldImpact codegen(CodegenWorkItem work, CodegenEnqueuer world) { | 943 WorldImpact codegen(CodegenWorkItem work, Enqueuer world) { |
949 assert(invariant(work.element, identical(world, enqueuer.codegen))); | 944 assert(invariant(work.element, identical(world, enqueuer.codegen))); |
950 if (shouldPrintProgress) { | 945 if (shouldPrintProgress) { |
951 // TODO(ahe): Add structured diagnostics to the compiler API and | 946 // TODO(ahe): Add structured diagnostics to the compiler API and |
952 // use it to separate this from the --verbose option. | 947 // use it to separate this from the --verbose option. |
953 reporter | 948 reporter.log( |
954 .log('Compiled ${enqueuer.codegen.generatedCode.length} methods.'); | 949 'Compiled ${enqueuer.codegen.processedEntities.length} methods.'); |
955 progress.reset(); | 950 progress.reset(); |
956 } | 951 } |
957 return backend.codegen(work); | 952 return backend.codegen(work); |
958 } | 953 } |
959 | 954 |
960 void reportDiagnostic(DiagnosticMessage message, | 955 void reportDiagnostic(DiagnosticMessage message, |
961 List<DiagnosticMessage> infos, api.Diagnostic kind); | 956 List<DiagnosticMessage> infos, api.Diagnostic kind); |
962 | 957 |
963 void reportCrashInUserCode(String message, exception, stackTrace) { | 958 void reportCrashInUserCode(String message, exception, stackTrace) { |
964 reporter.onCrashInUserCode(message, exception, stackTrace); | 959 reporter.onCrashInUserCode(message, exception, stackTrace); |
(...skipping 1271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2236 _ElementScanner(this.scanner); | 2231 _ElementScanner(this.scanner); |
2237 void scanLibrary(LibraryElement library) => scanner.scanLibrary(library); | 2232 void scanLibrary(LibraryElement library) => scanner.scanLibrary(library); |
2238 void scanUnit(CompilationUnitElement unit) => scanner.scan(unit); | 2233 void scanUnit(CompilationUnitElement unit) => scanner.scan(unit); |
2239 } | 2234 } |
2240 | 2235 |
2241 class _EmptyEnvironment implements Environment { | 2236 class _EmptyEnvironment implements Environment { |
2242 const _EmptyEnvironment(); | 2237 const _EmptyEnvironment(); |
2243 | 2238 |
2244 String valueOf(String key) => null; | 2239 String valueOf(String key) => null; |
2245 } | 2240 } |
OLD | NEW |