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

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

Issue 2954463002: Refactoring to prepare for kernel based jump targets (Closed)
Patch Set: Updated cf. comments 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/builder.dart ('k') | pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/compiler/lib/src/ssa/builder_kernel.dart
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index 3b99d41a9118892dca5ed2581417a263c1eec67b..a871c8cfe208e149918c145edecebf0cd2ea543d 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -609,7 +609,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
ClosureRepresentationInfo newClosureData =
closureDataLookup.getClosureRepresentationInfo(astElement);
if (astElement is ConstructorElement) {
- // TODO(johnniwinther): Support constructor (body) entities.
+ // TODO(redemption): Support constructor (body) entities.
ResolvedAst resolvedAst = astElement.resolvedAst;
localsHandler.closureData = newClosureData;
if (resolvedAst.kind == ResolvedAstKind.PARSED) {
@@ -659,7 +659,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
visitThen: () {
closeAndGotoExit(new HReturn(
graph.addConstantBool(false, closedWorld),
- // TODO(johnniwinther): Provider source information like
+ // TODO(redemption): Provider source information like
// `sourceInformationBuilder.buildImplicitReturn(method)`.
null));
},
@@ -911,6 +911,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
forStatement,
localsMap.getClosureRepresentationInfoForLoop(
closureDataLookup, forStatement),
+ localsMap.getJumpTargetForFor(forStatement),
buildInitializer,
buildCondition,
buildUpdate,
@@ -1040,6 +1041,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
forInStatement,
localsMap.getClosureRepresentationInfoForLoop(
closureDataLookup, forInStatement),
+ localsMap.getJumpTargetForForIn(forInStatement),
buildInitializer,
buildCondition,
buildUpdate,
@@ -1091,6 +1093,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
forInStatement,
localsMap.getClosureRepresentationInfoForLoop(
closureDataLookup, forInStatement),
+ localsMap.getJumpTargetForForIn(forInStatement),
buildInitializer,
buildCondition,
() {},
@@ -1138,6 +1141,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
forInStatement,
localsMap.getClosureRepresentationInfoForLoop(
closureDataLookup, forInStatement),
+ localsMap.getJumpTargetForForIn(forInStatement),
buildInitializer,
buildCondition,
buildUpdate,
@@ -1189,6 +1193,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
whileStatement,
localsMap.getClosureRepresentationInfoForLoop(
closureDataLookup, whileStatement),
+ localsMap.getJumpTargetForWhile(whileStatement),
() {},
buildCondition,
() {}, () {
@@ -1204,11 +1209,11 @@ class KernelSsaGraphBuilder extends ir.Visitor
LoopClosureRepresentationInfo loopClosureInfo = localsMap
.getClosureRepresentationInfoForLoop(closureDataLookup, doStatement);
localsHandler.startLoop(loopClosureInfo);
- JumpHandler jumpHandler = loopHandler.beginLoopHeader(doStatement);
+ JumpTarget target = localsMap.getJumpTargetForDo(doStatement);
+ JumpHandler jumpHandler = loopHandler.beginLoopHeader(doStatement, target);
HLoopInformation loopInfo = current.loopInformation;
HBasicBlock loopEntryBlock = current;
HBasicBlock bodyEntryBlock = current;
- JumpTarget target = localsMap.getJumpTarget(doStatement);
bool hasContinues = target != null && target.isContinueTarget;
if (hasContinues) {
// Add extra block to hang labels on.
@@ -1304,7 +1309,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
null,
loopEntryBlock.loopInformation.target,
loopEntryBlock.loopInformation.labels,
- // TODO(johnniwinther): Provide source information like:
+ // TODO(redemption): Provide source information like:
// sourceInformationBuilder.buildLoop(astAdapter.getNode(doStatement))
null);
loopEntryBlock.setBlockFlow(loopBlockInfo, current);
@@ -1322,9 +1327,9 @@ class KernelSsaGraphBuilder extends ir.Visitor
// Since the body of the loop has a break, we attach a synthesized label
// to the body.
SubGraph bodyGraph = new SubGraph(bodyEntryBlock, bodyExitBlock);
- JumpTarget target = localsMap.getJumpTarget(doStatement);
- LabelDefinition label = target.addLabel(null, 'loop');
- label.setBreakTarget();
+ JumpTarget target = localsMap.getJumpTargetForDo(doStatement);
+ LabelDefinition label =
+ target.addLabel(null, 'loop', isBreakTarget: true);
HLabeledBlockInformation info = new HLabeledBlockInformation(
new HSubGraphBlockInformation(bodyGraph), <LabelDefinition>[label]);
loopEntryBlock.setBlockFlow(info, current);
@@ -1446,8 +1451,8 @@ class KernelSsaGraphBuilder extends ir.Visitor
/// [isLoopJump] is true when the jump handler is for a loop. This is used
/// to distinguish the synthesized loop created for a switch statement with
/// continue statements from simple switch statements.
- JumpHandler createJumpHandler(ir.TreeNode node, {bool isLoopJump: false}) {
- JumpTarget target = localsMap.getJumpTarget(node);
+ JumpHandler createJumpHandler(ir.TreeNode node, JumpTarget target,
+ {bool isLoopJump: false}) {
if (target == null) {
// No breaks or continues to this node.
return new NullJumpHandler(reporter);
@@ -1463,7 +1468,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
void visitBreakStatement(ir.BreakStatement breakStatement) {
assert(!isAborted());
handleInTryStatement();
- JumpTarget target = localsMap.getJumpTarget(breakStatement.target);
+ JumpTarget target = localsMap.getJumpTargetForBreak(breakStatement);
assert(target != null);
JumpHandler handler = jumpTargets[target];
assert(handler != null);
@@ -1486,7 +1491,8 @@ class KernelSsaGraphBuilder extends ir.Visitor
body.accept(this);
return;
}
- JumpHandler handler = createJumpHandler(labeledStatement);
+ JumpHandler handler = createJumpHandler(
+ labeledStatement, localsMap.getJumpTargetForLabel(labeledStatement));
LocalsHandler beforeLocals = new LocalsHandler.from(localsHandler);
@@ -1536,7 +1542,8 @@ class KernelSsaGraphBuilder extends ir.Visitor
void visitContinueSwitchStatement(
ir.ContinueSwitchStatement switchStatement) {
handleInTryStatement();
- JumpTarget target = localsMap.getJumpTarget(switchStatement.target);
+ JumpTarget target =
+ localsMap.getJumpTargetForContinueSwitch(switchStatement);
assert(target != null);
JumpHandler handler = jumpTargets[target];
assert(handler != null);
@@ -1563,7 +1570,8 @@ class KernelSsaGraphBuilder extends ir.Visitor
switchIndex++;
}
- JumpHandler jumpHandler = createJumpHandler(switchStatement);
+ JumpHandler jumpHandler = createJumpHandler(
+ switchStatement, localsMap.getJumpTargetForSwitch(switchStatement));
if (!hasContinue) {
// If the switch statement has no switch cases targeted by continue
// statements we encode the switch statement directly.
@@ -1656,7 +1664,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
// This is because JS does not have this same "continue label" semantics so
// we encode it in the form of a state machine.
- JumpTarget switchTarget = localsMap.getJumpTarget(switchStatement);
+ JumpTarget switchTarget = localsMap.getJumpTargetForSwitch(switchStatement);
localsHandler.updateLocal(switchTarget, graph.addConstantNull(closedWorld));
var switchCases = switchStatement.cases;
@@ -1725,6 +1733,7 @@ class KernelSsaGraphBuilder extends ir.Visitor
switchStatement,
localsMap.getClosureRepresentationInfoForLoop(
closureDataLookup, switchStatement),
+ switchTarget,
() {},
buildCondition,
() {},
« no previous file with comments | « pkg/compiler/lib/src/ssa/builder.dart ('k') | pkg/compiler/lib/src/ssa/kernel_ast_adapter.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698