From 0d5775cc066458e966e4c28ad0c6417b0cd042e1 Mon Sep 17 00:00:00 2001 From: Tomas Stupka <tomas.stupka@oracle.com> Date: Mon, 12 Dec 2016 16:11:23 +0100 Subject: [PATCH] fix anyNA - the recursion parameter wasn't honored when AnyNA.isNA(list) called for the first time --- .../truffle/r/nodes/builtin/base/AnyNA.java | 24 ++++--------------- .../r/test/builtins/TestBuiltin_anyNA.java | 11 +++++++++ 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AnyNA.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AnyNA.java index 6a9b1e8f90..57c48da529 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AnyNA.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/AnyNA.java @@ -54,20 +54,6 @@ public abstract class AnyNA extends RBuiltinNode { private final NACheck naCheck = NACheck.create(); - private final boolean recursionAllowed; - - protected AnyNA(boolean recursionAllowed) { - this.recursionAllowed = recursionAllowed; - } - - protected AnyNA() { - this(true); - } - - protected boolean isRecursionAllowed() { - return recursionAllowed; - } - public abstract byte execute(VirtualFrame frame, Object value, boolean recursive); @Override @@ -161,13 +147,13 @@ public abstract class AnyNA extends RBuiltinNode { return doScalar(false); } - protected AnyNA createRecursive(boolean recursive) { - return AnyNANodeGen.create(recursive); + protected AnyNA createRecursive() { + return AnyNANodeGen.create(); } - @Specialization(guards = "isRecursionAllowed()") + @Specialization(guards = "recursive") protected byte isNA(VirtualFrame frame, RList list, boolean recursive, - @Cached("createRecursive(recursive)") AnyNA recursiveNode, + @Cached("createRecursive()") AnyNA recursiveNode, @Cached("createClassProfile()") ValueProfile elementProfile, @Cached("create()") RLengthNode length) { @@ -183,7 +169,7 @@ public abstract class AnyNA extends RBuiltinNode { return RRuntime.LOGICAL_FALSE; } - @Specialization(guards = "!isRecursionAllowed()") + @Specialization(guards = "!recursive") @SuppressWarnings("unused") protected byte isNA(VirtualFrame frame, RList list, boolean recursive) { return RRuntime.LOGICAL_FALSE; diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_anyNA.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_anyNA.java index cea95545ce..4b36de5ed4 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_anyNA.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_anyNA.java @@ -31,4 +31,15 @@ public class TestBuiltin_anyNA extends TestBase { assertEval("anyNA(list(list(4,5,NA), 3), recursive=TRUE)"); } + @Test + public void testanyNA3() { + assertEval("anyNA(c(1, 2, 3))"); + assertEval("anyNA(c(1, NA, 3))"); + assertEval("anyNA(c(1, NA, 3), recursive = TRUE)"); + assertEval("anyNA(list(a = c(1, 2, 3), b = 'a'))"); + assertEval("anyNA(list(a = c(1, NA, 3), b = 'a'))"); + assertEval("anyNA(list(a = c(1, 2, 3), b = 'a'), recursive = TRUE)"); + assertEval("anyNA(list(a = c(1, NA, 3), b = 'a'), recursive = TRUE)"); + } + } -- GitLab