Skip to content
Snippets Groups Projects
Commit 0c6cf42f authored by Lukas Stadler's avatar Lukas Stadler
Browse files

various fixes in oldClass and oldClass<-

parent 9e0c2135
No related branches found
No related tags found
No related merge requests found
......@@ -475,7 +475,6 @@ public class BasePackage extends RBuiltinPackage {
add(GetFunctions.Get.class, GetFunctionsFactory.GetNodeGen::create);
add(GetFunctions.Get0.class, GetFunctionsFactory.Get0NodeGen::create);
add(GetFunctions.MGet.class, GetFunctionsFactory.MGetNodeGen::create);
add(GetOldClass.class, GetOldClassNodeGen::create);
add(OptionsFunctions.GetOption.class, OptionsFunctionsFactory.GetOptionNodeGen::create);
add(GetText.class, GetTextNodeGen::create);
add(Getwd.class, GetwdNodeGen::create);
......@@ -586,6 +585,7 @@ public class BasePackage extends RBuiltinPackage {
add(NamespaceFunctions.RegisterNamespace.class, NamespaceFunctionsFactory.RegisterNamespaceNodeGen::create);
add(NamespaceFunctions.UnregisterNamespace.class, NamespaceFunctionsFactory.UnregisterNamespaceNodeGen::create);
add(NormalizePath.class, NormalizePathNodeGen::create);
add(OldClass.class, OldClassNodeGen::create);
add(OnExit.class, OnExitNodeGen::create);
add(OptionsFunctions.Options.class, OptionsFunctionsFactory.OptionsNodeGen::create);
add(Order.class, OrderNodeGen::create);
......
......@@ -25,50 +25,37 @@ package com.oracle.truffle.r.nodes.builtin.base;
import static com.oracle.truffle.r.runtime.builtins.RBehavior.PURE;
import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE;
import com.oracle.truffle.api.dsl.Cached;
import com.oracle.truffle.api.dsl.Fallback;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.profiles.ConditionProfile;
import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.GetClassAttributeNode;
import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
import com.oracle.truffle.r.nodes.function.ClassHierarchyNode;
import com.oracle.truffle.r.runtime.builtins.RBuiltin;
import com.oracle.truffle.r.runtime.data.RFunction;
import com.oracle.truffle.r.runtime.data.RAttributable;
import com.oracle.truffle.r.runtime.data.RNull;
import com.oracle.truffle.r.runtime.data.RSymbol;
import com.oracle.truffle.r.runtime.data.model.RAbstractContainer;
@RBuiltin(name = "oldClass", kind = PRIMITIVE, parameterNames = {"x"}, behavior = PURE)
public abstract class GetOldClass extends RBuiltinNode.Arg1 {
public abstract class OldClass extends RBuiltinNode.Arg1 {
private final ConditionProfile isObjectProfile = ConditionProfile.createBinaryProfile();
@Child private GetClassAttributeNode getClassNode = GetClassAttributeNode.create();
static {
Casts.noCasts(GetOldClass.class);
Casts.noCasts(OldClass.class);
}
@Specialization
protected Object getOldClass(RAbstractContainer arg,
@Cached("createWithImplicit()") ClassHierarchyNode hierarchy) {
if (isObjectProfile.profile(getClassNode.isObject(arg))) {
return hierarchy.execute(arg);
protected Object getOldClass(RAttributable arg) {
Object clazz = getClassNode.execute(arg);
if (isObjectProfile.profile(clazz != null)) {
return clazz;
} else {
return RNull.instance;
}
}
@Specialization
protected Object getOldClass(@SuppressWarnings("unused") RSymbol arg) {
return RNull.instance;
}
@Specialization
protected Object getOldClass(@SuppressWarnings("unused") RFunction arg) {
return RNull.instance;
}
@Specialization
protected Object getOldClass(@SuppressWarnings("unused") RNull arg) {
@Fallback
protected Object getOldClass(@SuppressWarnings("unused") Object arg) {
return RNull.instance;
}
}
......@@ -33,6 +33,7 @@ import com.oracle.truffle.r.nodes.attributes.SpecialAttributesFunctions.SetClass
import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
import com.oracle.truffle.r.nodes.unary.CastStringNode;
import com.oracle.truffle.r.nodes.unary.CastStringNodeGen;
import com.oracle.truffle.r.runtime.RError.Message;
import com.oracle.truffle.r.runtime.builtins.RBuiltin;
import com.oracle.truffle.r.runtime.data.RDataFactory;
import com.oracle.truffle.r.runtime.data.RNull;
......@@ -89,4 +90,9 @@ public abstract class UpdateOldClass extends RBuiltinNode.Arg2 {
setClassAttributeNode.reset(result);
return result;
}
@Specialization
protected Object setOldClass(@SuppressWarnings("unused") RNull arg, @SuppressWarnings("unused") Object className) {
throw error(Message.INVALID_NULL_LHS);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment