From 4066c40aa679fe31da0b1c77b367de4dee5f586b Mon Sep 17 00:00:00 2001 From: Lukas Stadler <lukas.stadler@oracle.com> Date: Mon, 13 Jun 2016 16:28:05 +0200 Subject: [PATCH] make usages of ROptions.getValue able to deal with scalar values --- .../truffle/r/engine/shell/RCommand.java | 6 +- .../truffle/r/nodes/builtin/base/Cat.java | 2 +- .../nodes/builtin/base/PrettyPrinterNode.java | 23 +----- .../builtin/base/printer/PrintParameters.java | 1 - .../builtin/helpers/BrowserInteractNode.java | 5 +- .../oracle/truffle/r/runtime/RRuntime.java | 71 ++++++++++--------- 6 files changed, 43 insertions(+), 65 deletions(-) diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/shell/RCommand.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/shell/RCommand.java index 60a35920fe..3aa57b14a1 100644 --- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/shell/RCommand.java +++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/shell/RCommand.java @@ -53,8 +53,8 @@ import com.oracle.truffle.r.nodes.builtin.base.Quit; import com.oracle.truffle.r.runtime.BrowserQuitException; import com.oracle.truffle.r.runtime.RCmdOptions; import com.oracle.truffle.r.runtime.RInternalError; -import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.RInternalSourceDescriptions; +import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.Utils; import com.oracle.truffle.r.runtime.Utils.DebugExitException; import com.oracle.truffle.r.runtime.context.ConsoleHandler; @@ -65,7 +65,6 @@ import com.oracle.truffle.r.runtime.context.Engine.ParseException; import com.oracle.truffle.r.runtime.context.RContext; import com.oracle.truffle.r.runtime.context.RContext.ContextKind; import com.oracle.truffle.r.runtime.data.RLogicalVector; -import com.oracle.truffle.r.runtime.data.RStringVector; import jline.console.ConsoleReader; import jline.console.UserInterruptException; @@ -299,7 +298,6 @@ public class RCommand { } private static String getContinuePrompt() { - RStringVector continuePrompt = (RStringVector) RRuntime.asAbstractVector(RContext.getInstance().stateROptions.getValue("continue")); - return continuePrompt.getDataAt(0); + return RRuntime.asString(RRuntime.asAbstractVector(RContext.getInstance().stateROptions.getValue("continue"))); } } diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Cat.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Cat.java index b8d845a5a5..95f0ee80fd 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Cat.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Cat.java @@ -102,7 +102,7 @@ public abstract class Cat extends RBuiltinNode { checkFillLength(fill); int fillWidth = -1; if (RRuntime.fromLogical(fill.getDataAt(0))) { - fillWidth = ((RIntVector) RContext.getInstance().stateROptions.getValue("width")).getDataAt(0); + fillWidth = RRuntime.asInteger(RContext.getInstance().stateROptions.getValue("width")); } return output(args, conn, sepVec, fillWidth, checkLabels(labels), append); } diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/PrettyPrinterNode.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/PrettyPrinterNode.java index 981eb21454..3e8e95790e 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/PrettyPrinterNode.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/PrettyPrinterNode.java @@ -471,27 +471,8 @@ public abstract class PrettyPrinterNode extends RNode { } private static int getMaxPrintLength() { - int maxPrint = -1; // infinity - Object maxPrintObj = RContext.getInstance().stateROptions.getValue("max.print"); - if (maxPrintObj != null) { - - if (maxPrintObj instanceof Integer) { - return (int) maxPrintObj; - } else if (maxPrintObj instanceof Double) { - return RRuntime.double2int(((double) maxPrintObj)); - } else if (maxPrintObj instanceof RAbstractVector) { - RAbstractVector maxPrintVec = (RAbstractVector) maxPrintObj; - if (maxPrintVec.getLength() > 0) { - if (maxPrintObj instanceof RAbstractIntVector) { - maxPrint = ((RAbstractIntVector) maxPrintVec).getDataAt(0); - } - if (maxPrintObj instanceof RAbstractDoubleVector) { - maxPrint = RRuntime.double2int(((RAbstractDoubleVector) maxPrintVec).getDataAt(0)); - } - } - } - } - return maxPrint; + int maxPrint = RRuntime.asInteger(RContext.getInstance().stateROptions.getValue("max.print")); + return RRuntime.isNA(maxPrint) ? -1 : maxPrint; } private String printVector(RAbstractVector vector, String[] values, boolean isStringVector, boolean isRawVector) { diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/printer/PrintParameters.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/printer/PrintParameters.java index a19d481dcc..bcd3fdf41d 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/printer/PrintParameters.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/printer/PrintParameters.java @@ -129,7 +129,6 @@ public final class PrintParameters { } public static int getDefaultMaxPrint() { - RRuntime.asInteger(RContext.getInstance().stateROptions.getValue("max.print")); int max = RRuntime.asInteger(RContext.getInstance().stateROptions.getValue("max.print")); if (max == RRuntime.INT_NA || max < 0) { max = 99999; diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/helpers/BrowserInteractNode.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/helpers/BrowserInteractNode.java index cbfb84aa0f..8bc20600a9 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/helpers/BrowserInteractNode.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/helpers/BrowserInteractNode.java @@ -38,7 +38,6 @@ import com.oracle.truffle.r.runtime.context.ConsoleHandler; import com.oracle.truffle.r.runtime.context.Engine.ParseException; import com.oracle.truffle.r.runtime.context.RContext; import com.oracle.truffle.r.runtime.data.RIntVector; -import com.oracle.truffle.r.runtime.data.RLogicalVector; import com.oracle.truffle.r.runtime.data.RNull; import com.oracle.truffle.r.runtime.data.RPairList; import com.oracle.truffle.r.runtime.data.RStringVector; @@ -87,8 +86,8 @@ public abstract class BrowserInteractNode extends RNode { input = input.trim(); } if (input == null || input.length() == 0) { - RLogicalVector browserNLdisabledVec = (RLogicalVector) RContext.getInstance().stateROptions.getValue("browserNLdisabled"); - if (!RRuntime.fromLogical(browserNLdisabledVec.getDataAt(0))) { + byte browserNLdisabledVec = RRuntime.asLogicalObject(RContext.getInstance().stateROptions.getValue("browserNLdisabled")); + if (!RRuntime.fromLogical(browserNLdisabledVec)) { input = lastEmptyLineCommand; } } diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RRuntime.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RRuntime.java index 9d60e49c9b..e568055e0e 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RRuntime.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RRuntime.java @@ -24,20 +24,21 @@ import com.oracle.truffle.api.frame.VirtualFrame; import com.oracle.truffle.api.interop.TruffleObject; import com.oracle.truffle.r.runtime.data.RAttributable; import com.oracle.truffle.r.runtime.data.RComplex; -import com.oracle.truffle.r.runtime.data.RComplexVector; import com.oracle.truffle.r.runtime.data.RDataFactory; import com.oracle.truffle.r.runtime.data.RDouble; -import com.oracle.truffle.r.runtime.data.RDoubleVector; import com.oracle.truffle.r.runtime.data.RFunction; -import com.oracle.truffle.r.runtime.data.RIntVector; import com.oracle.truffle.r.runtime.data.RInteger; import com.oracle.truffle.r.runtime.data.RLogical; -import com.oracle.truffle.r.runtime.data.RLogicalVector; import com.oracle.truffle.r.runtime.data.RRaw; import com.oracle.truffle.r.runtime.data.RString; import com.oracle.truffle.r.runtime.data.RStringVector; import com.oracle.truffle.r.runtime.data.RSymbol; import com.oracle.truffle.r.runtime.data.RTypedValue; +import com.oracle.truffle.r.runtime.data.model.RAbstractComplexVector; +import com.oracle.truffle.r.runtime.data.model.RAbstractDoubleVector; +import com.oracle.truffle.r.runtime.data.model.RAbstractIntVector; +import com.oracle.truffle.r.runtime.data.model.RAbstractLogicalVector; +import com.oracle.truffle.r.runtime.data.model.RAbstractStringVector; import com.oracle.truffle.r.runtime.data.model.RAbstractVector; import com.oracle.truffle.r.runtime.env.frame.FrameSlotChangeMonitor; @@ -794,40 +795,40 @@ public class RRuntime { } /** - * Java equivalent of GnuR asInteger fur use outside Truffle boundary. TODO support for warnings + * Java equivalent of GnuR asLogical for use outside Truffle boundary. TODO support for warnings + */ + public static byte asLogicalObject(Object objArg) { + Object obj = asAbstractVector(objArg); + if (obj instanceof RAbstractIntVector) { + return int2logical(((RAbstractIntVector) obj).getDataAt(0)); + } else if (obj instanceof RAbstractDoubleVector) { + return double2logical(((RAbstractDoubleVector) obj).getDataAt(0)); + } else if (obj instanceof RAbstractLogicalVector) { + return ((RAbstractLogicalVector) obj).getDataAt(0); + } else if (obj instanceof RAbstractComplexVector) { + return complex2logical(((RAbstractComplexVector) obj).getDataAt(0)); + } else if (obj instanceof RAbstractStringVector) { + return string2logical(((RAbstractStringVector) obj).getDataAt(0)); + } else { + return LOGICAL_NA; + } + } + + /** + * Java equivalent of GnuR asInteger for use outside Truffle boundary. TODO support for warnings */ public static int asInteger(Object objArg) { Object obj = asAbstractVector(objArg); - if (obj instanceof RIntVector) { - int v = ((RIntVector) obj).getDataAt(0); - return v; - } else if (obj instanceof RDoubleVector) { - double d = ((RDoubleVector) obj).getDataAt(0); - if (isNAorNaN(d)) { - return INT_NA; - } else { - return (int) d; - } - } else if (obj instanceof RLogicalVector) { - byte v = ((RLogicalVector) obj).getDataAt(0); - if (isNA(v)) { - return INT_NA; - } else { - return v; - } - } else if (obj instanceof RComplexVector) { - RComplex v = ((RComplexVector) obj).getDataAt(0); - if (isNAorNaN(v.getRealPart()) || isNAorNaN(v.getImaginaryPart())) { - return INT_NA; - } else { - return (int) v.getRealPart(); - } - } else if (obj instanceof RStringVector) { - try { - return Integer.parseInt(((RStringVector) obj).getDataAt(0)); - } catch (NumberFormatException ex) { - return INT_NA; - } + if (obj instanceof RAbstractIntVector) { + return ((RAbstractIntVector) obj).getDataAt(0); + } else if (obj instanceof RAbstractDoubleVector) { + return double2int(((RAbstractDoubleVector) obj).getDataAt(0)); + } else if (obj instanceof RAbstractLogicalVector) { + return logical2int(((RAbstractLogicalVector) obj).getDataAt(0)); + } else if (obj instanceof RAbstractComplexVector) { + return complex2int(((RAbstractComplexVector) obj).getDataAt(0)); + } else if (obj instanceof RAbstractStringVector) { + return string2int(((RAbstractStringVector) obj).getDataAt(0)); } else { return INT_NA; } -- GitLab