diff --git a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/TruffleRLanguage.java b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/TruffleRLanguage.java index af910abea6dc212c9d4b2159274641685fbc0222..8b6d2490248b99625766fa24370d9900bd38eb90 100644 --- a/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/TruffleRLanguage.java +++ b/com.oracle.truffle.r.engine/src/com/oracle/truffle/r/engine/TruffleRLanguage.java @@ -155,18 +155,20 @@ public final class TruffleRLanguage extends TruffleLanguage<RContext> { @Override protected Object findMetaObject(RContext context, Object value) { - String ret = "Object"; - if (value instanceof RPromise) { - RPromise promise = (RPromise) value; + Object unwrappedValue = value; + if (unwrappedValue instanceof RPromise) { + RPromise promise = (RPromise) unwrappedValue; if (promise.isEvaluated()) { - value = promise.getValue(); + unwrappedValue = promise.getValue(); } } - value = RRuntime.asAbstractVector(value); // Wrap scalars "Integer", "Double" etc. - if (value instanceof RTypedValue) { - ret = ((RTypedValue) value).getRType().getName(); + unwrappedValue = RRuntime.asAbstractVector(unwrappedValue); // Wrap scalars "Integer", + // "Double" etc. + if (unwrappedValue instanceof RTypedValue) { + return ((RTypedValue) unwrappedValue).getRType().getName(); + } else { + return "Object"; } - return ret; } @Override diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/tck/FastRTckTest.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/tck/FastRTckTest.java index 11fdfeb85a3f1c7c935b7ac1e56c2c1fad419eb4..29c8ec9c317b0c17b0e369be5c82d641b65340a9 100644 --- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/tck/FastRTckTest.java +++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/tck/FastRTckTest.java @@ -134,6 +134,19 @@ public class FastRTckTest extends TruffleTCK { "isExecutableOfForeign <- function(o) {\n" + " .fastr.interop.toBoolean(.fastr.interop.isExecutable(o))\n" + "}\n" + + "intValue <- function() 42L\n" + + "intVectorValue <- function() c(42L, 40L)\n" + + "intSequenceValue <- function() 42:50\n" + + "intType <- function() 'integer'\n" + + "doubleValue <- function() 42.1\n" + + "doubleVectorValue <- function() c(42.1, 40)\n" + + "doubleSequenceValue <- function() 42.1:50\n" + + "doubleType <- function() 'double'\n" + + "functionValue <- function() { function(x) 1 }\n" + + "functionType <- function() 'closure'\n" + + "builtinFunctionValue <- function() `+`\n" + + "builtinFunctionType <- function() 'builtin'\n" + + "valueWithSource <- function() intValue\n" + "for (name in ls()) .fastr.interop.export(name, get(name))\n", RSource.Internal.TCK_INIT ); @@ -473,12 +486,16 @@ public class FastRTckTest extends TruffleTCK { @Override protected String[] metaObjects() { - return null; // TBD add proper impl here. + return new String[]{ + "intValue", "intType", "intVectorValue", "intType", "intSequenceValue", "intType", + "doubleValue", "doubleType", "doubleVectorValue", "doubleType", "doubleSequenceValue", "doubleType", + "functionValue", "functionType", + "builtinFunctionValue", "builtinFunctionType"}; } @Override protected String valueWithSource() { - return null; // TBD add proper impl here. + return "valueWithSource"; } }