From ee8f60926b06418ed584c1ef42454d7b503c2a12 Mon Sep 17 00:00:00 2001
From: Lukas Stadler <lukas.stadler@oracle.com>
Date: Thu, 3 Aug 2017 17:19:53 +0200
Subject: [PATCH] more careful with "null" source sections: wrappers need to
 return their delegate's source sections

---
 .../r/nodes/function/RCallBaseNodeWrapperFactory.java  |  6 ++++++
 .../truffle/r/nodes/function/WrapArgumentBaseNode.java | 10 ++++++++--
 .../nodes/instrumentation/RNodeWrapperFactory.java     |  6 ++++++
 3 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallBaseNodeWrapperFactory.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallBaseNodeWrapperFactory.java
index 70d38d3f29..8bb9c406ad 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallBaseNodeWrapperFactory.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/RCallBaseNodeWrapperFactory.java
@@ -28,6 +28,7 @@ import com.oracle.truffle.api.instrumentation.ProbeNode;
 import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.nodes.NodeCost;
 import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
 import com.oracle.truffle.r.runtime.nodes.RSyntaxNode;
 
 public class RCallBaseNodeWrapperFactory implements InstrumentableFactory<RCallBaseNode> {
@@ -96,6 +97,11 @@ public class RCallBaseNodeWrapperFactory implements InstrumentableFactory<RCallB
         public RSyntaxNode getRSyntaxNode() {
             return delegate.asRSyntaxNode();
         }
+
+        @Override
+        public SourceSection getSourceSection() {
+            return delegate.getSourceSection();
+        }
     }
 
     @Override
diff --git a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/WrapArgumentBaseNode.java b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/WrapArgumentBaseNode.java
index a86dd95a42..6822dd5e8a 100644
--- a/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/WrapArgumentBaseNode.java
+++ b/com.oracle.truffle.r.nodes/src/com/oracle/truffle/r/nodes/function/WrapArgumentBaseNode.java
@@ -24,6 +24,7 @@ package com.oracle.truffle.r.nodes.function;
 
 import com.oracle.truffle.api.frame.VirtualFrame;
 import com.oracle.truffle.api.profiles.ConditionProfile;
+import com.oracle.truffle.api.source.SourceSection;
 import com.oracle.truffle.r.runtime.RInternalError;
 import com.oracle.truffle.r.runtime.data.RSharingAttributeStorage;
 import com.oracle.truffle.r.runtime.nodes.RNode;
@@ -42,7 +43,7 @@ public abstract class WrapArgumentBaseNode extends RNode {
         this.operand = operand;
     }
 
-    public RNode getOperand() {
+    public final RNode getOperand() {
         return operand;
     }
 
@@ -76,6 +77,11 @@ public abstract class WrapArgumentBaseNode extends RNode {
 
     @Override
     public RSyntaxNode getRSyntaxNode() {
-        return getOperand().asRSyntaxNode();
+        return operand == null ? null : operand.asRSyntaxNode();
+    }
+
+    @Override
+    public SourceSection getSourceSection() {
+        return operand == null ? null : operand.getSourceSection();
     }
 }
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nodes/instrumentation/RNodeWrapperFactory.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nodes/instrumentation/RNodeWrapperFactory.java
index b385fc6fe9..de50cdebb7 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nodes/instrumentation/RNodeWrapperFactory.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/nodes/instrumentation/RNodeWrapperFactory.java
@@ -28,6 +28,7 @@ import com.oracle.truffle.api.instrumentation.ProbeNode;
 import com.oracle.truffle.api.nodes.Node;
 import com.oracle.truffle.api.nodes.NodeCost;
 import com.oracle.truffle.api.nodes.NodeInfo;
+import com.oracle.truffle.api.source.SourceSection;
 import com.oracle.truffle.r.runtime.nodes.RNode;
 import com.oracle.truffle.r.runtime.nodes.RSyntaxNode;
 
@@ -97,6 +98,11 @@ public final class RNodeWrapperFactory implements InstrumentableFactory<RNode> {
         public RSyntaxNode getRSyntaxNode() {
             return delegate.asRSyntaxNode();
         }
+
+        @Override
+        public SourceSection getSourceSection() {
+            return delegate.getSourceSection();
+        }
     }
 
     @Override
-- 
GitLab