From 634a12daf907ea1ec185da61a63199a25d0f193f Mon Sep 17 00:00:00 2001 From: Florian Angerer <florian.angerer@oracle.com> Date: Tue, 30 May 2017 14:19:27 +0200 Subject: [PATCH] Improved .fastr.srcinfo --- .../nodes/builtin/fastr/FastRSourceInfo.java | 25 +++++++++++++++---- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRSourceInfo.java b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRSourceInfo.java index e0d1e1aa49..232cabd534 100644 --- a/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRSourceInfo.java +++ b/com.oracle.truffle.r.nodes.builtin/src/com/oracle/truffle/r/nodes/builtin/fastr/FastRSourceInfo.java @@ -22,16 +22,21 @@ */ 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.builtins.RBuiltinKind.PRIMITIVE; +import com.oracle.truffle.api.dsl.Fallback; 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.r.nodes.builtin.RBuiltinNode; import com.oracle.truffle.r.runtime.RError; import com.oracle.truffle.r.runtime.builtins.RBehavior; import com.oracle.truffle.r.runtime.builtins.RBuiltin; import com.oracle.truffle.r.runtime.data.RFunction; +import com.oracle.truffle.r.runtime.data.RLanguage; import com.oracle.truffle.r.runtime.data.RNull; /** @@ -42,17 +47,22 @@ public abstract class FastRSourceInfo extends RBuiltinNode.Arg1 { static { 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 - public Object srcInfo(@SuppressWarnings("unused") RNull fun) { - return RNull.instance; + public Object srcInfo(VirtualFrame frame, RFunction fun) { + return execute(frame, fun.getRootNode()); + } + + @Specialization + public Object srcInfo(VirtualFrame frame, RLanguage fun) { + return execute(frame, fun.getRep()); } @Specialization - public Object srcInfo(RFunction fun) { - SourceSection ss = fun.getRootNode().getSourceSection(); + protected Object srcInfo(Node fun) { + SourceSection ss = fun.getSourceSection(); if (ss != null) { String path = ss.getSource().getPath(); if (path != null) { @@ -65,4 +75,9 @@ public abstract class FastRSourceInfo extends RBuiltinNode.Arg1 { } return RNull.instance; } + + @Fallback + public Object srcInfo(@SuppressWarnings("unused") Object o) { + return RNull.instance; + } } -- GitLab