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

handle non-FunctionDefinitionNode in Body

parent 50cfce41
Branches
No related tags found
No related merge requests found
......@@ -25,7 +25,10 @@ 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.INTERNAL;
import com.oracle.truffle.api.dsl.Cached;
import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.nodes.RootNode;
import com.oracle.truffle.api.profiles.ConditionProfile;
import com.oracle.truffle.r.nodes.RASTUtils;
import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
import com.oracle.truffle.r.nodes.function.FunctionDefinitionNode;
......@@ -41,9 +44,15 @@ public abstract class Body extends RBuiltinNode {
}
@Specialization
protected Object doBody(RFunction fun) {
FunctionDefinitionNode fdn = (FunctionDefinitionNode) fun.getRootNode();
return RASTUtils.createLanguageElement(fdn.getBody());
protected Object doBody(RFunction fun,
@Cached("createBinaryProfile()") ConditionProfile profile) {
RootNode root = fun.getRootNode();
if (profile.profile(root instanceof FunctionDefinitionNode)) {
FunctionDefinitionNode fdn = (FunctionDefinitionNode) root;
return RASTUtils.createLanguageElement(fdn.getBody());
} else {
return RNull.instance;
}
}
@Specialization(guards = "!isRFunction(fun)")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment