diff --git a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/methods/MethodsListDispatch.java b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/methods/MethodsListDispatch.java index 351de044af320e907df5f8260c5f0d94467fd47c..368c1913cb7cb8e7d524faba46b323aff1a80cba 100644 --- a/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/methods/MethodsListDispatch.java +++ b/com.oracle.truffle.r.library/src/com/oracle/truffle/r/library/methods/MethodsListDispatch.java @@ -146,7 +146,10 @@ public class MethodsListDispatch { @Cached("create()") GetFromEnvironment get, @Cached("createPckgAttrAccess()") GetFixedAttributeNode klassPckgAttrAccess, @Cached("createPckgAttrAccess()") GetFixedAttributeNode valPckgAttrAccess) { - String klassString = klass.getLength() == 0 ? RRuntime.STRING_NA : klass.getDataAt(0); + if (klass.getLength() == 0) { + return RNull.instance; + } + String klassString = klass.getDataAt(0); if (klassString.length() == 0) { throw error(RError.Message.ZERO_LENGTH_VARIABLE); @@ -175,6 +178,11 @@ public class MethodsListDispatch { protected RS4Object callGetClassFromCache(RS4Object klass, @SuppressWarnings("unused") REnvironment table) { return klass; } + + @Fallback + protected RS4Object callGetClassFromCache(@SuppressWarnings("unused") Object klass, @SuppressWarnings("unused") Object table) { + throw error(Message.GENERIC, "class should be either a character-string name or a class definition"); + } } public abstract static class R_set_method_dispatch extends RExternalBuiltinNode.Arg1 {