changeset 22251:8dddde8b20d4

Truffle/SL: provide an "unavailable" SourceSection for every RootNode, using a newly defined static name that identifies "SL Builtin" RootNodes.
author Michael Van De Vanter <michael.van.de.vanter@oracle.com>
date Thu, 24 Sep 2015 13:16:52 -0700
parents 0fb3522e5b72
children a2db5ebb5c4b
files truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/SLLanguage.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLAssertFalseBuiltin.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLAssertTrueBuiltin.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLDefineFunctionBuiltin.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLHelloEqualsWorldBuiltin.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLNanoTimeBuiltin.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLNewObjectBuiltin.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLPrintlnBuiltin.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLReadlnBuiltin.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLStackTraceBuiltin.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLRootNode.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/SLNodeFactory.java truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLContext.java
diffstat 13 files changed, 29 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/SLLanguage.java	Thu Sep 24 13:15:45 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/SLLanguage.java	Thu Sep 24 13:16:52 2015 -0700
@@ -198,6 +198,7 @@
  */
 @TruffleLanguage.Registration(name = "SL", version = "0.5", mimeType = "application/x-sl")
 public final class SLLanguage extends TruffleLanguage<SLContext> {
+    public static final String builtinKind = "SL builtin";
     private static List<NodeFactory<? extends SLBuiltinNode>> builtins = Collections.emptyList();
     private static Visualizer visualizer = new SLDefaultVisualizer();
     private ASTProber astProber = new SLStandardASTProber();
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLAssertFalseBuiltin.java	Thu Sep 24 13:15:45 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLAssertFalseBuiltin.java	Thu Sep 24 13:16:52 2015 -0700
@@ -45,6 +45,7 @@
 import com.oracle.truffle.api.nodes.NodeInfo;
 import com.oracle.truffle.api.source.SourceSection;
 import com.oracle.truffle.sl.SLAssertionError;
+import com.oracle.truffle.sl.SLLanguage;
 import com.oracle.truffle.sl.runtime.SLNull;
 
 /**
@@ -55,7 +56,7 @@
 public abstract class SLAssertFalseBuiltin extends SLBuiltinNode {
 
     public SLAssertFalseBuiltin() {
-        super(SourceSection.createUnavailable("SL builtin", "assertFalse"));
+        super(SourceSection.createUnavailable(SLLanguage.builtinKind, "assertFalse"));
     }
 
     @Specialization
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLAssertTrueBuiltin.java	Thu Sep 24 13:15:45 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLAssertTrueBuiltin.java	Thu Sep 24 13:16:52 2015 -0700
@@ -45,6 +45,7 @@
 import com.oracle.truffle.api.nodes.NodeInfo;
 import com.oracle.truffle.api.source.SourceSection;
 import com.oracle.truffle.sl.SLAssertionError;
+import com.oracle.truffle.sl.SLLanguage;
 import com.oracle.truffle.sl.runtime.SLNull;
 
 /**
@@ -55,7 +56,7 @@
 public abstract class SLAssertTrueBuiltin extends SLBuiltinNode {
 
     public SLAssertTrueBuiltin() {
-        super(SourceSection.createUnavailable("SL builtin", "assertTrue"));
+        super(SourceSection.createUnavailable(SLLanguage.builtinKind, "assertTrue"));
     }
 
     @Specialization
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLDefineFunctionBuiltin.java	Thu Sep 24 13:15:45 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLDefineFunctionBuiltin.java	Thu Sep 24 13:16:52 2015 -0700
@@ -45,6 +45,7 @@
 import com.oracle.truffle.api.nodes.NodeInfo;
 import com.oracle.truffle.api.source.Source;
 import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.SLLanguage;
 import com.oracle.truffle.sl.parser.Parser;
 import com.oracle.truffle.sl.runtime.SLContext;
 
@@ -56,7 +57,7 @@
 public abstract class SLDefineFunctionBuiltin extends SLBuiltinNode {
 
     public SLDefineFunctionBuiltin() {
-        super(SourceSection.createUnavailable("SL builtin", "defineFunction"));
+        super(SourceSection.createUnavailable(SLLanguage.builtinKind, "defineFunction"));
     }
 
     @Specialization
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLHelloEqualsWorldBuiltin.java	Thu Sep 24 13:15:45 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLHelloEqualsWorldBuiltin.java	Thu Sep 24 13:16:52 2015 -0700
@@ -49,6 +49,7 @@
 import com.oracle.truffle.api.frame.FrameSlot;
 import com.oracle.truffle.api.nodes.NodeInfo;
 import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.SLLanguage;
 
 /**
  * This builtin sets the variable named "hello" in the caller frame to the string "world".
@@ -57,7 +58,7 @@
 public abstract class SLHelloEqualsWorldBuiltin extends SLBuiltinNode {
 
     public SLHelloEqualsWorldBuiltin() {
-        super(SourceSection.createUnavailable("SL builtin", "helloEqualsWorld"));
+        super(SourceSection.createUnavailable(SLLanguage.builtinKind, "helloEqualsWorld"));
     }
 
     @Specialization
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLNanoTimeBuiltin.java	Thu Sep 24 13:15:45 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLNanoTimeBuiltin.java	Thu Sep 24 13:16:52 2015 -0700
@@ -43,6 +43,7 @@
 import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.nodes.NodeInfo;
 import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.SLLanguage;
 
 /**
  * Builtin function that returns the value of a high-resolution time, in nanoseconds.
@@ -51,7 +52,7 @@
 public abstract class SLNanoTimeBuiltin extends SLBuiltinNode {
 
     public SLNanoTimeBuiltin() {
-        super(SourceSection.createUnavailable("SL builtin", "nanoTime"));
+        super(SourceSection.createUnavailable(SLLanguage.builtinKind, "nanoTime"));
     }
 
     @Specialization
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLNewObjectBuiltin.java	Thu Sep 24 13:15:45 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLNewObjectBuiltin.java	Thu Sep 24 13:16:52 2015 -0700
@@ -43,6 +43,7 @@
 import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.nodes.NodeInfo;
 import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.SLLanguage;
 
 /**
  * Built-in function to create a new object. Objects in SL are simply made up of name/value pairs.
@@ -51,7 +52,7 @@
 public abstract class SLNewObjectBuiltin extends SLBuiltinNode {
 
     public SLNewObjectBuiltin() {
-        super(SourceSection.createUnavailable("SL builtin", "new"));
+        super(SourceSection.createUnavailable(SLLanguage.builtinKind, "new"));
     }
 
     @Specialization
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLPrintlnBuiltin.java	Thu Sep 24 13:15:45 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLPrintlnBuiltin.java	Thu Sep 24 13:16:52 2015 -0700
@@ -44,7 +44,9 @@
 import com.oracle.truffle.api.dsl.Specialization;
 import com.oracle.truffle.api.nodes.NodeInfo;
 import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.SLLanguage;
 import com.oracle.truffle.sl.runtime.SLContext;
+
 import java.io.PrintWriter;
 
 /**
@@ -60,7 +62,7 @@
 public abstract class SLPrintlnBuiltin extends SLBuiltinNode {
 
     public SLPrintlnBuiltin() {
-        super(SourceSection.createUnavailable("SL builtin", "println"));
+        super(SourceSection.createUnavailable(SLLanguage.builtinKind, "println"));
     }
 
     @Specialization
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLReadlnBuiltin.java	Thu Sep 24 13:15:45 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLReadlnBuiltin.java	Thu Sep 24 13:16:52 2015 -0700
@@ -45,7 +45,9 @@
 import com.oracle.truffle.api.nodes.NodeInfo;
 import com.oracle.truffle.api.source.SourceSection;
 import com.oracle.truffle.sl.SLException;
+import com.oracle.truffle.sl.SLLanguage;
 import com.oracle.truffle.sl.runtime.SLContext;
+
 import java.io.BufferedReader;
 import java.io.IOException;
 
@@ -56,7 +58,7 @@
 public abstract class SLReadlnBuiltin extends SLBuiltinNode {
 
     public SLReadlnBuiltin() {
-        super(SourceSection.createUnavailable("SL builtin", "readln"));
+        super(SourceSection.createUnavailable(SLLanguage.builtinKind, "readln"));
     }
 
     @Specialization
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLStackTraceBuiltin.java	Thu Sep 24 13:15:45 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/builtins/SLStackTraceBuiltin.java	Thu Sep 24 13:16:52 2015 -0700
@@ -54,6 +54,7 @@
 import com.oracle.truffle.api.nodes.NodeInfo;
 import com.oracle.truffle.api.nodes.RootNode;
 import com.oracle.truffle.api.source.SourceSection;
+import com.oracle.truffle.sl.SLLanguage;
 
 /**
  * Returns a string representation of the current stack. This includes the {@link CallTarget}s and
@@ -64,7 +65,7 @@
 public abstract class SLStackTraceBuiltin extends SLBuiltinNode {
 
     public SLStackTraceBuiltin() {
-        super(SourceSection.createUnavailable("SL builtin", "stacktrace"));
+        super(SourceSection.createUnavailable(SLLanguage.builtinKind, "stacktrace"));
     }
 
     @Specialization
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLRootNode.java	Thu Sep 24 13:15:45 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/nodes/SLRootNode.java	Thu Sep 24 13:16:52 2015 -0700
@@ -45,6 +45,7 @@
 import com.oracle.truffle.api.frame.VirtualFrame;
 import com.oracle.truffle.api.nodes.NodeInfo;
 import com.oracle.truffle.api.nodes.RootNode;
+import com.oracle.truffle.api.source.SourceSection;
 import com.oracle.truffle.sl.SLLanguage;
 import com.oracle.truffle.sl.builtins.SLBuiltinNode;
 import com.oracle.truffle.sl.nodes.controlflow.SLFunctionBodyNode;
@@ -68,7 +69,7 @@
     @CompilationFinal private boolean isCloningAllowed;
 
     @SuppressWarnings("unused")
-    public SLRootNode(SLContext ignore, FrameDescriptor frameDescriptor, SLExpressionNode bodyNode, String name) {
+    public SLRootNode(SLContext ignore, FrameDescriptor frameDescriptor, SLExpressionNode bodyNode, SourceSection sourceSection, String name) {
         super(SLLanguage.class, null, frameDescriptor);
         this.bodyNode = bodyNode;
         this.name = name;
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/SLNodeFactory.java	Thu Sep 24 13:15:45 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/parser/SLNodeFactory.java	Thu Sep 24 13:16:52 2015 -0700
@@ -166,8 +166,7 @@
         assert lexicalScope == null : "Wrong scoping of blocks in parser";
 
         final SLFunctionBodyNode functionBodyNode = new SLFunctionBodyNode(functionSrc, methodBlock);
-        final SLRootNode rootNode = new SLRootNode(this.context, frameDescriptor, functionBodyNode, functionName);
-        rootNode.assignSourceSection(functionSrc);
+        final SLRootNode rootNode = new SLRootNode(this.context, frameDescriptor, functionBodyNode, functionSrc, functionName);
 
         context.getFunctionRegistry().register(functionName, rootNode);
 
--- a/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLContext.java	Thu Sep 24 13:15:45 2015 -0700
+++ b/truffle/com.oracle.truffle.sl/src/com/oracle/truffle/sl/runtime/SLContext.java	Thu Sep 24 13:16:52 2015 -0700
@@ -48,6 +48,7 @@
 import com.oracle.truffle.api.object.Layout;
 import com.oracle.truffle.api.object.Shape;
 import com.oracle.truffle.api.source.Source;
+import com.oracle.truffle.api.source.SourceSection;
 import com.oracle.truffle.sl.SLLanguage;
 import com.oracle.truffle.sl.builtins.SLAssertFalseBuiltinFactory;
 import com.oracle.truffle.sl.builtins.SLAssertTrueBuiltinFactory;
@@ -66,6 +67,7 @@
 import com.oracle.truffle.sl.nodes.local.SLReadArgumentNode;
 import com.oracle.truffle.sl.parser.Parser;
 import com.oracle.truffle.sl.parser.SLNodeFactory;
+
 import java.io.BufferedReader;
 import java.io.PrintWriter;
 import java.math.BigInteger;
@@ -170,8 +172,10 @@
         SLBuiltinNode builtinBodyNode = factory.createNode(argumentNodes, this);
         /* The name of the builtin function is specified via an annotation on the node class. */
         String name = lookupNodeInfo(builtinBodyNode.getClass()).shortName();
+
+        final SourceSection srcSection = SourceSection.createUnavailable(SLLanguage.builtinKind, name);
         /* Wrap the builtin in a RootNode. Truffle requires all AST to start with a RootNode. */
-        SLRootNode rootNode = new SLRootNode(this, new FrameDescriptor(), builtinBodyNode, name);
+        SLRootNode rootNode = new SLRootNode(this, new FrameDescriptor(), builtinBodyNode, srcSection, name);
 
         if (registerRootNodes) {
             /* Register the builtin function in our function registry. */