Skip to content

Commit c8d7442

Browse files
committed
[GR-41453] TruffleString adoption cleanup
PullRequest: truffleruby/4513
2 parents 7e26657 + e0d6b9b commit c8d7442

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

53 files changed

+2705
-2533
lines changed

src/main/java/org/truffleruby/RubyContext.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -765,7 +765,7 @@ public GlobalVariableStorage getGlobalVariableStorage(int index) {
765765
}
766766

767767
public void initializeMainScriptName(String mainScriptName) {
768-
ImmutableRubyString mainScriptString = language.getFrozenStringLiteral(TStringUtils.utf8TString(mainScriptName),
768+
ImmutableRubyString mainScriptString = language.getImmutableString(TStringUtils.utf8TString(mainScriptName),
769769
Encodings.UTF_8);
770770

771771
int index = language.getGlobalVariableIndex("$0");

src/main/java/org/truffleruby/RubyLanguage.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,10 @@
8787
import org.truffleruby.core.regexp.RegexpTable;
8888
import org.truffleruby.core.regexp.RubyMatchData;
8989
import org.truffleruby.core.regexp.RubyRegexp;
90+
import org.truffleruby.core.string.ImmutableStrings;
9091
import org.truffleruby.core.string.PathToTStringCache;
9192
import org.truffleruby.core.string.TStringCache;
9293
import org.truffleruby.core.string.CoreStrings;
93-
import org.truffleruby.core.string.FrozenStringLiterals;
9494
import org.truffleruby.core.string.RubyString;
9595
import org.truffleruby.core.string.StringUtils;
9696
import org.truffleruby.core.string.TStringWithEncoding;
@@ -272,7 +272,7 @@ private RubyThread getOrCreateForeignThread(RubyContext context, Thread thread)
272272
public final RegexpTable regexpTable;
273273
public final SymbolTable symbolTable;
274274
public final KeywordArgumentsDescriptorManager keywordArgumentsDescriptorManager = new KeywordArgumentsDescriptorManager();
275-
public final FrozenStringLiterals frozenStringLiterals;
275+
public final ImmutableStrings immutableStrings;
276276

277277
// GR-44025: We store the cleanerThread explicitly here to make it a clear image building failure if it would still be set.
278278
public Thread cleanerThread = null;
@@ -385,7 +385,7 @@ public RubyLanguage() {
385385
tstringCache = new TStringCache(coreSymbols);
386386
symbolTable = new SymbolTable(tstringCache, coreSymbols);
387387
regexpTable = new RegexpTable();
388-
frozenStringLiterals = new FrozenStringLiterals(tstringCache);
388+
immutableStrings = new ImmutableStrings(tstringCache);
389389
}
390390

391391
public RubyThread getCurrentThread() {
@@ -877,13 +877,13 @@ public AllocationReporter getAllocationReporter() {
877877
return allocationReporter;
878878
}
879879

880-
public ImmutableRubyString getFrozenStringLiteral(TruffleString tstring, RubyEncoding encoding) {
881-
return frozenStringLiterals.getFrozenStringLiteral(tstring, encoding);
880+
public ImmutableRubyString getImmutableString(TruffleString tstring, RubyEncoding encoding) {
881+
return immutableStrings.get(tstring, encoding);
882882
}
883883

884-
public ImmutableRubyString getFrozenStringLiteral(InternalByteArray byteArray, boolean isImmutable,
884+
public ImmutableRubyString getImmutableString(InternalByteArray byteArray, boolean isImmutable,
885885
RubyEncoding encoding) {
886-
return frozenStringLiterals.getFrozenStringLiteral(byteArray, isImmutable, encoding);
886+
return immutableStrings.get(byteArray, isImmutable, encoding);
887887
}
888888

889889
public long getNextObjectID() {

src/main/java/org/truffleruby/builtins/BuiltinsClasses.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626
import org.truffleruby.core.TruffleSystemNodesFactory;
2727
import org.truffleruby.core.VMPrimitiveNodesBuiltins;
2828
import org.truffleruby.core.VMPrimitiveNodesFactory;
29+
import org.truffleruby.core.string.StringPrimitiveNodesBuiltins;
30+
import org.truffleruby.core.string.StringPrimitiveNodesFactory;
2931
import org.truffleruby.core.array.ArrayIndexNodesBuiltins;
3032
import org.truffleruby.core.array.ArrayIndexNodesFactory;
3133
import org.truffleruby.core.array.ArrayNodesBuiltins;
@@ -256,6 +258,7 @@ public static void setupBuiltinsLazy(CoreMethodNodeManager coreManager) {
256258
TypeNodesBuiltins.setup(coreManager);
257259
UnboundMethodNodesBuiltins.setup(coreManager);
258260
VMPrimitiveNodesBuiltins.setup(coreManager);
261+
StringPrimitiveNodesBuiltins.setup(coreManager);
259262
WeakKeyMapNodesBuiltins.setup(coreManager);
260263
WeakMapNodesBuiltins.setup(coreManager);
261264
WeakRefNodesBuiltins.setup(coreManager);
@@ -339,6 +342,7 @@ public static void setupBuiltinsLazyPrimitives(PrimitiveManager primitiveManager
339342
TypeNodesBuiltins.setupPrimitives(primitiveManager);
340343
UnboundMethodNodesBuiltins.setupPrimitives(primitiveManager);
341344
VMPrimitiveNodesBuiltins.setupPrimitives(primitiveManager);
345+
StringPrimitiveNodesBuiltins.setupPrimitives(primitiveManager);
342346
WeakKeyMapNodesBuiltins.setupPrimitives(primitiveManager);
343347
WeakMapNodesBuiltins.setupPrimitives(primitiveManager);
344348
WeakRefNodesBuiltins.setupPrimitives(primitiveManager);
@@ -423,6 +427,7 @@ public static List<List<? extends NodeFactory<? extends RubyBaseNode>>> getCoreN
423427
TypeNodesFactory.getFactories(),
424428
UnboundMethodNodesFactory.getFactories(),
425429
VMPrimitiveNodesFactory.getFactories(),
430+
StringPrimitiveNodesFactory.getFactories(),
426431
WeakKeyMapNodesFactory.getFactories(),
427432
WeakMapNodesFactory.getFactories(),
428433
WeakRefNodesFactory.getFactories());

src/main/java/org/truffleruby/cext/CExtNodes.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@
7373
import org.truffleruby.core.numeric.RubyBignum;
7474
import org.truffleruby.core.proc.RubyProc;
7575
import org.truffleruby.core.string.RubyString;
76+
import org.truffleruby.core.string.StringOperations;
7677
import org.truffleruby.core.string.StringSupport;
7778
import org.truffleruby.core.string.StringUtils;
7879
import org.truffleruby.core.string.TStringWithEncoding;
@@ -1478,7 +1479,7 @@ Object debug(Object... objects) {
14781479

14791480
representation = tstring + " (" + builder + ")";
14801481
} else if (RubyGuards.isRubyValue(object)) {
1481-
representation = object.toString() + " (" + RubyGuards.getJavaString(callToS(object)) + ")";
1482+
representation = object.toString() + " (" + StringOperations.getJavaString(callToS(object)) + ")";
14821483
} else {
14831484
representation = object.toString();
14841485
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -728,7 +728,7 @@ private void setConstant(RubyModule module, String name, Object value) {
728728
}
729729

730730
private ImmutableRubyString frozenUSASCIIString(String string) {
731-
return language.getFrozenStringLiteral(TStringUtils.usAsciiString(string), Encodings.US_ASCII);
731+
return language.getImmutableString(TStringUtils.usAsciiString(string), Encodings.US_ASCII);
732732
}
733733

734734
private RubyClass defineClass(String name) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,10 +60,10 @@
6060
import org.truffleruby.core.encoding.Encodings;
6161
import org.truffleruby.core.encoding.RubyEncoding;
6262
import org.truffleruby.core.string.RubyString;
63+
import org.truffleruby.core.string.StringOperations;
6364
import org.truffleruby.core.string.StringUtils;
6465
import org.truffleruby.interop.FromJavaStringNode;
6566
import org.truffleruby.interop.ToJavaStringNode;
66-
import org.truffleruby.language.RubyGuards;
6767
import org.truffleruby.language.control.RaiseException;
6868
import org.truffleruby.language.library.RubyStringLibrary;
6969
import org.truffleruby.shared.Platform;
@@ -133,7 +133,7 @@ Object setTruffleWorkingDir(Object dir,
133133
@Cached RubyStringLibrary stringsDir) {
134134
TruffleFile truffleFile = getContext()
135135
.getEnv()
136-
.getPublicTruffleFile(RubyGuards.getJavaString(dir));
136+
.getPublicTruffleFile(StringOperations.getJavaString(dir));
137137
final TruffleFile canonicalFile;
138138
try {
139139
canonicalFile = truffleFile.getCanonicalFile();

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

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,12 @@
6868
import org.truffleruby.core.proc.ProcOperations;
6969
import org.truffleruby.core.proc.RubyProc;
7070
import org.truffleruby.core.string.RubyString;
71+
import org.truffleruby.core.string.StringOperations;
7172
import org.truffleruby.core.support.RubyIO;
7273
import org.truffleruby.core.symbol.RubySymbol;
7374
import org.truffleruby.core.thread.RubyThread;
7475
import org.truffleruby.extra.ffi.Pointer;
7576
import org.truffleruby.interop.TranslateInteropExceptionNode;
76-
import org.truffleruby.language.RubyGuards;
7777
import org.truffleruby.language.SafepointAction;
7878
import org.truffleruby.language.arguments.ArgumentsDescriptor;
7979
import org.truffleruby.language.arguments.NoKeywordArgumentsDescriptor;
@@ -279,8 +279,8 @@ public abstract static class VMWatchSignalNode extends PrimitiveArrayArgumentsNo
279279
boolean watchSignalString(Object signalString, boolean isRubyDefaultHandler, Object action,
280280
@Cached @Shared RubyStringLibrary libSignalString,
281281
@Cached @Exclusive RubyStringLibrary libAction) {
282-
final String actionString = RubyGuards.getJavaString(action);
283-
final String signalName = RubyGuards.getJavaString(signalString);
282+
final String actionString = StringOperations.getJavaString(action);
283+
final String signalName = StringOperations.getJavaString(signalString);
284284

285285
switch (actionString) {
286286
case "DEFAULT":
@@ -305,7 +305,7 @@ boolean watchSignalProc(Object signalString, boolean isRubyDefaultHandler, RubyP
305305
SharedObjects.writeBarrier(getLanguage(), proc);
306306
}
307307

308-
final String signalName = RubyGuards.getJavaString(signalString);
308+
final String signalName = StringOperations.getJavaString(signalString);
309309

310310
return registerHandler(signalName, signal -> {
311311
var rootThread = context.getThreadManager().getRootThread();
@@ -395,7 +395,7 @@ public abstract static class VMGetConfigItemNode extends PrimitiveArrayArguments
395395
@TruffleBoundary
396396
@Specialization
397397
Object get(Object key) {
398-
final String keyString = RubyGuards.getJavaString(key);
398+
final String keyString = StringOperations.getJavaString(key);
399399
final Object value = getContext().getNativeConfiguration().get(keyString);
400400

401401
if (value == null) {
@@ -417,7 +417,7 @@ Object getSection(Object section, RubyProc block,
417417
@Cached CallBlockNode yieldNode) {
418418
for (Entry<String, Object> entry : getContext()
419419
.getNativeConfiguration()
420-
.getSection(RubyGuards.getJavaString(section))) {
420+
.getSection(StringOperations.getJavaString(section))) {
421421
final RubyString key = createString(fromJavaStringNode, entry.getKey(), Encodings.UTF_8); // CR_7BIT
422422
yieldNode.yield(this, block, key, entry.getValue());
423423
}
@@ -576,7 +576,7 @@ public abstract static class ShouldNotReachHereNode extends PrimitiveArrayArgume
576576
Object shouldNotReachHere(Object message,
577577
@Cached RubyStringLibrary libString) {
578578
CompilerDirectives.transferToInterpreterAndInvalidate();
579-
throw CompilerDirectives.shouldNotReachHere(RubyGuards.getJavaString(message));
579+
throw CompilerDirectives.shouldNotReachHere(StringOperations.getJavaString(message));
580580
}
581581

582582
}

src/main/java/org/truffleruby/core/array/ArrayNodes.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@
6969
import org.truffleruby.core.range.RangeNodes.NormalizedStartLengthNode;
7070
import org.truffleruby.core.string.RubyString;
7171
import org.truffleruby.core.string.StringHelperNodes;
72+
import org.truffleruby.core.string.StringOperations;
7273
import org.truffleruby.core.support.TypeNodes.CheckFrozenNode;
7374
import org.truffleruby.extra.ffi.Pointer;
7475
import org.truffleruby.interop.ToJavaStringNode;
@@ -1522,6 +1523,7 @@ RubyString pack(RubyArray array, Object format, Object buffer,
15221523
@GenerateCached(false)
15231524
@GenerateInline
15241525
@ReportPolymorphism // inline cache, CallTarget cache
1526+
@ImportStatic(StringOperations.class)
15251527
public abstract static class PackNode extends RubyBaseNode {
15261528

15271529
public abstract RubyString execute(Node node, RubyArray array, Object format, Object buffer);

src/main/java/org/truffleruby/core/cast/ToCallTargetNode.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@
1717
import org.truffleruby.core.method.RubyMethod;
1818
import org.truffleruby.core.method.RubyUnboundMethod;
1919
import org.truffleruby.core.proc.RubyProc;
20+
import org.truffleruby.core.string.StringOperations;
2021
import org.truffleruby.core.string.TStringWithEncoding;
2122
import org.truffleruby.language.RubyBaseNode;
2223

2324
import com.oracle.truffle.api.RootCallTarget;
2425
import com.oracle.truffle.api.dsl.Specialization;
25-
import org.truffleruby.language.RubyGuards;
2626
import org.truffleruby.language.library.RubyStringLibrary;
2727
import org.truffleruby.language.loader.ByteBasedCharSequence;
2828
import org.truffleruby.parser.ParserContext;
@@ -53,7 +53,7 @@ static RootCallTarget proc(RubyProc proc) {
5353
@TruffleBoundary
5454
@Specialization
5555
static RootCallTarget string(Node node, Object string) {
56-
var code = new TStringWithEncoding(RubyGuards.asTruffleStringUncached(string),
56+
var code = new TStringWithEncoding(StringOperations.asTruffleStringUncached(string),
5757
RubyStringLibrary.getEncodingUncached(string));
5858
Source source = Source.newBuilder("ruby", new ByteBasedCharSequence(code), "<parse_ast>").build();
5959
TranslatorEnvironment.resetTemporaryVariablesIndex();

src/main/java/org/truffleruby/core/cast/ToSymbolNode.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@
1313
import com.oracle.truffle.api.dsl.Cached.Exclusive;
1414
import com.oracle.truffle.api.dsl.GenerateCached;
1515
import com.oracle.truffle.api.dsl.GenerateInline;
16+
import com.oracle.truffle.api.dsl.ImportStatic;
1617
import com.oracle.truffle.api.nodes.Node;
1718
import com.oracle.truffle.api.profiles.InlinedBranchProfile;
1819
import com.oracle.truffle.api.strings.TruffleString;
1920
import org.truffleruby.core.encoding.RubyEncoding;
2021
import org.truffleruby.core.string.StringHelperNodes;
22+
import org.truffleruby.core.string.StringOperations;
2123
import org.truffleruby.core.symbol.RubySymbol;
2224

2325
import com.oracle.truffle.api.dsl.GenerateUncached;
@@ -30,6 +32,7 @@
3032
@GenerateUncached
3133
@GenerateCached
3234
@GenerateInline(inlineByDefault = true)
35+
@ImportStatic(StringOperations.class)
3336
public abstract class ToSymbolNode extends RubyBaseNode {
3437

3538
public final RubySymbol executeCached(Object object) {

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import org.truffleruby.core.array.ArrayUtils;
3131
import org.truffleruby.core.klass.RubyClass;
3232
import org.truffleruby.core.string.EncodingUtils;
33-
import org.truffleruby.core.string.StringOperations;
3433
import org.truffleruby.extra.ffi.Pointer;
3534
import org.truffleruby.platform.NativeConfiguration;
3635
import org.truffleruby.platform.TruffleNFIPlatform;
@@ -221,7 +220,7 @@ public void defineBuiltInEncoding(RubyEncoding rubyEncoding) {
221220
}
222221

223222
@TruffleBoundary
224-
public synchronized RubyEncoding defineDynamicEncoding(Encoding encoding, byte[] name) {
223+
public synchronized RubyEncoding defineDynamicEncoding(Encoding encoding, String name) {
225224
final int encodingIndex = ENCODING_LIST_BY_ENCODING_INDEX.length;
226225

227226
final RubyEncoding rubyEncoding = Encodings.newRubyEncoding(language, encoding, encodingIndex, name);
@@ -252,8 +251,7 @@ public synchronized RubyEncoding createDummyEncoding(String name) {
252251
return null;
253252
}
254253

255-
final byte[] nameBytes = StringOperations.encodeAsciiBytes(name);
256-
return defineDynamicEncoding(Encodings.DUMMY_ENCODING_BASE, nameBytes);
254+
return defineDynamicEncoding(Encodings.DUMMY_ENCODING_BASE, name);
257255
}
258256

259257
public RubyEncoding getLocaleEncoding() {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@
3535
import org.truffleruby.core.string.RubyString;
3636
import org.truffleruby.core.string.StringGuards;
3737
import org.truffleruby.core.string.ImmutableRubyString;
38+
import org.truffleruby.core.string.StringOperations;
3839
import org.truffleruby.core.symbol.RubySymbol;
3940
import org.truffleruby.interop.ToJavaStringNode;
4041
import org.truffleruby.language.Nil;
4142
import org.truffleruby.language.RubyBaseNode;
42-
import org.truffleruby.language.RubyGuards;
4343
import org.truffleruby.annotations.Visibility;
4444
import org.truffleruby.language.control.RaiseException;
4545
import org.truffleruby.language.library.RubyStringLibrary;
@@ -446,7 +446,7 @@ public abstract static class GetDefaultEncodingNode extends PrimitiveArrayArgume
446446
@TruffleBoundary
447447
@Specialization
448448
Object getDefaultEncoding(Object name) {
449-
final RubyEncoding encoding = getEncoding(RubyGuards.getJavaString(name));
449+
final RubyEncoding encoding = getEncoding(StringOperations.getJavaString(name));
450450
if (encoding == null) {
451451
return nil;
452452
} else {

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import org.graalvm.shadowed.org.jcodings.specific.UTF32LEEncoding;
2929
import org.graalvm.shadowed.org.jcodings.specific.UTF8Encoding;
3030
import org.truffleruby.RubyLanguage;
31-
import org.truffleruby.core.string.FrozenStringLiterals;
31+
import org.truffleruby.core.string.ImmutableStrings;
3232
import org.truffleruby.core.string.ImmutableRubyString;
3333
import org.truffleruby.core.string.StringOperations;
3434
import org.truffleruby.core.string.TStringConstants;
@@ -113,7 +113,7 @@ private static RubyEncoding[] initializeRubyEncodings() {
113113
if (tstring == null) {
114114
throw CompilerDirectives.shouldNotReachHere("no TStringConstants for " + encoding);
115115
}
116-
final ImmutableRubyString name = FrozenStringLiterals.createStringAndCacheLater(tstring, US_ASCII);
116+
final ImmutableRubyString name = ImmutableStrings.createAndCacheLater(tstring, US_ASCII);
117117
rubyEncoding = new RubyEncoding(encoding, name, index);
118118
}
119119
encodings[index] = rubyEncoding;
@@ -132,9 +132,14 @@ private static Encoding createDummyEncoding() {
132132
}
133133

134134
@TruffleBoundary
135-
public static RubyEncoding newRubyEncoding(RubyLanguage language, Encoding encoding, int index, byte[] name) {
136-
var tstring = TStringUtils.fromByteArray(name, Encodings.US_ASCII);
137-
final ImmutableRubyString string = language.getFrozenStringLiteral(tstring, Encodings.US_ASCII);
135+
public static RubyEncoding newRubyEncoding(RubyLanguage language, Encoding encoding, int index, String name) {
136+
if (!StringOperations.isAsciiOnly(name)) {
137+
throw CompilerDirectives
138+
.shouldNotReachHere("Encoding name contained non ascii characters \"" + name + "\"");
139+
}
140+
141+
var tstring = TStringUtils.fromJavaString(name, Encodings.US_ASCII);
142+
final ImmutableRubyString string = language.getImmutableString(tstring, Encodings.US_ASCII);
138143

139144
return new RubyEncoding(encoding, string, index);
140145
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import org.truffleruby.RubyContext;
2222
import org.truffleruby.core.kernel.KernelNodes;
2323
import org.truffleruby.core.klass.RubyClass;
24-
import org.truffleruby.core.string.FrozenStringLiterals;
24+
import org.truffleruby.core.string.ImmutableStrings;
2525
import org.truffleruby.core.string.ImmutableRubyString;
2626
import org.truffleruby.language.ImmutableRubyObjectNotCopyable;
2727
import org.truffleruby.core.string.TStringConstants;
@@ -79,7 +79,7 @@ public RubyEncoding(int index) {
7979
this.jcoding = Objects.requireNonNull(USASCIIEncoding.INSTANCE);
8080
this.tencoding = Objects.requireNonNull(TruffleString.Encoding.US_ASCII);
8181
this.name = Objects.requireNonNull(
82-
FrozenStringLiterals.createStringAndCacheLater(TStringConstants.US_ASCII, this));
82+
ImmutableStrings.createAndCacheLater(TStringConstants.US_ASCII, this));
8383
this.index = index;
8484

8585
var jcoding = this.jcoding;

0 commit comments

Comments
 (0)