From 8dec54ac853d2314fd1fb9adef709a579f3cccae Mon Sep 17 00:00:00 2001
From: Zbynek Slajchrt <zbynek.slajchrt@oracle.com>
Date: Wed, 27 Jun 2018 14:44:19 +0200
Subject: [PATCH] CharSXPWrapper caching fixed

---
 .../com/oracle/truffle/r/runtime/data/CharSXPWrapper.java   | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/CharSXPWrapper.java b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/CharSXPWrapper.java
index fef272dea7..1d292d32d8 100644
--- a/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/CharSXPWrapper.java
+++ b/com.oracle.truffle.r.runtime/src/com/oracle/truffle/r/runtime/data/CharSXPWrapper.java
@@ -26,6 +26,8 @@ import java.nio.charset.StandardCharsets;
 
 import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
 import com.oracle.truffle.r.runtime.RRuntime;
+import com.oracle.truffle.r.runtime.Utils;
+
 import java.lang.ref.WeakReference;
 import java.util.Map;
 import java.util.WeakHashMap;
@@ -49,7 +51,7 @@ public final class CharSXPWrapper extends RObject implements RTruffleObject {
     private static final Map<CharSXPWrapper, WeakReference<CharSXPWrapper>> instances = new WeakHashMap<>(2048);
 
     private CharSXPWrapper(String contents) {
-        this.contents = contents;
+        this.contents = Utils.intern(contents);
     }
 
     @TruffleBoundary
@@ -61,7 +63,7 @@ public final class CharSXPWrapper extends RObject implements RTruffleObject {
             return RRuntime.STRING_NA;
         }
         // WARNING:
-        // we keep and use the contens value even in cases when contets got allocated and could be
+        // we keep and use the contents value even in cases when contents got allocated and could be
         // accessed via NativeDataAccess.getData():
         // - when used with RSymbol the String has to be interned - NDA.getData() will create a new
         // instance if already allocated
-- 
GitLab