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 bc38674178f38b0a86eb38ad494f1779ad74dbd0..deb22fedc6ec8eb660b1ac3195d127d86619fe9c 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 @@ -178,6 +178,16 @@ public abstract class Combine extends RBuiltinNode.Arg2 { return combineCached(args, false, args.getSignature(), cachedPrecedence, cast, naNameBranch, hasNamesProfile, getNamesNode); } + @TruffleBoundary + @Specialization(replaces = "combine", guards = {"!recursive"}) + protected Object combineGeneric(RArgsValuesAndNames args, @SuppressWarnings("unused") boolean recursive, + @Cached("create()") BranchProfile naNameBranch, + @Cached("createBinaryProfile()") ConditionProfile hasNamesProfile, + @Cached("create()") GetNamesAttributeNode getNamesNode) { + int cachedPrecedence = precedence(args, args.getLength()); + return combineCached(args, false, args.getSignature(), cachedPrecedence, createCast(cachedPrecedence), naNameBranch, hasNamesProfile, getNamesNode); + } + @Specialization(guards = "recursive") protected Object combineRecursive(RArgsValuesAndNames args, @SuppressWarnings("unused") boolean recursive, @Cached("create()") Combine recursiveCombine, diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/primitive/BinaryMapNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/primitive/BinaryMapNode.java index 501e831a8fe65bc24ea6d8ac9dec3e59c78340ba..25756e21dfeccabbc99ffe1c0762188b877e64d4 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/primitive/BinaryMapNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/primitive/BinaryMapNode.java @@ -496,7 +496,7 @@ abstract class VectorMapBinaryInternalNode extends RBaseNode { @Cached("createCountingProfile()") LoopConditionProfile leftProfile, @Cached("createCountingProfile()") LoopConditionProfile rightProfile, @Cached("createBinaryProfile()") ConditionProfile smallRemainderProfile) { - assert result != right || rightLength == leftLength; + assert result.getLength(resultIter) == leftLength; leftProfile.profileCounted(leftLength); rightProfile.profileCounted(rightLength); while (leftProfile.inject(leftIter.getIndex() + 1 < leftLength)) { @@ -527,7 +527,7 @@ abstract class VectorMapBinaryInternalNode extends RBaseNode { @Cached("createCountingProfile()") LoopConditionProfile leftProfile, @Cached("createCountingProfile()") LoopConditionProfile rightProfile, @Cached("createBinaryProfile()") ConditionProfile smallRemainderProfile) { - assert result != left || rightLength == leftLength; + assert result.getLength(resultIter) == rightLength; leftProfile.profileCounted(leftLength); rightProfile.profileCounted(rightLength); while (rightProfile.inject(rightIter.getIndex() + 1 < rightLength)) {