diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/JavaUpCallsRFFIImpl.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/JavaUpCallsRFFIImpl.java index c98d7398d32a406feb92bf99b09710fcbc88e5fc..a980e216b3f9a8692626203b3ef17609a918dd6c 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/JavaUpCallsRFFIImpl.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/ffi/JavaUpCallsRFFIImpl.java @@ -30,6 +30,8 @@ import java.io.IOException; import java.nio.ByteBuffer; import java.nio.charset.StandardCharsets; import java.util.Arrays; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import java.util.function.Function; import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; @@ -41,7 +43,7 @@ import com.oracle.truffle.api.source.Source; import com.oracle.truffle.api.source.SourceSection; import com.oracle.truffle.r.nodes.RASTUtils; import com.oracle.truffle.r.nodes.ffi.ParseResult.ParseStatus; -import com.oracle.truffle.r.nodes.function.ImplicitClassHierarchyNode; +import com.oracle.truffle.r.nodes.function.ClassHierarchyNode; import com.oracle.truffle.r.runtime.RArguments; import com.oracle.truffle.r.runtime.RCaller; import com.oracle.truffle.r.runtime.RCleanUp; @@ -105,8 +107,6 @@ import com.oracle.truffle.r.runtime.nodes.DuplicationHelper; import com.oracle.truffle.r.runtime.nodes.RNode; import com.oracle.truffle.r.runtime.nodes.RSyntaxNode; import com.oracle.truffle.r.runtime.rng.RRNG; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; /** * This class provides a simple Java-based implementation of {@link UpCallsRFFI}, where all the @@ -298,7 +298,7 @@ public abstract class JavaUpCallsRFFIImpl implements UpCallsRFFI { } public static RStringVector getClassHr(Object v) { - return ImplicitClassHierarchyNode.getImplicitClass(v); + return ClassHierarchyNode.getClassHierarchy(v); } @Override diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ClassHierarchyNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ClassHierarchyNode.java index 8988230c91ea81241a64091f3b9fe7b689d54c72..1c830d94f38930839e08d0b49458aac65e5e5d09 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ClassHierarchyNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/ClassHierarchyNode.java @@ -62,9 +62,13 @@ public abstract class ClassHierarchyNode extends UnaryNode { * attribute is not set. */ @TruffleBoundary - public static RStringVector getClassHierarchy(RAttributable value) { - Object v = value.getAttr(RRuntime.CLASS_ATTR_KEY); - RStringVector result = v instanceof RStringVector ? (RStringVector) v : ImplicitClassHierarchyNode.getImplicitClass(value); + public static RStringVector getClassHierarchy(Object value) { + RStringVector result = null; + if (value instanceof RAttributable) { + Object v = ((RAttributable) value).getAttr(RRuntime.CLASS_ATTR_KEY); + result = v instanceof RStringVector ? (RStringVector) v : ImplicitClassHierarchyNode.getImplicitClass(value); + } + return result != null ? result : RDataFactory.createEmptyStringVector(); }