From 394fb837e91a254fcbb95e150d8a6ca91a10e23c Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Thu, 17 Nov 2016 10:28:04 +0100 Subject: [PATCH] implement ParNode using OperatorNode --- .../oracle/truffle/r/nodes/RASTBuilder.java | 2 +- .../truffle/r/nodes/control/ParNode.java | 23 ++++++++++--------- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTBuilder.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTBuilder.java index 0db6465ac9..7a62c4fc65 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTBuilder.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTBuilder.java @@ -101,7 +101,7 @@ public final class RASTBuilder implements RCodeBuilder<RSyntaxNode> { case "repeat": return new RepeatNode(source, lhsLookup, args.get(0).value); case "(": - return new ParNode(source, args.get(0).value); + return new ParNode(source, lhsLookup, args.get(0).value); } } else if (args.size() == 2) { switch (symbol) { diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ParNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ParNode.java index 3cf76b2e8c..ba7c6cf1f0 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ParNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/control/ParNode.java @@ -23,37 +23,38 @@ package com.oracle.truffle.r.nodes.control; import com.oracle.truffle.api.frame.VirtualFrame; -import com.oracle.truffle.api.nodes.ExplodeLoop; import com.oracle.truffle.api.source.SourceSection; +import com.oracle.truffle.r.nodes.function.visibility.SetVisibilityNode; import com.oracle.truffle.r.runtime.ArgumentsSignature; import com.oracle.truffle.r.runtime.nodes.RNode; -import com.oracle.truffle.r.runtime.nodes.RSourceSectionNode; -import com.oracle.truffle.r.runtime.nodes.RSyntaxCall; -import com.oracle.truffle.r.runtime.nodes.RSyntaxElement; import com.oracle.truffle.r.runtime.nodes.RSyntaxLookup; import com.oracle.truffle.r.runtime.nodes.RSyntaxNode; /** * A {@link ParNode} represents parentheses in source code. */ -public final class ParNode extends RSourceSectionNode implements RSyntaxNode, RSyntaxCall { +public final class ParNode extends OperatorNode { @Child private RNode value; + @Child private SetVisibilityNode visibility = SetVisibilityNode.create(); - public ParNode(SourceSection src, RSyntaxNode value) { - super(src); + public ParNode(SourceSection src, RSyntaxLookup operator, RSyntaxNode value) { + super(src, operator); this.value = value.asRNode(); } @Override - @ExplodeLoop public Object execute(VirtualFrame frame) { - return value.execute(frame); + try { + return value.execute(frame); + } finally { + visibility.execute(frame, true); + } } @Override - public RSyntaxElement getSyntaxLHS() { - return RSyntaxLookup.createDummyLookup(getSourceSection(), "(", true); + public void voidExecute(VirtualFrame frame) { + value.voidExecute(frame); } @Override -- GitLab