diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/TypeofNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/TypeofNode.java index cf9c38a6aaefb27f6cdb2b8983a7111c4c5ccb78..1df443ba8c97ea0df8b9b11c2f42a9540d0b1608 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/TypeofNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/unary/TypeofNode.java @@ -25,6 +25,7 @@ package com.oracle.truffle.r.nodes.unary; import com.oracle.truffle.api.CompilerAsserts; import com.oracle.truffle.api.dsl.Cached; import com.oracle.truffle.api.dsl.Specialization; +import com.oracle.truffle.api.interop.TruffleObject; import com.oracle.truffle.r.runtime.RRuntime; import com.oracle.truffle.r.runtime.RType; import com.oracle.truffle.r.runtime.data.RMissing; @@ -81,6 +82,15 @@ public abstract class TypeofNode extends UnaryNode { return operand.getRType(); } + @Specialization(guards = "isForeignObject(object)") + protected RType doTruffleObject(@SuppressWarnings("unused") TruffleObject object) { + return RType.TruffleObject; + } + + protected static boolean isForeignObject(Object obj) { + return RRuntime.isForeignObject(obj); + } + public static RType getTypeof(Object operand) { CompilerAsserts.neverPartOfCompilation(); return ((RTypedValue) RRuntime.asAbstractVector(operand)).getRType(); diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RType.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RType.java index 4c08a3aae01a1cca818c851198d1da092c37a8e1..ddf2a1e6c0cd6cfec7d8c887631006d9cb63978f 100644 --- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RType.java +++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RType.java @@ -46,7 +46,8 @@ public enum RType { ExternalPtr("externalptr", -1), S4Object("S4", -1), Connection("connection", -1), - Dots("...", -1); + Dots("...", -1), + TruffleObject("truffle.object", -1); public static final int NO_PRECEDENCE = -1; public static final int NUMBER_OF_PRECEDENCES = 9;