From d963f0c4b29da31c84850b2f14e3086777eed9af Mon Sep 17 00:00:00 2001
From: Florian Angerer <florian.angerer@oracle.com>
Date: Tue, 23 May 2017 17:51:32 +0200
Subject: [PATCH] Converting Frame to REnvironment for debugger.

---
 .../com/oracle/truffle/r/runtime/env/RScope.java    | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)

diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/RScope.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/RScope.java
index f338a25c9a..c93bf6935e 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/RScope.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/env/RScope.java
@@ -24,6 +24,7 @@ package com.oracle.truffle.r.runtime.env;
 
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.api.frame.Frame;
+import com.oracle.truffle.api.frame.MaterializedFrame;
 import com.oracle.truffle.api.interop.ForeignAccess;
 import com.oracle.truffle.api.interop.Message;
 import com.oracle.truffle.api.interop.MessageResolution;
@@ -137,8 +138,16 @@ public final class RScope extends AbstractScope {
         return new RScope(node.getRootNode(), getEnv(frame));
     }
 
-    private static Object getInteropValue(Object value) {
-        return value;
+    /**
+     * Explicitly convert some known types to interop types.
+     */
+    private static Object getInteropValue(Object obj) {
+        if (obj instanceof Frame) {
+            MaterializedFrame materialized = ((Frame) obj).materialize();
+            assert RArguments.isRFrame(materialized);
+            return REnvironment.frameToEnvironment(materialized);
+        }
+        return obj;
     }
 
     static final class VariablesMapObject implements TruffleObject {
-- 
GitLab