Skip to content
Snippets Groups Projects
Commit 634a12da authored by Florian Angerer's avatar Florian Angerer
Browse files

Improved .fastr.srcinfo

parent d46cec84
No related branches found
No related tags found
No related merge requests found
...@@ -22,16 +22,21 @@ ...@@ -22,16 +22,21 @@
*/ */
package com.oracle.truffle.r.nodes.builtin.fastr; package com.oracle.truffle.r.nodes.builtin.fastr;
import static com.oracle.truffle.r.nodes.builtin.CastBuilder.Predef.instanceOf;
import static com.oracle.truffle.r.runtime.RVisibility.ON; import static com.oracle.truffle.r.runtime.RVisibility.ON;
import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE; import static com.oracle.truffle.r.runtime.builtins.RBuiltinKind.PRIMITIVE;
import com.oracle.truffle.api.dsl.Fallback;
import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.dsl.Specialization;
import com.oracle.truffle.api.frame.VirtualFrame;
import com.oracle.truffle.api.nodes.Node;
import com.oracle.truffle.api.source.SourceSection; import com.oracle.truffle.api.source.SourceSection;
import com.oracle.truffle.r.nodes.builtin.RBuiltinNode; import com.oracle.truffle.r.nodes.builtin.RBuiltinNode;
import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.RError;
import com.oracle.truffle.r.runtime.builtins.RBehavior; import com.oracle.truffle.r.runtime.builtins.RBehavior;
import com.oracle.truffle.r.runtime.builtins.RBuiltin; import com.oracle.truffle.r.runtime.builtins.RBuiltin;
import com.oracle.truffle.r.runtime.data.RFunction; import com.oracle.truffle.r.runtime.data.RFunction;
import com.oracle.truffle.r.runtime.data.RLanguage;
import com.oracle.truffle.r.runtime.data.RNull; import com.oracle.truffle.r.runtime.data.RNull;
/** /**
...@@ -42,17 +47,22 @@ public abstract class FastRSourceInfo extends RBuiltinNode.Arg1 { ...@@ -42,17 +47,22 @@ public abstract class FastRSourceInfo extends RBuiltinNode.Arg1 {
static { static {
Casts casts = new Casts(FastRSourceInfo.class); Casts casts = new Casts(FastRSourceInfo.class);
casts.arg("fun").defaultError(RError.Message.GENERIC, "Only functions are allowed.").mustBe(RFunction.class); casts.arg("fun").defaultError(RError.Message.GENERIC, "Only functions are allowed.").mustBe(instanceOf(RFunction.class).or(instanceOf(RLanguage.class)));
} }
@Specialization @Specialization
public Object srcInfo(@SuppressWarnings("unused") RNull fun) { public Object srcInfo(VirtualFrame frame, RFunction fun) {
return RNull.instance; return execute(frame, fun.getRootNode());
}
@Specialization
public Object srcInfo(VirtualFrame frame, RLanguage fun) {
return execute(frame, fun.getRep());
} }
@Specialization @Specialization
public Object srcInfo(RFunction fun) { protected Object srcInfo(Node fun) {
SourceSection ss = fun.getRootNode().getSourceSection(); SourceSection ss = fun.getSourceSection();
if (ss != null) { if (ss != null) {
String path = ss.getSource().getPath(); String path = ss.getSource().getPath();
if (path != null) { if (path != null) {
...@@ -65,4 +75,9 @@ public abstract class FastRSourceInfo extends RBuiltinNode.Arg1 { ...@@ -65,4 +75,9 @@ public abstract class FastRSourceInfo extends RBuiltinNode.Arg1 {
} }
return RNull.instance; return RNull.instance;
} }
@Fallback
public Object srcInfo(@SuppressWarnings("unused") Object o) {
return RNull.instance;
}
} }
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