diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java index 0650d59a1b7c4b3542b0aa58d5ce8fb5284d106e..a1eb0d12b6a2843765e0b8f1a2cab101114a6e74 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BasePackage.java @@ -167,6 +167,7 @@ public class BasePackage extends RBuiltinPackage { add(CumMin.class, CumMinNodeGen::create); add(CumProd.class, CumProdNodeGen::create); add(CumSum.class, CumSumNodeGen::create); + add(CacheClass.class, CacheClassNodeGen::create); add(Date.class, DateNodeGen::create); add(DatePOSIXFunctions.Date2POSIXlt.class, DatePOSIXFunctionsFactory.Date2POSIXltNodeGen::create); add(DatePOSIXFunctions.AsPOSIXct.class, DatePOSIXFunctionsFactory.AsPOSIXctNodeGen::create); diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/CacheClass.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/CacheClass.java new file mode 100644 index 0000000000000000000000000000000000000000..41e02a380d3aabee9cf18e4c9c4e6f1db5e7fcb9 --- /dev/null +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/CacheClass.java @@ -0,0 +1,43 @@ +/* + * This material is distributed under the GNU General Public License + * Version 2. You may review the terms of this license at + * http://www.gnu.org/licenses/gpl-2.0.html + * + * Copyright (c) 1995, 1996, 1997 Robert Gentleman and Ross Ihaka + * Copyright (c) 1995-2014, The R Core Team + * Copyright (c) 2002-2008, The R Foundation + * Copyright (c) 2015, Oracle and/or its affiliates + * + * All rights reserved. + */ +package com.oracle.truffle.r.nodes.builtin.base; + +import static com.oracle.truffle.r.runtime.RBuiltinKind.*; + +import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; +import com.oracle.truffle.api.dsl.*; +import com.oracle.truffle.r.nodes.builtin.*; +import com.oracle.truffle.r.runtime.*; +import com.oracle.truffle.r.runtime.context.RContext; +import com.oracle.truffle.r.runtime.data.RStringVector; +import com.oracle.truffle.r.runtime.data.model.*; + +@RBuiltin(name = ".cache_class", kind = PRIMITIVE, parameterNames = {"class", "extends"}) +public abstract class CacheClass extends RBuiltinNode { + + @TruffleBoundary + @Specialization + protected RAbstractStringVector getClass(Object cl, RAbstractStringVector ext) { + controlVisibility(); + String clString; + if (cl instanceof String) { + clString = (String) cl; + } else if (cl instanceof RStringVector && ((RStringVector) cl).getLength() == 1) { + clString = ((RStringVector) cl).getDataAt(0); + } else { + throw RError.error(this, RError.Message.GENERIC, "invalid class argument to internal .class_cache"); + } + RContext.getInstance().putS4Extends(clString, ext.materialize()); + return null; + } +} 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 e5c7e1e14daa7b91a8518ccf9b50e6871991cbec..ef8473cef0a66b31f64dd250098b8778e2c49b9d 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 @@ -155,6 +155,7 @@ abstract class S4Class extends RBaseNode { // the assumption here is that R function can only return either a String or // RStringVector s4Extends = (RStringVector) castToVector.execute(RContext.getEngine().evalFunction(sExtendsForS3Function, methodsEnv.getFrame(), classAttr)); + RContext.getInstance().putS4Extends(classAttr, s4Extends); } return s4Extends; } diff --git a/mx.fastr/copyrights/overrides b/mx.fastr/copyrights/overrides index 33e55dbe359fd1a3d42d008e875e2f9c91def8d1..bbadf0434a3330a16ddc71327afd3683b1951965 100644 --- a/mx.fastr/copyrights/overrides +++ b/mx.fastr/copyrights/overrides @@ -99,6 +99,7 @@ com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/B com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BaseVariables.java,gnu_r.copyright com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/Bincode.java,gnu_r.copyright com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/BitwiseFunctions.java,purdue.copyright +com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/CacheClass.java,gnu_r_gentleman_ihaka.copyright com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/CharMatch.java,purdue.copyright com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ColMeans.java,purdue.copyright com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/base/ConditionFunctions.java,gnu_r.copyright