Skip to content

Commit 042fe1f

Browse files
committed
Ensure all ImmutableRubyString are interned
1 parent dcdf917 commit 042fe1f

File tree

5 files changed

+7
-12
lines changed

5 files changed

+7
-12
lines changed

src/main/java/org/truffleruby/core/CoreLibrary.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -740,7 +740,7 @@ private ImmutableRubyString frozenUSASCIIString(String string) {
740740
// NOTE(norswap, Nov. 2nd 2020): Okay for language access to be slow, currently only used during initialization.
741741
final LeafRope rope = language.ropeCache.getRope(
742742
StringOperations.encodeRope(string, USASCIIEncoding.INSTANCE, CodeRange.CR_7BIT));
743-
return StringOperations.createFrozenString(rope);
743+
return language.getFrozenStringLiteral(rope);
744744
}
745745

746746
private RubyClass defineClass(String name) {

src/main/java/org/truffleruby/core/encoding/EncodingManager.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
import org.truffleruby.core.rope.Rope;
3737
import org.truffleruby.core.rope.RopeOperations;
3838
import org.truffleruby.core.string.EncodingUtils;
39-
import org.truffleruby.core.string.StringOperations;
4039
import org.truffleruby.extra.ffi.Pointer;
4140
import org.truffleruby.language.ImmutableRubyString;
4241
import org.truffleruby.platform.NativeConfiguration;
@@ -183,11 +182,11 @@ private RubyEncoding newRubyEncoding(Encoding encoding, byte[] name, int p, int
183182
"; name.length = " + name.length + ")";
184183

185184
final Rope rope = RopeOperations.create(name, USASCIIEncoding.INSTANCE, CodeRange.CR_7BIT);
186-
final LeafRope cachedRope = context.getLanguageSlow().ropeCache.getRope(
185+
final LeafRope cachedRope = language.ropeCache.getRope(
187186
rope.getBytes(),
188187
rope.getEncoding(),
189188
rope.getCodeRange());
190-
final ImmutableRubyString string = StringOperations.createFrozenString(cachedRope);
189+
final ImmutableRubyString string = language.getFrozenStringLiteral(cachedRope);
191190

192191
final RubyEncoding instance = new RubyEncoding(
193192
context.getCoreLibrary().encodingClass,

src/main/java/org/truffleruby/core/string/FrozenStringLiterals.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public ImmutableRubyString getFrozenStringLiteral(LeafRope rope) {
2323
if (string != null) {
2424
return string;
2525
} else {
26-
return values.addInCacheIfAbsent(rope, StringOperations.createFrozenString(rope));
26+
return values.addInCacheIfAbsent(rope, new ImmutableRubyString(rope));
2727
}
2828
}
2929

src/main/java/org/truffleruby/core/string/StringOperations.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@
4848
import org.truffleruby.core.rope.RopeOperations;
4949

5050
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
51-
import org.truffleruby.language.ImmutableRubyString;
5251
import org.truffleruby.language.RubyContextSourceNode;
5352
import org.truffleruby.language.objects.AllocationTracing;
5453

@@ -74,11 +73,6 @@ public static RubyString createString(RubyContext context, RubyLanguage language
7473
return instance;
7574
}
7675

77-
// TODO BJF Aug-3-2020 Trace more allocations of RubyString
78-
public static ImmutableRubyString createFrozenString(LeafRope rope) {
79-
return new ImmutableRubyString(rope);
80-
}
81-
8276
public static int clampExclusiveIndex(int length, int index) {
8377
return ArrayOperations.clampExclusiveIndex(length, index);
8478
}

src/main/java/org/truffleruby/language/ImmutableRubyString.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,13 @@
2222
import org.truffleruby.core.rope.LeafRope;
2323
import org.truffleruby.core.rope.Rope;
2424
import org.truffleruby.core.rope.RopeOperations;
25+
import org.truffleruby.core.string.FrozenStringLiterals;
2526
import org.truffleruby.interop.ToJavaStringNode;
2627
import org.truffleruby.language.dispatch.DispatchNode;
2728
import org.truffleruby.language.library.RubyStringLibrary;
2829

29-
30+
/** All ImmutableRubyString are interned and must be created through
31+
* {@link FrozenStringLiterals#getFrozenStringLiteral(LeafRope)}. */
3032
@ExportLibrary(InteropLibrary.class)
3133
@ExportLibrary(RubyStringLibrary.class)
3234
public class ImmutableRubyString extends ImmutableRubyObject implements TruffleObject {

0 commit comments

Comments
 (0)