From 53a0d0f95d2276958fe9ab67ba7a59df3f5cd14c Mon Sep 17 00:00:00 2001 From: Mick Jordan <mick.jordan@oracle.com> Date: Fri, 14 Aug 2015 14:49:07 -0700 Subject: [PATCH] bug fixes --- com.oracle.truffle.r.native/run/Makefile | 2 +- .../truffle/r/nodes/builtin/base/Mapply.java | 14 +++++++++++++- .../truffle/r/nodes/builtin/base/Unlist.java | 12 ++++++++++++ .../truffle/r/runtime/conn/ConnectionSupport.java | 8 +++++--- 4 files changed, 31 insertions(+), 5 deletions(-) diff --git a/com.oracle.truffle.r.native/run/Makefile b/com.oracle.truffle.r.native/run/Makefile index 0a684b9a7d..d3a025305e 100644 --- a/com.oracle.truffle.r.native/run/Makefile +++ b/com.oracle.truffle.r.native/run/Makefile @@ -80,7 +80,7 @@ $(FASTR_BIN_DIR)/R: Makefile R.sh Rscript.sh Rscript_exec.sh cp examples-header.R examples-footer.R $(FASTR_SHARE_DIR)/R includedir: Makefile $(TOPDIR)/include/jni/include/R.h - cp -rp $(TOPDIR)/include/jni/include $(FASTR_R_HOME)/include + cp -r $(TOPDIR)/include/jni/include $(FASTR_R_HOME)/include clean: rm -rf $(FASTR_BIN_DIR) diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Mapply.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Mapply.java index 54bdd0b10a..612c8a4462 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Mapply.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Mapply.java @@ -121,7 +121,19 @@ public abstract class Mapply extends RBuiltinNode { for (int i = 0; i < maxLength; i++) { /* Evaluate and store the arguments */ for (int listIndex = 0; listIndex < dotsLength; listIndex++) { - RAbstractContainer vec = (RAbstractContainer) dots.getDataAt(listIndex); + Object listElem = dots.getDataAt(listIndex); + RAbstractContainer vec = null; + if (listElem instanceof RAbstractContainer) { + vec = (RAbstractContainer) listElem; + } else { + // TODO scalar types are a nuisance! + if (listElem instanceof String) { + vec = RDataFactory.createStringVectorFromScalar((String) listElem); + } else { + throw RInternalError.unimplemented(); + } + } + int adjIndex = i % lengths[listIndex]; RArgsValuesAndNames indexArg; if (adjIndex < INDEX_CACHE.length) { diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Unlist.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Unlist.java index 4ab724c837..2efaf2f07c 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Unlist.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Unlist.java @@ -139,6 +139,13 @@ public abstract class Unlist extends RBuiltinNode { return RNull.instance; } + @SuppressWarnings("unused") + @Specialization(guards = "isOneNull(list)") + protected RNull unlistOneNullList(VirtualFrame frame, RList list, byte recursive, byte useNames) { + controlVisibility(); + return RNull.instance; + } + // TODO: initially unlist was on the slow path - hence initial recursive implementation is on // the slow path as well; ultimately we may consider (non-recursive) optimization @Specialization(guards = "!isEmpty(list)") @@ -276,6 +283,7 @@ public abstract class Unlist extends RBuiltinNode { } return RDataFactory.createList(result, namesInfo != null && namesInfo.namesAssigned ? RDataFactory.createStringVector(namesData, RDataFactory.INCOMPLETE_VECTOR) : null); } + default: throw RInternalError.unimplemented(); } @@ -693,4 +701,8 @@ public abstract class Unlist extends RBuiltinNode { public static boolean isEmpty(RAbstractVector vector) { return vector.getLength() == 0; } + + public static boolean isOneNull(RList list) { + return list.getLength() == 1 && list.getDataAt(0) == RNull.instance; + } } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/conn/ConnectionSupport.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/conn/ConnectionSupport.java index 74dd248f19..0404e5901d 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/conn/ConnectionSupport.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/conn/ConnectionSupport.java @@ -153,9 +153,11 @@ public class ConnectionSupport implements RContext.StateFactory { if (con instanceof TextConnections.TextRConnection) { RError.warning(RError.NO_NODE, RError.Message.UNUSED_TEXTCONN, con.descriptor, ((TextConnections.TextRConnection) con).description); } - int index = con.descriptor; - closeAndDestroy(con); - allConnections.set(index, null); + if (con != null) { + int index = con.descriptor; + closeAndDestroy(con); + allConnections.set(index, null); + } } } -- GitLab