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

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

Issue 1374243002: Remove Registry arguments from Enqueuer. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comment. Created 5 years, 2 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 part of js_backend; 5 part of js_backend;
6 6
7 const VERBOSE_OPTIMIZER_HINTS = false; 7 const VERBOSE_OPTIMIZER_HINTS = false;
8 8
9 class JavaScriptItemCompilationContext extends ItemCompilationContext { 9 class JavaScriptItemCompilationContext extends ItemCompilationContext {
10 final Set<HInstruction> boundsChecked = new Set<HInstruction>(); 10 final Set<HInstruction> boundsChecked = new Set<HInstruction>();
(...skipping 1153 matching lines...) Expand 10 before | Expand all | Expand 10 after
1164 // we make sure they are always generated. 1164 // we make sure they are always generated.
1165 enqueue(enqueuer, findHelper('isJsIndexable'), registry); 1165 enqueue(enqueuer, findHelper('isJsIndexable'), registry);
1166 } 1166 }
1167 1167
1168 customElementsAnalysis.registerInstantiatedClass(cls, enqueuer); 1168 customElementsAnalysis.registerInstantiatedClass(cls, enqueuer);
1169 if (!enqueuer.isResolutionQueue) { 1169 if (!enqueuer.isResolutionQueue) {
1170 lookupMapAnalysis.registerInstantiatedClass(cls); 1170 lookupMapAnalysis.registerInstantiatedClass(cls);
1171 } 1171 }
1172 } 1172 }
1173 1173
1174 void registerInstantiatedType(InterfaceType type, Registry registry) { 1174 void registerInstantiatedType(InterfaceType type,
1175 Enqueuer enqueuer,
1176 Registry registry,
1177 {bool mirrorUsage: false}) {
1175 lookupMapAnalysis.registerInstantiatedType(type, registry); 1178 lookupMapAnalysis.registerInstantiatedType(type, registry);
1179 super.registerInstantiatedType(
1180 type, enqueuer, registry, mirrorUsage: mirrorUsage);
1176 } 1181 }
1177 1182
1178 void registerUseInterceptor(Enqueuer enqueuer) { 1183 void registerUseInterceptor(Enqueuer enqueuer) {
1179 assert(!enqueuer.isResolutionQueue); 1184 assert(!enqueuer.isResolutionQueue);
1180 if (!enqueuer.nativeEnqueuer.hasInstantiatedNativeClasses()) return; 1185 if (!enqueuer.nativeEnqueuer.hasInstantiatedNativeClasses()) return;
1181 Registry registry = compiler.globalDependencies; 1186 Registry registry = compiler.globalDependencies;
1182 enqueue(enqueuer, getNativeInterceptorMethod, registry); 1187 enqueue(enqueuer, getNativeInterceptorMethod, registry);
1183 enqueueClass(enqueuer, jsPlainJavaScriptObjectClass, registry); 1188 enqueueClass(enqueuer, jsPlainJavaScriptObjectClass, registry);
1184 needToInitializeIsolateAffinityTag = true; 1189 needToInitializeIsolateAffinityTag = true;
1185 needToInitializeDispatchProperty = true; 1190 needToInitializeDispatchProperty = true;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
1240 } 1245 }
1241 } 1246 }
1242 1247
1243 void registerClosureWithFreeTypeVariables( 1248 void registerClosureWithFreeTypeVariables(
1244 Element closure, 1249 Element closure,
1245 Enqueuer enqueuer, 1250 Enqueuer enqueuer,
1246 Registry registry) { 1251 Registry registry) {
1247 if (enqueuer.isResolutionQueue || methodNeedsRti(closure)) { 1252 if (enqueuer.isResolutionQueue || methodNeedsRti(closure)) {
1248 registerComputeSignature(enqueuer, registry); 1253 registerComputeSignature(enqueuer, registry);
1249 } 1254 }
1255 super.registerClosureWithFreeTypeVariables(closure, enqueuer, registry);
1250 } 1256 }
1251 1257
1252 /// Call during codegen if an instance of [closure] is being created. 1258 /// Call during codegen if an instance of [closure] is being created.
1253 void registerInstantiatedClosure(LocalFunctionElement closure, 1259 void registerInstantiatedClosure(LocalFunctionElement closure,
1254 CodegenRegistry registry) { 1260 CodegenRegistry registry) {
1255 if (methodNeedsRti(closure)) { 1261 if (methodNeedsRti(closure)) {
1256 registerComputeSignature(compiler.enqueuer.codegen, registry); 1262 registerComputeSignature(compiler.enqueuer.codegen, registry);
1257 } 1263 }
1258 } 1264 }
1259 1265
1260 void registerBoundClosure(Enqueuer enqueuer) { 1266 void registerBoundClosure(Enqueuer enqueuer) {
1261 boundClosureClass.ensureResolved(compiler); 1267 boundClosureClass.ensureResolved(compiler);
1262 enqueuer.registerInstantiatedType( 1268 registerInstantiatedType(
1263 boundClosureClass.rawType, 1269 boundClosureClass.rawType,
1270 enqueuer,
1264 // Precise dependency is not important here. 1271 // Precise dependency is not important here.
1265 compiler.globalDependencies); 1272 compiler.globalDependencies);
1266 } 1273 }
1267 1274
1268 void registerGetOfStaticFunction(Enqueuer enqueuer) { 1275 void registerGetOfStaticFunction(Enqueuer enqueuer) {
1269 closureClass.ensureResolved(compiler); 1276 closureClass.ensureResolved(compiler);
1270 enqueuer.registerInstantiatedType( 1277 registerInstantiatedType(
1271 closureClass.rawType, compiler.globalDependencies); 1278 closureClass.rawType,
1279 enqueuer,
1280 compiler.globalDependencies);
1272 } 1281 }
1273 1282
1274 void registerComputeSignature(Enqueuer enqueuer, Registry registry) { 1283 void registerComputeSignature(Enqueuer enqueuer, Registry registry) {
1275 // Calls to [:computeSignature:] are generated by the emitter and we 1284 // Calls to [:computeSignature:] are generated by the emitter and we
1276 // therefore need to enqueue the used elements in the codegen enqueuer as 1285 // therefore need to enqueue the used elements in the codegen enqueuer as
1277 // well as in the resolution enqueuer. 1286 // well as in the resolution enqueuer.
1278 enqueue(enqueuer, getSetRuntimeTypeInfo(), registry); 1287 enqueue(enqueuer, getSetRuntimeTypeInfo(), registry);
1279 enqueue(enqueuer, getGetRuntimeTypeInfo(), registry); 1288 enqueue(enqueuer, getGetRuntimeTypeInfo(), registry);
1280 enqueue(enqueuer, getComputeSignature(), registry); 1289 enqueue(enqueuer, getComputeSignature(), registry);
1281 enqueue(enqueuer, getGetRuntimeTypeArguments(), registry); 1290 enqueue(enqueuer, getGetRuntimeTypeArguments(), registry);
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
1447 /// 1456 ///
1448 /// This method calls [registerBackendUse]. 1457 /// This method calls [registerBackendUse].
1449 void enqueueClass(Enqueuer enqueuer, ClassElement cls, Registry registry) { 1458 void enqueueClass(Enqueuer enqueuer, ClassElement cls, Registry registry) {
1450 if (cls == null) return; 1459 if (cls == null) return;
1451 registerBackendUse(cls); 1460 registerBackendUse(cls);
1452 helpersUsed.add(cls.declaration); 1461 helpersUsed.add(cls.declaration);
1453 if (cls.declaration != cls.implementation) { 1462 if (cls.declaration != cls.implementation) {
1454 helpersUsed.add(cls.implementation); 1463 helpersUsed.add(cls.implementation);
1455 } 1464 }
1456 cls.ensureResolved(compiler); 1465 cls.ensureResolved(compiler);
1457 enqueuer.registerInstantiatedType(cls.rawType, registry); 1466 registerInstantiatedType(cls.rawType, enqueuer, registry);
1458 } 1467 }
1459 1468
1460 WorldImpact codegen(CodegenWorkItem work) { 1469 WorldImpact codegen(CodegenWorkItem work) {
1461 Element element = work.element; 1470 Element element = work.element;
1462 if (compiler.elementHasCompileTimeError(element)) { 1471 if (compiler.elementHasCompileTimeError(element)) {
1463 generatedCode[element] = jsAst.js( 1472 generatedCode[element] = jsAst.js(
1464 "function () { throw new Error('Compile time error in $element') }"); 1473 "function () { throw new Error('Compile time error in $element') }");
1465 return const WorldImpact(); 1474 return const WorldImpact();
1466 } 1475 }
1467 var kind = element.kind; 1476 var kind = element.kind;
(...skipping 1284 matching lines...) Expand 10 before | Expand all | Expand 10 after
2752 Enqueuer enqueuer, 2761 Enqueuer enqueuer,
2753 Registry registry) { 2762 Registry registry) {
2754 if (element.asyncMarker == AsyncMarker.ASYNC) { 2763 if (element.asyncMarker == AsyncMarker.ASYNC) {
2755 enqueue(enqueuer, getAsyncHelper(), registry); 2764 enqueue(enqueuer, getAsyncHelper(), registry);
2756 enqueue(enqueuer, getSyncCompleterConstructor(), registry); 2765 enqueue(enqueuer, getSyncCompleterConstructor(), registry);
2757 enqueue(enqueuer, getStreamIteratorConstructor(), registry); 2766 enqueue(enqueuer, getStreamIteratorConstructor(), registry);
2758 enqueue(enqueuer, getWrapBody(), registry); 2767 enqueue(enqueuer, getWrapBody(), registry);
2759 } else if (element.asyncMarker == AsyncMarker.SYNC_STAR) { 2768 } else if (element.asyncMarker == AsyncMarker.SYNC_STAR) {
2760 ClassElement clsSyncStarIterable = getSyncStarIterable(); 2769 ClassElement clsSyncStarIterable = getSyncStarIterable();
2761 clsSyncStarIterable.ensureResolved(compiler); 2770 clsSyncStarIterable.ensureResolved(compiler);
2762 enqueuer.registerInstantiatedType(clsSyncStarIterable.rawType, registry); 2771 registerInstantiatedType(clsSyncStarIterable.rawType, enqueuer, registry);
2763 enqueue(enqueuer, getSyncStarIterableConstructor(), registry); 2772 enqueue(enqueuer, getSyncStarIterableConstructor(), registry);
2764 enqueue(enqueuer, getEndOfIteration(), registry); 2773 enqueue(enqueuer, getEndOfIteration(), registry);
2765 enqueue(enqueuer, getYieldStar(), registry); 2774 enqueue(enqueuer, getYieldStar(), registry);
2766 enqueue(enqueuer, getSyncStarUncaughtError(), registry); 2775 enqueue(enqueuer, getSyncStarUncaughtError(), registry);
2767 } else if (element.asyncMarker == AsyncMarker.ASYNC_STAR) { 2776 } else if (element.asyncMarker == AsyncMarker.ASYNC_STAR) {
2768 ClassElement clsASyncStarController = getASyncStarController(); 2777 ClassElement clsASyncStarController = getASyncStarController();
2769 clsASyncStarController.ensureResolved(compiler); 2778 clsASyncStarController.ensureResolved(compiler);
2770 enqueuer.registerInstantiatedType( 2779 registerInstantiatedType(
2771 clsASyncStarController.rawType, registry); 2780 clsASyncStarController.rawType, enqueuer, registry);
2772 enqueue(enqueuer, getAsyncStarHelper(), registry); 2781 enqueue(enqueuer, getAsyncStarHelper(), registry);
2773 enqueue(enqueuer, getStreamOfController(), registry); 2782 enqueue(enqueuer, getStreamOfController(), registry);
2774 enqueue(enqueuer, getYieldSingle(), registry); 2783 enqueue(enqueuer, getYieldSingle(), registry);
2775 enqueue(enqueuer, getYieldStar(), registry); 2784 enqueue(enqueuer, getYieldStar(), registry);
2776 enqueue(enqueuer, getASyncStarControllerConstructor(), registry); 2785 enqueue(enqueuer, getASyncStarControllerConstructor(), registry);
2777 enqueue(enqueuer, getStreamIteratorConstructor(), registry); 2786 enqueue(enqueuer, getStreamIteratorConstructor(), registry);
2778 enqueue(enqueuer, getWrapBody(), registry); 2787 enqueue(enqueuer, getWrapBody(), registry);
2779 } 2788 }
2780 } 2789 }
2781 2790
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
3192 } 3201 }
3193 } 3202 }
3194 3203
3195 /// Records that [constant] is used by the element behind [registry]. 3204 /// Records that [constant] is used by the element behind [registry].
3196 class Dependency { 3205 class Dependency {
3197 final ConstantValue constant; 3206 final ConstantValue constant;
3198 final Element annotatedElement; 3207 final Element annotatedElement;
3199 3208
3200 const Dependency(this.constant, this.annotatedElement); 3209 const Dependency(this.constant, this.annotatedElement);
3201 } 3210 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/enqueue.dart ('k') | pkg/compiler/lib/src/js_backend/type_variable_handler.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698