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

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

Issue 2961563003: Hopefully the last bit of restructuring between closture classes and loop boxing, etc. (Closed)
Patch Set: . 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart ('k') | pkg/compiler/lib/src/ssa/loop_handler.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 c9ece7cba30a9a0a188adb88bfa86e01a58c1701..6c3bb870d8e88a70c69e9b2b79279e12bae32148 100644
--- a/pkg/compiler/lib/src/ssa/locals_handler.dart
+++ b/pkg/compiler/lib/src/ssa/locals_handler.dart
@@ -136,7 +136,7 @@ class LocalsHandler {
/// If the scope (function or loop) [node] has captured variables then this
/// method creates a box and sets up the redirections.
- void enterScope(ClosureAnalysisInfo closureInfo,
+ void enterScope(ClosureScope closureInfo,
{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.
@@ -154,7 +154,7 @@ class LocalsHandler {
directLocals[closureInfo.context] = 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.
- closureInfo.forEachCapturedVariable((_from, _to) {
+ closureInfo.forEachBoxedVariable((_from, _to) {
LocalVariableElement from = _from;
BoxFieldElement to = _to;
// The [from] can only be a parameter for function-scopes and not
@@ -178,19 +178,20 @@ 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(Local boxElement, List<Local> toBeCopiedElements) {
+ void updateCaptureBox(LoopClosureScope loopInfo) {
+ Local boxElement = loopInfo.context;
// Create a new box and copy over the values from the old box into the
// new one.
HInstruction oldBox = readLocal(boxElement);
HInstruction newBox = createBox();
- for (Local boxedVariable in toBeCopiedElements) {
+ loopInfo.forEachBoxedVariable((Local boxedVariable, _) {
// [readLocal] uses the [boxElement] to find its box. By replacing it
// behind its back we can still get to the old values.
updateLocal(boxElement, oldBox);
HInstruction oldValue = readLocal(boxedVariable);
updateLocal(boxElement, newBox);
updateLocal(boxedVariable, oldValue);
- }
+ });
updateLocal(boxElement, newBox);
}
@@ -198,7 +199,7 @@ class LocalsHandler {
///
/// Invariant: [function] must be an implementation element.
void startFunction(MemberEntity element, ScopeInfo scopeInfo,
- ClosureAnalysisInfo scopeData, Map<Local, TypeMask> parameters,
+ ClosureScope scopeData, Map<Local, TypeMask> parameters,
{bool isGenerativeConstructorBody}) {
assert(!(element is MemberElement && !element.isImplementation),
failedAt(element));
@@ -206,7 +207,7 @@ class LocalsHandler {
parameters.forEach((Local local, TypeMask typeMask) {
if (isGenerativeConstructorBody) {
- if (scopeData.isCaptured(local)) {
+ if (scopeData.isBoxed(local)) {
// The parameter will be a field in the box passed as the
// last parameter. So no need to have it.
return;
@@ -476,7 +477,7 @@ class LocalsHandler {
/// <updates>
/// goto loop-entry;
/// loop-exit:
- void startLoop(LoopClosureRepresentationInfo loopInfo) {
+ void startLoop(LoopClosureScope loopInfo) {
if (loopInfo.hasBoxedVariables) {
// If there are boxed loop variables then we set up the box and
// redirections already now. This way the initializer can write its
@@ -509,7 +510,7 @@ class LocalsHandler {
});
}
- void enterLoopBody(LoopClosureRepresentationInfo loopInfo) {
+ void enterLoopBody(LoopClosureScope loopInfo) {
// 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 (!loopInfo.hasBoxedVariables) {
@@ -517,14 +518,14 @@ class LocalsHandler {
}
}
- void enterLoopUpdates(LoopClosureRepresentationInfo loopInfo) {
+ void enterLoopUpdates(LoopClosureScope loopInfo) {
// If there are declared boxed loop variables then the updates might have
// access to the box and we must switch to a new box before executing the
// updates.
// In all other cases a new box will be created when entering the body of
// the next iteration.
if (loopInfo.hasBoxedVariables) {
- updateCaptureBox(loopInfo.context, loopInfo.boxedVariables);
+ updateCaptureBox(loopInfo);
}
}
« no previous file with comments | « pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart ('k') | pkg/compiler/lib/src/ssa/loop_handler.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698