From 321b755f4d6463ef6df0e515632032bb934e5146 Mon Sep 17 00:00:00 2001
From: Adam Welc <adam.welc@oracle.com>
Date: Tue, 15 Mar 2016 20:07:30 -0700
Subject: [PATCH] Fixed a problem with "class" function returning incorrect
 values for S4 objects.

---
 .../src/com/oracle/truffle/r/nodes/builtin/base/GetClass.java   | 2 +-
 .../com/oracle/truffle/r/test/builtins/TestBuiltin_class.java   | 2 ++
 2 files changed, 3 insertions(+), 1 deletion(-)

diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GetClass.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GetClass.java
index 8e96287c74..53acb6b723 100644
--- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GetClass.java
+++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/GetClass.java
@@ -21,7 +21,7 @@ import com.oracle.truffle.r.runtime.data.model.*;
 @RBuiltin(name = "class", kind = PRIMITIVE, parameterNames = {"x"})
 public abstract class GetClass extends RBuiltinNode {
 
-    @Child private ClassHierarchyNode classHierarchy = ClassHierarchyNodeGen.create(true, true);
+    @Child private ClassHierarchyNode classHierarchy = ClassHierarchyNodeGen.create(true, false);
 
     @Specialization
     protected RAbstractStringVector getClass(Object x) {
diff --git a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_class.java b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_class.java
index 5b9ffbe052..3d278e42fb 100644
--- a/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_class.java
+++ b/com.oracle.truffle.r.test/src/com/oracle/truffle/r/test/builtins/TestBuiltin_class.java
@@ -187,5 +187,7 @@ public class TestBuiltin_class extends TestBase {
         assertEval("{x<-c(1,2,3);class(x)}");
 
         assertEval("{x<-seq(1,10);class(x)}");
+
+        assertEval("{  gen<-function(object) 0; setGeneric(\"gen\"); class(gen) }");
     }
 }
-- 
GitLab