From cd0361a16898dccfbdcdd2a43d152fdbbbb8474d Mon Sep 17 00:00:00 2001 From: Tomas Stupka <tomas.stupka@oracle.com> Date: Wed, 19 Apr 2017 16:36:12 +0200 Subject: [PATCH] added specialization for TruffleObject-s to typeof builtin --- .../com/oracle/truffle/r/nodes/unary/TypeofNode.java | 10 ++++++++++ .../src/com/oracle/truffle/r/runtime/RType.java | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) 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 cf9c38a6aa..1df443ba8c 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 4c08a3aae0..ddf2a1e6c0 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; -- GitLab