From 032bd5618d3d58647cc796ee1332e26d1cfe2a91 Mon Sep 17 00:00:00 2001
From: Michael Haupt <michael.haupt@oracle.com>
Date: Tue, 28 Jan 2014 15:14:42 +0100
Subject: [PATCH] source code printing for builtins (prototype)

---
 .../com/oracle/truffle/r/nodes/RRootNode.java    |  5 +++++
 .../truffle/r/nodes/builtin/RBuiltinNode.java    | 16 ++++++++++++++++
 .../r/nodes/builtin/RBuiltinRootNode.java        |  6 ++++++
 .../truffle/r/nodes/builtin/RLibraryLoader.java  |  2 +-
 .../r/nodes/builtin/base/PrettyPrinterNode.java  |  2 +-
 5 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RRootNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RRootNode.java
index 9739d9b94b..a6902d2716 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RRootNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/RRootNode.java
@@ -42,4 +42,9 @@ public abstract class RRootNode extends RootNode {
     public int getParameterCount() {
         return parameterNames.length;
     }
+
+    public String getSourceCode() {
+        return getSourceSection().getCode();
+    }
+
 }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinNode.java
index 7088ea6b61..a214b61b1a 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinNode.java
@@ -25,6 +25,7 @@ package com.oracle.truffle.r.nodes.builtin;
 import com.oracle.truffle.api.*;
 import com.oracle.truffle.api.dsl.*;
 import com.oracle.truffle.api.frame.*;
+import com.oracle.truffle.api.impl.*;
 import com.oracle.truffle.api.nodes.*;
 import com.oracle.truffle.r.nodes.*;
 import com.oracle.truffle.r.nodes.access.*;
@@ -37,6 +38,10 @@ import com.oracle.truffle.r.runtime.data.*;
 @NodeChild(value = "arguments", type = RNode[].class)
 public abstract class RBuiltinNode extends CallNode {
 
+    public String getSourceCode() {
+        return "<builtin>";
+    }
+
     public abstract RNode[] getArguments();
 
     public abstract RBuiltinFactory getBuiltin();
@@ -234,6 +239,11 @@ public abstract class RBuiltinNode extends CallNode {
             return builtin;
         }
 
+        @Override
+        public String getSourceCode() {
+            return "<custom builtin>";
+        }
+
     }
 
     public static class RSnippetNode extends RCustomBuiltinNode {
@@ -243,11 +253,17 @@ public abstract class RBuiltinNode extends CallNode {
         public RSnippetNode(RNode[] arguments, RBuiltinFactory builtin, FunctionExpressionNode function) {
             super(arguments, builtin);
             snippetCall = adoptChild(CallNode.createCall(function, CallArgumentsNode.create(getArguments(), new String[]{})));
+            assignSourceSection(((DefaultCallTarget) ((FunctionExpressionNode.StaticFunctionExpressionNode) function).getFunction().getTarget()).getRootNode().getSourceSection());
         }
 
         @Override
         public Object execute(VirtualFrame frame) {
             return snippetCall.execute(frame);
         }
+
+        @Override
+        public String getSourceCode() {
+            return getSourceSection().getCode();
+        }
     }
 }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinRootNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinRootNode.java
index e79eb80d2c..a0427b5acb 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinRootNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RBuiltinRootNode.java
@@ -43,4 +43,10 @@ public final class RBuiltinRootNode extends RRootNode {
     public CallNode inline(CallArgumentsNode args) {
         return builtin.inline(args);
     }
+
+    @Override
+    public String getSourceCode() {
+        return builtin.getSourceCode();
+    }
+
 }
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RLibraryLoader.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RLibraryLoader.java
index 4cddc47142..2122f319ad 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RLibraryLoader.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/RLibraryLoader.java
@@ -56,7 +56,7 @@ public class RLibraryLoader {
                 WriteVariableNode.UnresolvedWriteLocalVariableNode fnDef = (WriteVariableNode.UnresolvedWriteLocalVariableNode) libNode;
                 String builtinName = fnDef.getSymbol().toString();
                 FunctionExpressionNode.DynamicFunctionExpressionNode builtinExpr = (FunctionExpressionNode.DynamicFunctionExpressionNode) fnDef.getRhs();
-                builtinDefs.put(builtinName, new FunctionExpressionNode.StaticFunctionExpressionNode(new RFunction("", builtinExpr.getCallTarget(), false)));
+                builtinDefs.put(builtinName, new FunctionExpressionNode.StaticFunctionExpressionNode(new RFunction(builtinName, builtinExpr.getCallTarget(), false)));
             }
         }
         return builtinDefs;
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/PrettyPrinterNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/PrettyPrinterNode.java
index e1eff2930b..7e4c08e898 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/PrettyPrinterNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/builtin/base/PrettyPrinterNode.java
@@ -100,7 +100,7 @@ public abstract class PrettyPrinterNode extends RNode {
 
     @Specialization
     public String prettyPrint(RFunction operand) {
-        return ((DefaultCallTarget) operand.getTarget()).getRootNode().getSourceSection().getCode();
+        return ((RRootNode) ((DefaultCallTarget) operand.getTarget()).getRootNode()).getSourceCode();
     }
 
     @Specialization
-- 
GitLab