diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Combine.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Combine.java index 9fce47208b8602ff589d3ecbe91f6b149a563ad2..73afa80f8a426445181447680e2e8bc93c66e1e3 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Combine.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Combine.java @@ -151,6 +151,17 @@ public abstract class Combine extends RBuiltinNode { return result; } + @TruffleBoundary + @Specialization(limit = "COMBINE_CACHED_LIMIT", contains = "combineCached", guards = {"!recursive", "cachedPrecedence == precedence(args)"}) + protected Object combine(RArgsValuesAndNames args, @SuppressWarnings("unused") boolean recursive, // + @Cached("precedence(args, args.getLength())") int cachedPrecedence, // + @Cached("createCast(cachedPrecedence)") CastNode cast, // + @Cached("create()") BranchProfile naNameBranch, // + @Cached("create()") NACheck naNameCheck, // + @Cached("createBinaryProfile()") ConditionProfile hasNamesProfile) { + return combineCached(args, false, args.getSignature(), cachedPrecedence, cast, naNameBranch, naNameCheck, hasNamesProfile); + } + @Specialization(guards = "recursive") protected Object combineRecursive(RArgsValuesAndNames args, @SuppressWarnings("unused") boolean recursive, @Cached("create()") Combine recursiveCombine, // @@ -318,17 +329,6 @@ public abstract class Combine extends RBuiltinNode { return signature != null && signature.getNonNullCount() > 0; } - @TruffleBoundary - @Specialization(limit = "COMBINE_CACHED_LIMIT", contains = "combineCached", guards = "cachedPrecedence == precedence(args)") - protected Object combine(RArgsValuesAndNames args, boolean recursive, // - @Cached("precedence(args, args.getLength())") int cachedPrecedence, // - @Cached("createCast(cachedPrecedence)") CastNode cast, // - @Cached("create()") BranchProfile naNameBranch, // - @Cached("create()") NACheck naNameCheck, // - @Cached("createBinaryProfile()") ConditionProfile hasNamesProfile) { - return combineCached(args, false, args.getSignature(), cachedPrecedence, cast, naNameBranch, naNameCheck, hasNamesProfile); - } - @Specialization(guards = "!isArguments(args)") protected Object nonArguments(Object args, boolean recursive, @Cached("create()") Combine combine) { return combine.executeCombine(new RArgsValuesAndNames(new Object[]{args}, EMPTY_SIGNATURE), recursive);