From 47c286f0b4f553a43367254eb3b99f383c668e1c Mon Sep 17 00:00:00 2001 From: Christian Humer <christian.humer@oracle.com> Date: Fri, 9 Sep 2016 17:07:54 +0200 Subject: [PATCH] Fix slow type check for external TruffleObjects. --- .../access/variables/ReadVariableNode.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/ReadVariableNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/ReadVariableNode.java index 0482836c01..9797aab076 100644 --- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/ReadVariableNode.java +++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/access/variables/ReadVariableNode.java @@ -932,12 +932,17 @@ abstract class CheckTypeNode extends RBaseNode { return type == RType.Function || type == RType.Closure || type == RType.Builtin || type == RType.Special; } + @Specialization(guards = "isExternalObject(o)") + boolean checkType(@SuppressWarnings("unused") TruffleObject o) { + return type == RType.Function || type == RType.Closure || type == RType.Builtin || type == RType.Special; + } + + protected static boolean isExternalObject(TruffleObject o) { + return !(o instanceof RTypedValue); + } + @Fallback - boolean checkType(Object o) { - if (type == RType.Function || type == RType.Closure || type == RType.Builtin || type == RType.Special) { - return o instanceof TruffleObject && !(o instanceof RTypedValue); - } else { - return false; - } + boolean checkType(@SuppressWarnings("unused") Object o) { + return false; } } -- GitLab