From a51d607d908894b90f0316666b214039a2283883 Mon Sep 17 00:00:00 2001 From: Tomas Stupka <tomas.stupka@oracle.com> Date: Wed, 6 Dec 2017 12:20:12 +0100 Subject: [PATCH] when casting list to atomic, complete has to be properly set in result --- .../truffle/r/nodes/binary/BinaryBooleanNode.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java index b367673e33..61e9e4df60 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/binary/BinaryBooleanNode.java @@ -34,6 +34,7 @@ import com.oracle.truffle.r.nodes.profile.TruffleBoundaryNode; import com.oracle.truffle.r.runtime.RDeparse; import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.RError.Message; +import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.RType; import com.oracle.truffle.r.runtime.data.RComplex; import com.oracle.truffle.r.runtime.data.RComplexVector; @@ -194,13 +195,26 @@ public abstract class BinaryBooleanNode extends RBuiltinNode.Arg2 { if (value instanceof RAbstractVector && ((RAbstractVector) value).getLength() == 1) { value = ((RAbstractVector) value).getDataAtAsObject(0); } + if (type == RType.Integer && value instanceof Integer) { + if (RRuntime.isNA((int) value)) { + result.setComplete(false); + } ((RIntVector) result).setDataAt(store, i, (int) value); } else if (type == RType.Double && value instanceof Double) { + if (RRuntime.isNA((double) value)) { + result.setComplete(false); + } ((RDoubleVector) result).setDataAt(store, i, (double) value); } else if (type == RType.Logical && value instanceof Byte) { + if (RRuntime.isNA((byte) value)) { + result.setComplete(false); + } ((RLogicalVector) result).setDataAt(store, i, (byte) value); } else if (type == RType.Complex && value instanceof RComplex) { + if (RRuntime.isNA((RComplex) value)) { + result.setComplete(false); + } ((RComplexVector) result).setDataAt(store, i, (RComplex) value); } else if (type == RType.Raw && value instanceof RRaw) { ((RRawVector) result).setRawDataAt(store, i, ((RRaw) value).getValue()); -- GitLab