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;