From e996a7625537e0f1416a843e1f7c8789e98c0fb8 Mon Sep 17 00:00:00 2001
From: stepan <stepan.sindelar@oracle.com>
Date: Fri, 6 Oct 2017 14:00:45 +0200
Subject: [PATCH] Fix Fallback in GetDataStore node

---
 .../src/com/oracle/truffle/r/runtime/data/RVector.java      | 2 +-
 .../oracle/truffle/r/runtime/data/nodes/GetDataStore.java   | 6 ++++++
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RVector.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RVector.java
index f13b35c636..5f7239c993 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RVector.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/RVector.java
@@ -94,7 +94,7 @@ public abstract class RVector<ArrayT> extends RSharingAttributeStorage implement
      */
     public abstract ArrayT getInternalManagedData();
 
-    public boolean hasNativeMemoryData() {
+    public final boolean hasNativeMemoryData() {
         return getInternalManagedData() == null;
     }
 
diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/GetDataStore.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/GetDataStore.java
index d3587b1ed9..e71c465201 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/GetDataStore.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/nodes/GetDataStore.java
@@ -55,6 +55,12 @@ public abstract class GetDataStore extends Node {
 
     @Fallback
     protected Object doFallback(RAbstractVector vector) {
+        if (noNativeMemoryData(vector)) {
+            RVector<?> vec = (RVector<?>) vector;
+            if (vec.hasNativeMemoryData()) {
+                return vec.getNativeMirror();
+            }
+        }
         return vector.getInternalStore();
     }
 
-- 
GitLab