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 60a35920fe752bd1d1c47db79bd5fdd29af4cb5b..3aa57b14a1d3b1f34131d6d651be8c88dde35b8a 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 b8d845a5a579a27c58255656d7856a61766516e7..95f0ee80fd18190c0419ed90f3a6de73ddcf8e82 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 981eb21454b777062374f1c93d8b5fe301677aae..3e8e95790e874c126b4481a9ebf75de9f6831aab 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 a19d481dcc74e990c98b0d6884dd5b7c54f7f8fb..bcd3fdf41db6622e1bed3c2aada118854360e1a6 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 cbfb84aa0fbfd4c31bff273cdec73584d94342c2..8bc20600a9e4b92b8eb36948cd865dee5a530419 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 9d60e49c9b15a7b223b94bdba45840e14d96a7a0..e568055e0e7c3c70cfe5dc137d89702871104dbf 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; }