From 7af622e886271f57cedf581a472a02924e246f65 Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Mon, 10 Aug 2015 14:52:58 +0200 Subject: [PATCH] provide RSyntaxNode for WhileRepeatingNode and ForRepeatingNode --- .../com/oracle/truffle/r/nodes/control/ForNode.java | 13 +++++++++++-- .../oracle/truffle/r/nodes/control/WhileNode.java | 13 +++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ForNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ForNode.java index e4551cd325..718773b5c3 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ForNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ForNode.java @@ -54,7 +54,7 @@ public final class ForNode extends AbstractLoopNode implements VisibilityControl this.writeIndexNode = WriteVariableNode.createAnonymous(indexName, null, Mode.REGULAR); this.writeRangeNode = WriteVariableNode.createAnonymous(rangeName, range, Mode.REGULAR); this.writeLengthNode = WriteVariableNode.createAnonymous(lengthName, RLengthNodeGen.create(ReadVariableNode.create(rangeName, false)), Mode.REGULAR); - this.loopNode = Truffle.getRuntime().createLoopNode(new ForRepeatingNode(cvar, body, indexName, lengthName, rangeName)); + this.loopNode = Truffle.getRuntime().createLoopNode(new ForRepeatingNode(this, cvar, body, indexName, lengthName, rangeName)); } public static ForNode create(WriteVariableNode cvar, RSyntaxNode range, RSyntaxNode body) { @@ -140,7 +140,11 @@ public final class ForNode extends AbstractLoopNode implements VisibilityControl @Child private WriteVariableNode writeIndexNode; @Child private RNode loadElement; - public ForRepeatingNode(WriteVariableNode cvar, RNode body, String indexName, String lengthName, String rangeName) { + // used as RSyntaxNode + private final ForNode forNode; + + public ForRepeatingNode(ForNode forNode, WriteVariableNode cvar, RNode body, String indexName, String lengthName, String rangeName) { + this.forNode = forNode; this.writeElementNode = cvar; this.body = body; @@ -193,6 +197,11 @@ public final class ForNode extends AbstractLoopNode implements VisibilityControl } } + @Override + protected RSyntaxNode getRSyntaxNode() { + return forNode; + } + @Override public String toString() { RootNode rootNode = getRootNode(); diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/WhileNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/WhileNode.java index e9f8d69f51..2cffa59735 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/WhileNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/WhileNode.java @@ -45,7 +45,7 @@ public final class WhileNode extends AbstractLoopNode implements RSyntaxNode, Vi private final boolean isRepeat; private WhileNode(RSyntaxNode condition, RSyntaxNode body, boolean isRepeat) { - this.loop = Truffle.getRuntime().createLoopNode(new WhileRepeatingNode(ConvertBooleanNode.create(condition), body.asRNode())); + this.loop = Truffle.getRuntime().createLoopNode(new WhileRepeatingNode(this, ConvertBooleanNode.create(condition), body.asRNode())); this.isRepeat = isRepeat; } @@ -122,7 +122,11 @@ public final class WhileNode extends AbstractLoopNode implements RSyntaxNode, Vi private final BranchProfile breakBlock = BranchProfile.create(); private final BranchProfile nextBlock = BranchProfile.create(); - public WhileRepeatingNode(ConvertBooleanNode condition, RNode body) { + // used as RSyntaxNode + private final WhileNode whileNode; + + public WhileRepeatingNode(WhileNode whileNode, ConvertBooleanNode condition, RNode body) { + this.whileNode = whileNode; this.condition = condition; this.body = body; // pre-initialize the profile so that loop exits to not deoptimize @@ -154,6 +158,11 @@ public final class WhileNode extends AbstractLoopNode implements RSyntaxNode, Vi } } + @Override + protected RSyntaxNode getRSyntaxNode() { + return whileNode; + } + @Override public String toString() { RootNode rootNode = getRootNode(); -- GitLab