diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DoCall.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DoCall.java index 5617d62883c2e33778ea04ea020f7afeae3489c3..cdc3849a10373d9ffac263a99a4c06ce4205bd53 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DoCall.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/DoCall.java @@ -106,7 +106,7 @@ public abstract class DoCall extends RBuiltinNode { containsRLanguageProfile.enter(); callerFrame = getCallerFrame(frame, callerFrame); RLanguage lang = (RLanguage) arg; - argValues[i] = createArgPromise(callerFrame, NodeUtil.cloneNode(((RNode) lang.getRep()))); + argValues[i] = createArgPromise(callerFrame, RASTUtils.cloneNode((lang.getRep()))); } else if (arg instanceof RSymbol) { containsRSymbolProfile.enter(); RSymbol symbol = (RSymbol) arg; diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Substitute.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Substitute.java index b1d87e977a5f17c7762880860494856eb25e7087..c27ec309c8b2c1a569144bd6efe3b2912a2e9567 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Substitute.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Substitute.java @@ -115,7 +115,7 @@ public abstract class Substitute extends RBuiltinNode { // so get the actual expression (AST) from that Node node = RASTUtils.unwrap(expr.getRep()); // substitution is destructive so clone the tree - RSyntaxNode rNode = (RSyntaxNode) NodeUtil.cloneNode(node); + RSyntaxNode rNode = (RSyntaxNode) RASTUtils.cloneNode(node); RSyntaxNode subRNode = rNode.substituteImpl(env); // create source for entire tree RASTDeparse.ensureSourceSection(subRNode); diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/InlineCacheNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/InlineCacheNode.java index 775f591be35e51434d1cf5b0b3ec794dd336e0be..988dbcd90d7977d872596f18855cf09eb4939c9e 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/InlineCacheNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/InlineCacheNode.java @@ -69,7 +69,7 @@ public abstract class InlineCacheNode extends RBaseNode { } protected RNode cache(Object value) { - return NodeUtil.cloneNode(reify.apply(value)); + return RASTUtils.cloneNode(reify.apply(value)); } @Specialization(contains = "doCached") diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java index 604bafe2dfca14bd188b630321abf1111a34a218..e5befeafb9e4785da6d2791a36ccd12acc29bcbd 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RASTUtils.java @@ -65,6 +65,15 @@ import com.oracle.truffle.r.runtime.nodes.RSyntaxNode; */ public class RASTUtils { + /** + * Central location for all node cloning operations, in preference to {@link NodeUtil#cloneNode} + * . + */ + public static RNode cloneNode(Node node) { + RNode result = (RNode) NodeUtil.cloneNode(node); + return result; + } + /** * Removes any {@link WrapArgumentNode} or {@link WrapperNode}. */ @@ -177,7 +186,7 @@ public class RASTUtils { return RASTUtils.createReadVariableNode(((RSymbol) value).getName()); } else if (value instanceof RLanguage) { RLanguage l = (RLanguage) value; - return (RNode) NodeUtil.cloneNode((Node) l.getRep()); + return RASTUtils.cloneNode(l.getRep()); } else if (value instanceof RPromise) { RPromise promise = (RPromise) value; RNode promiseRep = (RNode) unwrap(((RPromise) value).getRep()); @@ -195,7 +204,7 @@ public class RASTUtils { return null; } } - return NodeUtil.cloneNode(promiseRep); + return RASTUtils.cloneNode(promiseRep); } else { return ConstantNode.create(value); } @@ -340,9 +349,9 @@ public class RASTUtils { // strange special case, mimics GnuR behavior return RASTUtils.createReadVariableNode(""); } else if (val instanceof RPromise) { - return (RSyntaxNode) NodeUtil.cloneNode(RASTUtils.unwrap(((RPromise) val).getRep())); + return (RSyntaxNode) RASTUtils.cloneNode(RASTUtils.unwrap(((RPromise) val).getRep())); } else if (val instanceof RLanguage) { - return (RSyntaxNode) NodeUtil.cloneNode((RNode) ((RLanguage) val).getRep()); + return (RSyntaxNode) RASTUtils.cloneNode(((RLanguage) val).getRep()); } else if (val instanceof RArgsValuesAndNames) { // this is '...' RArgsValuesAndNames rva = (RArgsValuesAndNames) val; @@ -369,7 +378,7 @@ public class RASTUtils { } if (argval instanceof RPromise) { RPromise promise = (RPromise) argval; - expandedNodes[i] = (RSyntaxNode) NodeUtil.cloneNode(RASTUtils.unwrap(promise.getRep())); + expandedNodes[i] = (RSyntaxNode) RASTUtils.cloneNode(RASTUtils.unwrap(promise.getRep())); } else { expandedNodes[i] = ConstantNode.create(argval); } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessArgumentNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessArgumentNode.java index bb9ba8b0f5f0a1bef519cf52ec64182b9a4eeee4..674e62112192f5cfd75a4113ee6a9c9f00f4410f 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessArgumentNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/AccessArgumentNode.java @@ -159,7 +159,7 @@ public final class AccessArgumentNode extends RNode { CompilerDirectives.transferToInterpreterAndInvalidate(); // TODO: all tests pass without it but perhaps we should "re-wrap" promises here? if (isOptimizableDefault(arg)) { - optDefaultArgNode = new OptVariableDefaultPromiseNode(factory, (ReadVariableNode) NodeUtil.cloneNode(arg), ArgumentStatePush.INVALID_INDEX); + optDefaultArgNode = new OptVariableDefaultPromiseNode(factory, (ReadVariableNode) RASTUtils.cloneNode(arg), ArgumentStatePush.INVALID_INDEX); } else { Object optimizableConstant = getOptimizableConstant(arg); if (optimizableConstant != null) { diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/ReadVariableNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/ReadVariableNode.java index 9a96344df89cdb1d977e506232b9ed0330800d23..effb4bf752444061e8dc968209a61a32567b50b1 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/ReadVariableNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/ReadVariableNode.java @@ -184,7 +184,7 @@ public final class ReadVariableNode extends RSourceSectionNode implements RSynta public RSyntaxNode substituteImpl(REnvironment env) { RSyntaxNode result = RASTUtils.substituteName(identifierAsString, env); if (result == null) { - result = NodeUtil.cloneNode(this); + result = (RSyntaxNode) RASTUtils.cloneNode(this); } return result; } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseNode.java index 98907ab1feb932fa6b2775e9b8de24a97f64e381..be17840af75a9c87650a192e0328b07b8cd23550 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/PromiseNode.java @@ -88,7 +88,7 @@ public abstract class PromiseNode extends RNode { public static RNode createInlined(RNode expression, Object defaultValue, boolean unwrap) { CompilerAsserts.neverPartOfCompilation(); - RNode clonedExpression = NodeUtil.cloneNode(expression); + RNode clonedExpression = RASTUtils.cloneNode(expression); RNode pn = clonedExpression instanceof ConstantNode ? clonedExpression : new InlinedSuppliedArgumentNode(clonedExpression, defaultValue, unwrap); return pn; } diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java index c60f9c64995af473eb245023a4eabf3e2c12843d..929d5dfb98d2b01b4d9f17ce57944aa3b01188d3 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallNode.java @@ -237,7 +237,7 @@ public final class RCallNode extends RSourceSectionNode implements RSyntaxNode, SyntaxArguments sa = new SyntaxArguments(new RSyntaxNode[v.length]); for (int i = 0; i < v.length; i++) { if (v[i] != null) { - RSyntaxNode viClone = (RSyntaxNode) NodeUtil.cloneNode(v[i].asRNode()); + RSyntaxNode viClone = (RSyntaxNode) RASTUtils.cloneNode(v[i].asRNode()); sa.v[i] = viClone; } } @@ -330,7 +330,7 @@ public final class RCallNode extends RSourceSectionNode implements RSyntaxNode, CompilerDirectives.transferToInterpreterAndInvalidate(); dispatchTempSlot = insert(FrameSlotNode.createInitialized(frame.getFrameDescriptor(), defaultTempIdentifiers[0], true)); internalDispatchCall = insert(new UninitializedCallNode(this, defaultTempIdentifiers[0])); - dispatchArgument = insert(NodeUtil.cloneNode(arguments.v[0].asRNode())); + dispatchArgument = insert(RASTUtils.cloneNode(arguments.v[0].asRNode())); dispatchLookup = insert(S3FunctionLookupNode.create(true, false)); classHierarchyNode = insert(ClassHierarchyNodeGen.create(false, true)); } @@ -413,7 +413,7 @@ public final class RCallNode extends RSourceSectionNode implements RSyntaxNode, if (i == 0 && dispatchTempIdentifier != null) { args[0] = new GetTempNode(dispatchTempIdentifier, arguments.v[0]); } else { - args[i] = arguments.v[i] == null ? null : NodeUtil.cloneNode(arguments.v[i].asRNode()); + args[i] = arguments.v[i] == null ? null : RASTUtils.cloneNode(arguments.v[i].asRNode()); } } return CallArgumentsNode.create(modeChange, modeChangeAppliesToAll, args, signature); @@ -607,7 +607,7 @@ public final class RCallNode extends RSourceSectionNode implements RSyntaxNode, for (int i = 0; i < args.length; i++) { args[i] = i < replacementArgs.length ? replacementArgs[i] : call.arguments.v[i]; } - return new RCallNode(call.getSourceSection(), NodeUtil.cloneNode(call.functionNode), args, call.signature); + return new RCallNode(call.getSourceSection(), RASTUtils.cloneNode(call.functionNode), args, call.signature); } /** @@ -984,7 +984,7 @@ public final class RCallNode extends RSourceSectionNode implements RSyntaxNode, // Extend cache this.depth += 1; - CallArgumentsNode clonedArgs = NodeUtil.cloneNode(args); + CallArgumentsNode clonedArgs = (CallArgumentsNode) RASTUtils.cloneNode(args); VarArgsCacheCallNode next = createNextNode(function); DispatchedVarArgsCallNode newCallNode = DispatchedVarArgsCallNode.create(frame, clonedArgs, next, this, function, varArgsSignature); return replace(newCallNode).execute(frame, function, varArgsSignature, s3Args); @@ -994,7 +994,7 @@ public final class RCallNode extends RSourceSectionNode implements RSyntaxNode, if (depth < VARARGS_INLINE_CACHE_SIZE) { return this; } else { - CallArgumentsNode clonedArgs = NodeUtil.cloneNode(args); + CallArgumentsNode clonedArgs = (CallArgumentsNode) RASTUtils.cloneNode(args); return new DispatchedGenericVarArgsCallNode(function, clonedArgs, originalCall); } }