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

Side by Side Diff: pkg/compiler/lib/src/compiler.dart

Issue 2775223002: Derive CommonElements directly from ElementEnvironment. (Closed)
Patch Set: Fix. Created 3 years, 9 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
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 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 'closure.dart' as closureMapping show ClosureTask; 10 import 'closure.dart' as closureMapping show ClosureTask;
11 import 'common/names.dart' show Selectors; 11 import 'common/names.dart' show Selectors;
12 import 'common/names.dart' show Identifiers, Uris; 12 import 'common/names.dart' show Identifiers, Uris;
13 import 'common/resolution.dart' 13 import 'common/resolution.dart'
14 show 14 show
15 ParsingContext, 15 ParsingContext,
16 Resolution, 16 Resolution,
17 ResolutionWorkItem, 17 ResolutionWorkItem,
18 ResolutionImpact, 18 ResolutionImpact,
19 Target; 19 Target;
20 import 'common/tasks.dart' show CompilerTask, GenericTask, Measurer; 20 import 'common/tasks.dart' show CompilerTask, GenericTask, Measurer;
21 import 'common/work.dart' show WorkItem; 21 import 'common/work.dart' show WorkItem;
22 import 'common.dart'; 22 import 'common.dart';
23 import 'compile_time_constants.dart'; 23 import 'compile_time_constants.dart';
24 import 'constants/values.dart'; 24 import 'constants/values.dart';
25 import 'common_elements.dart' 25 import 'common_elements.dart'
26 show CommonElements, CommonElementsMixin, ElementEnvironment; 26 show CommonElements, CommonElementsImpl, ElementEnvironment;
27 import 'deferred_load.dart' show DeferredLoadTask; 27 import 'deferred_load.dart' show DeferredLoadTask;
28 import 'diagnostics/code_location.dart'; 28 import 'diagnostics/code_location.dart';
29 import 'diagnostics/diagnostic_listener.dart' show DiagnosticReporter; 29 import 'diagnostics/diagnostic_listener.dart' show DiagnosticReporter;
30 import 'diagnostics/invariant.dart' show REPORT_EXCESS_RESOLUTION; 30 import 'diagnostics/invariant.dart' show REPORT_EXCESS_RESOLUTION;
31 import 'diagnostics/messages.dart' show Message, MessageTemplate; 31 import 'diagnostics/messages.dart' show Message, MessageTemplate;
32 import 'dump_info.dart' show DumpInfoTask; 32 import 'dump_info.dart' show DumpInfoTask;
33 import 'elements/elements.dart'; 33 import 'elements/elements.dart';
34 import 'elements/entities.dart'; 34 import 'elements/entities.dart';
35 import 'elements/modelx.dart' show ErroneousElementX; 35 import 'elements/modelx.dart' show ErroneousElementX;
36 import 'elements/resolution_types.dart' 36 import 'elements/resolution_types.dart'
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 import 'world.dart' show ClosedWorld, ClosedWorldRefiner, ClosedWorldImpl; 81 import 'world.dart' show ClosedWorld, ClosedWorldRefiner, ClosedWorldImpl;
82 82
83 typedef CompilerDiagnosticReporter MakeReporterFunction( 83 typedef CompilerDiagnosticReporter MakeReporterFunction(
84 Compiler compiler, CompilerOptions options); 84 Compiler compiler, CompilerOptions options);
85 85
86 abstract class Compiler { 86 abstract class Compiler {
87 Measurer get measurer; 87 Measurer get measurer;
88 88
89 final IdGenerator idGenerator = new IdGenerator(); 89 final IdGenerator idGenerator = new IdGenerator();
90 Types types; 90 Types types;
91 _CompilerCommonElements _commonElements; 91 CommonElementsImpl _commonElements;
92 _CompilerElementEnvironment _elementEnvironment; 92 _CompilerElementEnvironment _elementEnvironment;
93 CompilerDiagnosticReporter _reporter; 93 CompilerDiagnosticReporter _reporter;
94 CompilerResolution _resolution; 94 CompilerResolution _resolution;
95 ParsingContext _parsingContext; 95 ParsingContext _parsingContext;
96 96
97 ImpactStrategy impactStrategy = const ImpactStrategy(); 97 ImpactStrategy impactStrategy = const ImpactStrategy();
98 98
99 /** 99 /**
100 * Map from token to the first preceding comment token. 100 * Map from token to the first preceding comment token.
101 */ 101 */
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
190 this.userOutputProvider = outputProvider == null 190 this.userOutputProvider = outputProvider == null
191 ? const NullCompilerOutput() 191 ? const NullCompilerOutput()
192 : outputProvider { 192 : outputProvider {
193 if (makeReporter != null) { 193 if (makeReporter != null) {
194 _reporter = makeReporter(this, options); 194 _reporter = makeReporter(this, options);
195 } else { 195 } else {
196 _reporter = new CompilerDiagnosticReporter(this, options); 196 _reporter = new CompilerDiagnosticReporter(this, options);
197 } 197 }
198 _resolution = createResolution(); 198 _resolution = createResolution();
199 _elementEnvironment = new _CompilerElementEnvironment(this); 199 _elementEnvironment = new _CompilerElementEnvironment(this);
200 _commonElements = 200 _commonElements = new CommonElementsImpl(_elementEnvironment);
201 new _CompilerCommonElements(_elementEnvironment, _resolution, reporter);
202 types = new Types(_resolution); 201 types = new Types(_resolution);
203 202
204 if (options.verbose) { 203 if (options.verbose) {
205 progress = new Stopwatch()..start(); 204 progress = new Stopwatch()..start();
206 } 205 }
207 206
208 backend = createBackend(); 207 backend = createBackend();
209 enqueuer = backend.makeEnqueuer(); 208 enqueuer = backend.makeEnqueuer();
210 209
211 tasks = [ 210 tasks = [
(...skipping 868 matching lines...) Expand 10 before | Expand all | Expand 10 after
1080 return userOutputProvider.createOutputSink(name, extension, type); 1079 return userOutputProvider.createOutputSink(name, extension, type);
1081 } 1080 }
1082 } 1081 }
1083 1082
1084 /// Information about suppressed warnings and hints for a given library. 1083 /// Information about suppressed warnings and hints for a given library.
1085 class SuppressionInfo { 1084 class SuppressionInfo {
1086 int warnings = 0; 1085 int warnings = 0;
1087 int hints = 0; 1086 int hints = 0;
1088 } 1087 }
1089 1088
1090 class _CompilerCommonElements extends CommonElementsMixin {
1091 final Resolution resolution;
1092 final DiagnosticReporter reporter;
1093
1094 final ElementEnvironment environment;
1095
1096 _CompilerCommonElements(this.environment, this.resolution, this.reporter);
1097
1098 @override
1099 ResolutionDynamicType get dynamicType => const ResolutionDynamicType();
1100
1101 LibraryEntity _coreLibrary;
1102 LibraryEntity get coreLibrary =>
1103 _coreLibrary ??= environment.lookupLibrary(Uris.dart_core);
1104
1105 LibraryEntity _typedDataLibrary;
1106 LibraryEntity get typedDataLibrary => _typedDataLibrary ??=
1107 environment.lookupLibrary(Uris.dart__native_typed_data);
1108
1109 LibraryEntity _mirrorsLibrary;
1110 LibraryEntity get mirrorsLibrary =>
1111 _mirrorsLibrary ??= environment.lookupLibrary(Uris.dart_mirrors);
1112
1113 LibraryEntity _asyncLibrary;
1114 LibraryEntity get asyncLibrary =>
1115 _asyncLibrary ??= environment.lookupLibrary(Uris.dart_async);
1116
1117 @override
1118 MemberElement findLibraryMember(LibraryElement library, String name,
1119 {bool setter: false, bool required: true}) {
1120 Element member = _findLibraryMember(library, name, required: required);
1121 if (member != null && member.isAbstractField) {
1122 AbstractFieldElement abstractField = member;
1123 if (setter) {
1124 member = abstractField.setter;
1125 } else {
1126 member = abstractField.getter;
1127 }
1128 if (member == null && required) {
1129 reporter.internalError(
1130 library,
1131 "The library '${library.canonicalUri}' does not contain required "
1132 "${setter ? 'setter' : 'getter'}: '$name'.");
1133 }
1134 }
1135 return member;
1136 }
1137
1138 @override
1139 MemberElement findClassMember(ClassElement cls, String name,
1140 {bool setter: false, bool required: true}) {
1141 cls.ensureResolved(resolution);
1142 Element member = cls.lookupLocalMember(name);
1143 if (member != null && member.isAbstractField) {
1144 AbstractFieldElement abstractField = member;
1145 if (setter) {
1146 member = abstractField.setter;
1147 } else {
1148 member = abstractField.getter;
1149 }
1150 }
1151 if (member == null && required) {
1152 reporter.internalError(
1153 cls,
1154 "The class '${cls}' in '${cls.library.canonicalUri}' does not "
1155 "contain required member: '$name'.");
1156 }
1157 return member;
1158 }
1159
1160 @override
1161 ConstructorElement findConstructor(ClassElement cls, String name,
1162 {bool required: true}) {
1163 cls.ensureResolved(resolution);
1164 ConstructorElement constructor = cls.lookupConstructor(name);
1165 if (constructor == null && required) {
1166 reporter.internalError(
1167 cls,
1168 "The class '${cls}' in '${cls.library.canonicalUri}' does not "
1169 "contain required constructor: '$name'.");
1170 }
1171 return constructor;
1172 }
1173
1174 @override
1175 ClassElement findClass(LibraryElement library, String name,
1176 {bool required: true}) {
1177 return _findLibraryMember(library, name, required: required);
1178 }
1179
1180 Element _findLibraryMember(LibraryElement library, String name,
1181 {bool required: true}) {
1182 // If the script of the library is synthesized, the library does not exist
1183 // and we do not try to load the helpers.
1184 //
1185 // This could for example happen if dart:async is disabled, then loading it
1186 // should not try to find the given element.
1187 if (library == null || library.isSynthesized) return null;
1188
1189 Element element = library.find(name);
1190 if (element == null && required) {
1191 reporter.internalError(
1192 library,
1193 "The library '${library.canonicalUri}' does not contain required "
1194 "element: '$name'.");
1195 }
1196 return element;
1197 }
1198 }
1199
1200 class CompilerDiagnosticReporter extends DiagnosticReporter { 1089 class CompilerDiagnosticReporter extends DiagnosticReporter {
1201 final Compiler compiler; 1090 final Compiler compiler;
1202 final DiagnosticOptions options; 1091 final DiagnosticOptions options;
1203 1092
1204 Element _currentElement; 1093 Element _currentElement;
1205 bool hasCrashed = false; 1094 bool hasCrashed = false;
1206 1095
1207 /// `true` if the last diagnostic was filtered, in which case the 1096 /// `true` if the last diagnostic was filtered, in which case the
1208 /// accompanying info message should be filtered as well. 1097 /// accompanying info message should be filtered as well.
1209 bool lastDiagnosticWasFiltered = false; 1098 bool lastDiagnosticWasFiltered = false;
(...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after
1917 1806
1918 /// An element environment base on a [Compiler]. 1807 /// An element environment base on a [Compiler].
1919 class _CompilerElementEnvironment implements ElementEnvironment { 1808 class _CompilerElementEnvironment implements ElementEnvironment {
1920 final Compiler _compiler; 1809 final Compiler _compiler;
1921 1810
1922 _CompilerElementEnvironment(this._compiler); 1811 _CompilerElementEnvironment(this._compiler);
1923 1812
1924 LibraryProvider get _libraryProvider => _compiler.libraryLoader; 1813 LibraryProvider get _libraryProvider => _compiler.libraryLoader;
1925 Resolution get _resolution => _compiler.resolution; 1814 Resolution get _resolution => _compiler.resolution;
1926 1815
1816 ResolutionDynamicType get dynamicType => const ResolutionDynamicType();
1817
1927 @override 1818 @override
1928 LibraryEntity get mainLibrary => _compiler.mainApp; 1819 LibraryEntity get mainLibrary => _compiler.mainApp;
1929 1820
1930 @override 1821 @override
1931 FunctionEntity get mainFunction => _compiler.mainFunction; 1822 FunctionEntity get mainFunction => _compiler.mainFunction;
1932 1823
1933 @override 1824 @override
1934 ResolutionInterfaceType getThisType(ClassElement cls) { 1825 ResolutionInterfaceType getThisType(ClassElement cls) {
1935 cls.ensureResolved(_resolution); 1826 cls.ensureResolved(_resolution);
1936 return cls.thisType; 1827 return cls.thisType;
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
2027 cls, 1918 cls,
2028 "The library '${library.libraryName}' does not " 1919 "The library '${library.libraryName}' does not "
2029 "contain required class: '$name'."); 1920 "contain required class: '$name'.");
2030 } 1921 }
2031 return cls?.declaration; 1922 return cls?.declaration;
2032 } 1923 }
2033 1924
2034 @override 1925 @override
2035 LibraryElement lookupLibrary(Uri uri, {bool required: false}) { 1926 LibraryElement lookupLibrary(Uri uri, {bool required: false}) {
2036 LibraryElement library = _libraryProvider.lookupLibrary(uri); 1927 LibraryElement library = _libraryProvider.lookupLibrary(uri);
1928 // If the script of the library is synthesized, the library does not exist
1929 // and we do not try to load the helpers.
1930 //
1931 // This could for example happen if dart:async is disabled, then loading it
1932 // should not try to find the given element.
2037 if (library != null && library.isSynthesized) { 1933 if (library != null && library.isSynthesized) {
2038 return null; 1934 return null;
2039 } 1935 }
2040 if (library == null && required) { 1936 if (library == null && required) {
2041 throw new SpannableAssertionFailure( 1937 throw new SpannableAssertionFailure(
2042 library, "The library '${uri}' was not found."); 1938 library, "The library '${uri}' was not found.");
2043 } 1939 }
2044 return library; 1940 return library;
2045 } 1941 }
2046 } 1942 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/common_elements.dart ('k') | pkg/compiler/lib/src/kernel/world_builder.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698