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

Unified Diff: pkg/compiler/lib/src/ssa/locals_handler.dart

Issue 2915523003: Create new interface instead of ClosureClassMap for variable usage information that is not Element-…
Patch Set: . Created 3 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: pkg/compiler/lib/src/ssa/locals_handler.dart
diff --git a/pkg/compiler/lib/src/ssa/locals_handler.dart b/pkg/compiler/lib/src/ssa/locals_handler.dart
index c521f9cf4e88c663ca2834d80fa544c64cac3600..5bacc12de7d9db656e0077b5830b8848751a877c 100644
--- a/pkg/compiler/lib/src/ssa/locals_handler.dart
+++ b/pkg/compiler/lib/src/ssa/locals_handler.dart
@@ -139,19 +139,24 @@ class LocalsHandler {
void enterScope(ast.Node node, {bool forGenerativeConstructorBody: false}) {
// See if any variable in the top-scope of the function is captured. If yes
// we need to create a box-object.
- ClosureScope scopeData = closureData.capturingScopes[node];
- if (scopeData == null) return;
+ CapturedVariableInfo scopeData =
+ _closureToClassMapper.getCapturedVariableInfo(node);
+ if (!scopeData.hasCapturedVariables()) return;
+ Local localExecutableContext =
+ _closureToClassMapper.getExecutableContext(node);
+
HInstruction box;
// The scope has captured variables.
if (forGenerativeConstructorBody) {
// The box is passed as a parameter to a generative
// constructor body.
- box = builder.addParameter(scopeData.boxElement, commonMasks.nonNullType);
+ box =
+ builder.addParameter(localExecutableContext, commonMasks.nonNullType);
} else {
box = createBox();
}
// Add the box to the known locals.
- directLocals[scopeData.boxElement] = box;
+ directLocals[localExecutableContext] = box;
// Make sure that accesses to the boxed locals go into the box. We also
// need to make sure that parameters are copied into the box if necessary.
scopeData.forEachCapturedVariable(
@@ -178,7 +183,7 @@ class LocalsHandler {
/// Replaces the current box with a new box and copies over the given list
/// of elements from the old box into the new box.
void updateCaptureBox(
- BoxLocal boxElement, List<LocalVariableElement> toBeCopiedElements) {
+ Local boxElement, List<LocalVariableElement> toBeCopiedElements) {
// Create a new box and copy over the values from the old box into the
// new one.
HInstruction oldBox = readLocal(boxElement);
@@ -206,11 +211,11 @@ class LocalsHandler {
if (element is MethodElement) {
MethodElement functionElement = element;
FunctionSignature params = functionElement.functionSignature;
- ClosureScope scopeData = closureData.capturingScopes[node];
params.orderedForEachParameter((ParameterElement parameterElement) {
if (element.isGenerativeConstructorBody) {
- if (scopeData != null &&
- scopeData.isCapturedVariable(parameterElement)) {
+ if (_closureToClassMapper
+ .getCapturedVariableInfo(node)
+ .isCaptured(parameterElement)) {
// The parameter will be a field in the box passed as the
// last parameter. So no need to have it.
return;
@@ -477,8 +482,8 @@ class LocalsHandler {
/// goto loop-entry;
/// loop-exit:
void startLoop(ast.Node node) {
- ClosureScope scopeData = closureData.capturingScopes[node];
- if (scopeData == null) return;
+ CapturedVariableInfo scopeData =
+ _closureToClassMapper.getCapturedVariableInfo(node);
if (scopeData.hasBoxedLoopVariables()) {
// If there are boxed loop variables then we set up the box and
// redirections already now. This way the initializer can write its
@@ -512,8 +517,8 @@ class LocalsHandler {
}
void enterLoopBody(ast.Node node) {
- ClosureScope scopeData = closureData.capturingScopes[node];
- if (scopeData == null) return;
+ CapturedVariableInfo scopeData =
+ _closureToClassMapper.getCapturedVariableInfo(node);
// If there are no declared boxed loop variables then we did not create the
// box before the initializer and we have to create the box now.
if (!scopeData.hasBoxedLoopVariables()) {
@@ -527,10 +532,11 @@ class LocalsHandler {
// updates.
// In all other cases a new box will be created when entering the body of
// the next iteration.
- ClosureScope scopeData = closureData.capturingScopes[node];
- if (scopeData == null) return;
+ CapturedVariableInfo scopeData =
+ _closureToClassMapper.getCapturedVariableInfo(node);
if (scopeData.hasBoxedLoopVariables()) {
- updateCaptureBox(scopeData.boxElement, scopeData.boxedLoopVariables);
+ updateCaptureBox(_closureToClassMapper.getExecutableContext(node),
+ scopeData.boxedLoopVariables);
}
}
« pkg/compiler/lib/src/ssa/builder_kernel.dart ('K') | « pkg/compiler/lib/src/ssa/builder_kernel.dart ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698