From 1dfba8580ac03599fe8456749d789bcd98e1d6cc Mon Sep 17 00:00:00 2001
From: Lukas Stadler <lukas.stadler@oracle.com>
Date: Thu, 21 Dec 2017 09:28:45 +0100
Subject: [PATCH] fix infinite recursion for non-vector, non-list
 TruffleObjects in RDeparse

---
 .../src/com/oracle/truffle/r/runtime/RDeparse.java   | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RDeparse.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RDeparse.java
index f08853a232..5a8cf2b880 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RDeparse.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/RDeparse.java
@@ -813,13 +813,15 @@ public class RDeparse {
                 }
             } else if (value instanceof TruffleObject) {
                 Object rObject = new TruffleObjectConverter().convert((TruffleObject) value);
-                append("<foreign object: ");
-                if (rObject != null) {
-                    appendConstant(rObject);
+                if (rObject == value) {
+                    append("<foreign object>");
+                } else if (rObject == null) {
+                    append("<foreign object: null>");
                 } else {
-                    append("null");
+                    append("<foreign object: ");
+                    appendConstant(rObject);
+                    append('>');
                 }
-                append('>');
             } else {
                 throw RInternalError.shouldNotReachHere("unexpected type while deparsing constant: " + value == null ? "null" : value.getClass().getSimpleName());
             }
-- 
GitLab