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

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

Issue 2527973002: Remove direct access to enqueuer through use of WorldImpact (Closed)
Patch Set: Updated cf. comments. Created 4 years 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
« no previous file with comments | « no previous file | pkg/compiler/lib/src/common/codegen.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.backend_api; 5 library dart2js.backend_api;
6 6
7 import 'dart:async' show Future; 7 import 'dart:async' show Future;
8 8
9 import '../common.dart'; 9 import '../common.dart';
10 import '../common/codegen.dart' show CodegenImpact; 10 import '../common/codegen.dart' show CodegenImpact;
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 /// Set of classes that need to be considered for reflection although not 75 /// Set of classes that need to be considered for reflection although not
76 /// otherwise visible during resolution. 76 /// otherwise visible during resolution.
77 Iterable<ClassElement> classesRequiredForReflection = const []; 77 Iterable<ClassElement> classesRequiredForReflection = const [];
78 78
79 // Given a [FunctionElement], return a buffer with the code generated for it 79 // Given a [FunctionElement], return a buffer with the code generated for it
80 // or null if no code was generated. 80 // or null if no code was generated.
81 CodeBuffer codeOf(Element element) => null; 81 CodeBuffer codeOf(Element element) => null;
82 82
83 void initializeHelperClasses() {} 83 void initializeHelperClasses() {}
84 84
85 void enqueueHelpers(ResolutionEnqueuer world); 85 /// Compute the [WorldImpact] for backend helper methods.
86 WorldImpact computeHelpersImpact();
86 87
87 /// Creates an [Enqueuer] for code generation specific to this backend. 88 /// Creates an [Enqueuer] for code generation specific to this backend.
88 Enqueuer createCodegenEnqueuer(CompilerTask task, Compiler compiler); 89 Enqueuer createCodegenEnqueuer(CompilerTask task, Compiler compiler);
89 90
90 WorldImpact codegen(CodegenWorkItem work); 91 WorldImpact codegen(CodegenWorkItem work);
91 92
92 // The backend determines the native resolution enqueuer, with a no-op 93 // The backend determines the native resolution enqueuer, with a no-op
93 // default, so tools like dart2dart can ignore the native classes. 94 // default, so tools like dart2dart can ignore the native classes.
94 native.NativeEnqueuer nativeResolutionEnqueuer() { 95 native.NativeEnqueuer nativeResolutionEnqueuer() {
95 return new native.NativeEnqueuer(); 96 return new native.NativeEnqueuer();
(...skipping 13 matching lines...) Expand all
109 110
110 bool classNeedsRti(ClassElement cls); 111 bool classNeedsRti(ClassElement cls);
111 bool methodNeedsRti(FunctionElement function); 112 bool methodNeedsRti(FunctionElement function);
112 113
113 /// Enable compilation of code with compile time errors. Returns `true` if 114 /// Enable compilation of code with compile time errors. Returns `true` if
114 /// supported by the backend. 115 /// supported by the backend.
115 bool enableCodegenWithErrorsIfSupported(Spannable node); 116 bool enableCodegenWithErrorsIfSupported(Spannable node);
116 117
117 /// Enable deferred loading. Returns `true` if the backend supports deferred 118 /// Enable deferred loading. Returns `true` if the backend supports deferred
118 /// loading. 119 /// loading.
119 bool enableDeferredLoadingIfSupported( 120 bool enableDeferredLoadingIfSupported(Spannable node);
120 ResolutionEnqueuer enqueuer, Spannable node); 121
122 /// Returns the [WorldImpact] of enabling deferred loading.
123 WorldImpact computeDeferredLoadingImpact() => const WorldImpact();
121 124
122 /// Called during codegen when [constant] has been used. 125 /// Called during codegen when [constant] has been used.
123 void computeImpactForCompileTimeConstant(ConstantValue constant, 126 void computeImpactForCompileTimeConstant(ConstantValue constant,
124 WorldImpactBuilder impactBuilder, bool isForResolution) {} 127 WorldImpactBuilder impactBuilder, bool isForResolution) {}
125 128
126 /// Called to notify to the backend that a class is being instantiated. 129 /// Called to notify to the backend that a class is being instantiated. Any
127 // TODO(johnniwinther): Remove this. It's only called once for each [cls] and 130 /// backend specific [WorldImpact] of this is returned.
128 // only with [Compiler.globalDependencies] as [registry]. 131 WorldImpact registerInstantiatedClass(ClassElement cls,
129 void registerInstantiatedClass(ClassElement cls, Enqueuer enqueuer) {} 132 {bool forResolution}) =>
133 const WorldImpact();
130 134
131 /// Called to notify to the backend that a class is implemented by an 135 /// Called to notify to the backend that a class is implemented by an
132 /// instantiated class. 136 /// instantiated class. Any backend specific [WorldImpact] of this is
133 void registerImplementedClass(ClassElement cls, Enqueuer enqueuer) {} 137 /// returned.
138 WorldImpact registerImplementedClass(ClassElement cls,
139 {bool forResolution}) =>
140 const WorldImpact();
134 141
135 /// Called to instruct to the backend register [type] as instantiated on 142 /// Called to instruct to the backend register [type] as instantiated on
136 /// [enqueuer]. 143 /// [enqueuer].
137 void registerInstantiatedType(InterfaceType type) {} 144 void registerInstantiatedType(InterfaceType type) {}
138 145
139 /// Register a runtime type variable bound tests between [typeArgument] and 146 /// Register a runtime type variable bound tests between [typeArgument] and
140 /// [bound]. 147 /// [bound].
141 void registerTypeVariableBoundsSubtypeCheck( 148 void registerTypeVariableBoundsSubtypeCheck(
142 DartType typeArgument, DartType bound) {} 149 DartType typeArgument, DartType bound) {}
143 150
144 /** 151 /// Called to register that an instantiated generic class has a call method.
145 * Call this to register that an instantiated generic class has a call 152 /// Any backend specific [WorldImpact] of this is returned.
146 * method. 153 ///
147 */ 154 /// Note: The [callMethod] is registered even thought it doesn't reference
148 void registerCallMethodWithFreeTypeVariables( 155 /// the type variables.
149 Element callMethod, Enqueuer enqueuer) {} 156 WorldImpact registerCallMethodWithFreeTypeVariables(Element callMethod,
157 {bool forResolution}) =>
158 const WorldImpact();
150 159
151 /// Called to instruct the backend to register that a closure exists for a 160 /// Called to instruct the backend to register that a closure exists for a
152 /// function on an instantiated generic class. 161 /// function on an instantiated generic class. Any backend specific
153 void registerClosureWithFreeTypeVariables( 162 /// [WorldImpact] of this is returned.
154 Element closure, Enqueuer enqueuer) {} 163 WorldImpact registerClosureWithFreeTypeVariables(Element closure,
164 {bool forResolution}) =>
165 const WorldImpact();
155 166
156 /// Call this to register that a member has been closurized. 167 /// Called to register that a member has been closurized. Any backend specific
157 void registerBoundClosure(Enqueuer enqueuer) {} 168 /// [WorldImpact] of this is returned.
169 WorldImpact registerBoundClosure() => const WorldImpact();
158 170
159 /// Call this to register that a static function has been closurized. 171 /// Called to register that a static function has been closurized. Any backend
160 void registerGetOfStaticFunction(Enqueuer enqueuer) {} 172 /// specific [WorldImpact] of this is returned.
173 WorldImpact registerGetOfStaticFunction() => const WorldImpact();
161 174
162 /** 175 /// Called to register that the `runtimeType` property has been accessed. Any
163 * Call this to register that the [:runtimeType:] property has been accessed. 176 /// backend specific [WorldImpact] of this is returned.
164 */ 177 WorldImpact registerRuntimeType() => const WorldImpact();
165 void registerRuntimeType(Enqueuer enqueuer) {}
166 178
167 /// Call this to register a `noSuchMethod` implementation. 179 /// Called to register a `noSuchMethod` implementation.
168 void registerNoSuchMethod(FunctionElement noSuchMethodElement) {} 180 void registerNoSuchMethod(FunctionElement noSuchMethodElement) {}
169 181
170 /// Call this method to enable support for `noSuchMethod`. 182 /// Called to enable support for `noSuchMethod`. Any backend specific
171 void enableNoSuchMethod(Enqueuer enqueuer) {} 183 /// [WorldImpact] of this is returned.
184 WorldImpact enableNoSuchMethod() => const WorldImpact();
172 185
173 /// Returns whether or not `noSuchMethod` support has been enabled. 186 /// Returns whether or not `noSuchMethod` support has been enabled.
174 bool get enabledNoSuchMethod => false; 187 bool get enabledNoSuchMethod => false;
175 188
176 /// Call this method to enable support for isolates. 189 /// Called to enable support for isolates. Any backend specific [WorldImpact]
177 void enableIsolateSupport(Enqueuer enqueuer) {} 190 /// of this is returned.
191 WorldImpact enableIsolateSupport({bool forResolution});
178 192
179 void registerConstSymbol(String name) {} 193 void registerConstSymbol(String name) {}
180 194
181 ClassElement defaultSuperclass(ClassElement element) { 195 ClassElement defaultSuperclass(ClassElement element) {
182 return compiler.coreClasses.objectClass; 196 return compiler.coreClasses.objectClass;
183 } 197 }
184 198
185 bool isInterceptorClass(ClassElement element) => false; 199 bool isInterceptorClass(ClassElement element) => false;
186 200
187 /// Returns `true` if [element] is implemented via typed JavaScript interop. 201 /// Returns `true` if [element] is implemented via typed JavaScript interop.
(...skipping 11 matching lines...) Expand all
199 // TODO(johnniwinther): Remove this when patching is only done by the 213 // TODO(johnniwinther): Remove this when patching is only done by the
200 // JavaScript backend. 214 // JavaScript backend.
201 Uri canonicalUri = library.canonicalUri; 215 Uri canonicalUri = library.canonicalUri;
202 if (canonicalUri == js_backend.BackendHelpers.DART_JS_HELPER || 216 if (canonicalUri == js_backend.BackendHelpers.DART_JS_HELPER ||
203 canonicalUri == js_backend.BackendHelpers.DART_INTERCEPTORS) { 217 canonicalUri == js_backend.BackendHelpers.DART_INTERCEPTORS) {
204 return true; 218 return true;
205 } 219 }
206 return false; 220 return false;
207 } 221 }
208 222
209 void registerStaticUse(Enqueuer enqueuer, Element element) {} 223 /// Called to register that [element] is statically known to be used. Any
224 /// backend specific [WorldImpact] of this is returned.
225 WorldImpact registerStaticUse(Element element, {bool forResolution}) =>
226 const WorldImpact();
210 227
211 /// This method is called immediately after the [LibraryElement] [library] has 228 /// This method is called immediately after the [LibraryElement] [library] has
212 /// been created. 229 /// been created.
213 void onLibraryCreated(LibraryElement library) {} 230 void onLibraryCreated(LibraryElement library) {}
214 231
215 /// This method is called immediately after the [library] and its parts have 232 /// This method is called immediately after the [library] and its parts have
216 /// been scanned. 233 /// been scanned.
217 Future onLibraryScanned(LibraryElement library, LibraryLoader loader) { 234 Future onLibraryScanned(LibraryElement library, LibraryLoader loader) {
218 // TODO(johnniwinther): Move this to [JavaScriptBackend]. 235 // TODO(johnniwinther): Move this to [JavaScriptBackend].
219 if (!compiler.serialization.isDeserialized(library)) { 236 if (!compiler.serialization.isDeserialized(library)) {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 324
308 FunctionElement helperForBadMain() => null; 325 FunctionElement helperForBadMain() => null;
309 326
310 FunctionElement helperForMissingMain() => null; 327 FunctionElement helperForMissingMain() => null;
311 328
312 FunctionElement helperForMainArity() => null; 329 FunctionElement helperForMainArity() => null;
313 330
314 void forgetElement(Element element) {} 331 void forgetElement(Element element) {}
315 332
316 /// Computes the [WorldImpact] of calling [mainMethod] as the entry point. 333 /// Computes the [WorldImpact] of calling [mainMethod] as the entry point.
317 WorldImpact computeMainImpact(Enqueuer enqueuer, MethodElement mainMethod) {} 334 WorldImpact computeMainImpact(MethodElement mainMethod,
335 {bool forResolution}) =>
336 const WorldImpact();
318 337
319 /// Returns the location of the patch-file associated with [libraryName] 338 /// Returns the location of the patch-file associated with [libraryName]
320 /// resolved from [plaformConfigUri]. 339 /// resolved from [plaformConfigUri].
321 /// 340 ///
322 /// Returns null if there is none. 341 /// Returns null if there is none.
323 Uri resolvePatchUri(String libraryName, Uri plaformConfigUri); 342 Uri resolvePatchUri(String libraryName, Uri plaformConfigUri);
324 343
325 /// Creates an impact strategy to use for compilation. 344 /// Creates an impact strategy to use for compilation.
326 ImpactStrategy createImpactStrategy( 345 ImpactStrategy createImpactStrategy(
327 {bool supportDeferredLoad: true, 346 {bool supportDeferredLoad: true,
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 ClassElement get typeImplementation; 414 ClassElement get typeImplementation;
396 ClassElement get boolImplementation; 415 ClassElement get boolImplementation;
397 ClassElement get nullImplementation; 416 ClassElement get nullImplementation;
398 ClassElement get uint32Implementation; 417 ClassElement get uint32Implementation;
399 ClassElement get uint31Implementation; 418 ClassElement get uint31Implementation;
400 ClassElement get positiveIntImplementation; 419 ClassElement get positiveIntImplementation;
401 ClassElement get syncStarIterableImplementation; 420 ClassElement get syncStarIterableImplementation;
402 ClassElement get asyncFutureImplementation; 421 ClassElement get asyncFutureImplementation;
403 ClassElement get asyncStarStreamImplementation; 422 ClassElement get asyncStarStreamImplementation;
404 } 423 }
OLDNEW
« no previous file with comments | « no previous file | pkg/compiler/lib/src/common/codegen.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698