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

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

Issue 2938203003: Compute KernelClosureRepresentationInfo.variableIsUsedInTryOrSync (Closed)
Patch Set: Merge KernelClosureConversionTask and KernelClosureDataLookup Created 3 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
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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 simple_types_inferrer; 5 library simple_types_inferrer;
6 6
7 import '../closure.dart' show ClosureRepresentationInfo; 7 import '../closure.dart' show ClosureRepresentationInfo;
8 import '../common.dart'; 8 import '../common.dart';
9 import '../common/names.dart' show Identifiers, Selectors; 9 import '../common/names.dart' show Identifiers, Selectors;
10 import '../compiler.dart' show Compiler; 10 import '../compiler.dart' show Compiler;
(...skipping 897 matching lines...) Expand 10 before | Expand all | Expand 10 after
908 if (initializer == null) { 908 if (initializer == null) {
909 // Eagerly bailout, because computing the closure data only 909 // Eagerly bailout, because computing the closure data only
910 // works for functions and field assignments. 910 // works for functions and field assignments.
911 return types.nullType; 911 return types.nullType;
912 } 912 }
913 } 913 }
914 // Update the locals that are boxed in [locals]. These locals will 914 // Update the locals that are boxed in [locals]. These locals will
915 // be handled specially, in that we are computing their LUB at 915 // be handled specially, in that we are computing their LUB at
916 // each update, and reading them yields the type that was found in a 916 // each update, and reading them yields the type that was found in a
917 // previous analysis of [outermostElement]. 917 // previous analysis of [outermostElement].
918 ClosureRepresentationInfo closureData = compiler.closureDataLookup 918 ClosureRepresentationInfo closureData = compiler
919 .backendStrategy.closureDataLookup
919 .getClosureRepresentationInfo(analyzedElement); 920 .getClosureRepresentationInfo(analyzedElement);
920 closureData.forEachCapturedVariable((variable, field) { 921 closureData.forEachCapturedVariable((variable, field) {
921 locals.setCaptured(variable, field); 922 locals.setCaptured(variable, field);
922 }); 923 });
923 closureData.forEachBoxedVariable((variable, field) { 924 closureData.forEachBoxedVariable((variable, field) {
924 locals.setCapturedAndBoxed(variable, field); 925 locals.setCapturedAndBoxed(variable, field);
925 }); 926 });
926 if (analyzedElement.isField) { 927 if (analyzedElement.isField) {
927 return visit(initializer); 928 return visit(initializer);
928 } 929 }
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
1095 LocalsHandler closureLocals = 1096 LocalsHandler closureLocals =
1096 new LocalsHandler.from(locals, node, useOtherTryBlock: false); 1097 new LocalsHandler.from(locals, node, useOtherTryBlock: false);
1097 ElementGraphBuilder visitor = new ElementGraphBuilder( 1098 ElementGraphBuilder visitor = new ElementGraphBuilder(
1098 element, element.resolvedAst, compiler, inferrer, closureLocals); 1099 element, element.resolvedAst, compiler, inferrer, closureLocals);
1099 visitor.run(); 1100 visitor.run();
1100 inferrer.recordReturnType(element, visitor.returnType); 1101 inferrer.recordReturnType(element, visitor.returnType);
1101 1102
1102 // Record the types of captured non-boxed variables. Types of 1103 // Record the types of captured non-boxed variables. Types of
1103 // these variables may already be there, because of an analysis of 1104 // these variables may already be there, because of an analysis of
1104 // a previous closure. 1105 // a previous closure.
1105 ClosureRepresentationInfo nestedClosureData = 1106 ClosureRepresentationInfo nestedClosureData = compiler
1106 compiler.closureDataLookup.getClosureRepresentationInfo(element); 1107 .backendStrategy.closureDataLookup
1108 .getClosureRepresentationInfo(element);
1107 nestedClosureData.forEachCapturedVariable((variable, field) { 1109 nestedClosureData.forEachCapturedVariable((variable, field) {
1108 if (!nestedClosureData.isVariableBoxed(variable)) { 1110 if (!nestedClosureData.isVariableBoxed(variable)) {
1109 if (variable == nestedClosureData.thisLocal) { 1111 if (variable == nestedClosureData.thisLocal) {
1110 inferrer.recordType(field, thisType); 1112 inferrer.recordType(field, thisType);
1111 } 1113 }
1112 // The type is null for type parameters. 1114 // The type is null for type parameters.
1113 if (locals.locals[variable] == null) return; 1115 if (locals.locals[variable] == null) return;
1114 inferrer.recordType(field, locals.locals[variable]); 1116 inferrer.recordType(field, locals.locals[variable]);
1115 } 1117 }
1116 capturedVariables.add(variable); 1118 capturedVariables.add(variable);
(...skipping 1840 matching lines...) Expand 10 before | Expand all | Expand 10 after
2957 Selector moveNextSelector = Selectors.moveNext; 2959 Selector moveNextSelector = Selectors.moveNext;
2958 TypeMask moveNextMask = inTreeData.typeOfIteratorMoveNext(node); 2960 TypeMask moveNextMask = inTreeData.typeOfIteratorMoveNext(node);
2959 2961
2960 TypeInformation iteratorType = handleDynamicSend(node, iteratorSelector, 2962 TypeInformation iteratorType = handleDynamicSend(node, iteratorSelector,
2961 iteratorMask, expressionType, new ArgumentsTypes.empty()); 2963 iteratorMask, expressionType, new ArgumentsTypes.empty());
2962 2964
2963 return handleForInLoop(node, iteratorType, currentSelector, currentMask, 2965 return handleForInLoop(node, iteratorType, currentSelector, currentMask,
2964 moveNextSelector, moveNextMask); 2966 moveNextSelector, moveNextMask);
2965 } 2967 }
2966 } 2968 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698