Skip to content

Commit cb80fe6

Browse files
committed
[GR-15990] ImmutableRubyString fixes.
PullRequest: truffleruby/2219
2 parents 501c9f8 + 5c2c6ec commit cb80fe6

Some content is hidden

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

45 files changed

+128
-136
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
import org.truffleruby.extra.ffi.Pointer;
6262
import org.truffleruby.interop.InteropManager;
6363
import org.truffleruby.language.CallStackManager;
64-
import org.truffleruby.language.ImmutableRubyString;
64+
import org.truffleruby.core.string.ImmutableRubyString;
6565
import org.truffleruby.language.LexicalScope;
6666
import org.truffleruby.language.RubyBaseNode;
6767
import org.truffleruby.language.SafepointManager;

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

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
import com.oracle.truffle.api.instrumentation.AllocationReporter;
1919
import com.oracle.truffle.api.object.Shape;
2020
import org.graalvm.options.OptionDescriptors;
21+
import org.jcodings.Encoding;
2122
import org.truffleruby.builtins.PrimitiveManager;
2223
import org.truffleruby.core.RubyHandle;
2324
import org.truffleruby.core.array.RubyArray;
@@ -53,7 +54,7 @@
5354
import org.truffleruby.core.range.RubyObjectRange;
5455
import org.truffleruby.core.regexp.RubyMatchData;
5556
import org.truffleruby.core.regexp.RubyRegexp;
56-
import org.truffleruby.core.rope.LeafRope;
57+
import org.truffleruby.core.rope.CodeRange;
5758
import org.truffleruby.core.rope.Rope;
5859
import org.truffleruby.core.rope.RopeCache;
5960
import org.truffleruby.core.string.CoreStrings;
@@ -72,7 +73,7 @@
7273
import org.truffleruby.core.tracepoint.RubyTracePoint;
7374
import org.truffleruby.extra.RubyAtomicReference;
7475
import org.truffleruby.extra.ffi.RubyPointer;
75-
import org.truffleruby.language.ImmutableRubyString;
76+
import org.truffleruby.core.string.ImmutableRubyString;
7677
import org.truffleruby.language.NotProvided;
7778
import org.truffleruby.language.RubyDynamicObject;
7879
import org.truffleruby.language.RubyEvalInteractiveRootNode;
@@ -153,9 +154,9 @@ public final class RubyLanguage extends TruffleLanguage<RubyContext> {
153154
public final CoreStrings coreStrings;
154155
public final CoreSymbols coreSymbols;
155156
public final PrimitiveManager primitiveManager;
156-
public final FrozenStringLiterals frozenStringLiterals;
157157
public final RopeCache ropeCache;
158158
public final SymbolTable symbolTable;
159+
public final FrozenStringLiterals frozenStringLiterals;
159160
@CompilationFinal public LanguageOptions options;
160161

161162
@CompilationFinal private AllocationReporter allocationReporter;
@@ -212,9 +213,9 @@ public RubyLanguage() {
212213
coreStrings = new CoreStrings(this);
213214
coreSymbols = new CoreSymbols();
214215
primitiveManager = new PrimitiveManager();
215-
frozenStringLiterals = new FrozenStringLiterals();
216216
ropeCache = new RopeCache(coreSymbols);
217217
symbolTable = new SymbolTable(ropeCache, coreSymbols);
218+
frozenStringLiterals = new FrozenStringLiterals(ropeCache);
218219
}
219220

220221
@TruffleBoundary
@@ -435,7 +436,11 @@ public AllocationReporter getAllocationReporter() {
435436
return allocationReporter;
436437
}
437438

438-
public ImmutableRubyString getFrozenStringLiteral(LeafRope rope) {
439+
public ImmutableRubyString getFrozenStringLiteral(byte[] bytes, Encoding encoding, CodeRange codeRange) {
440+
return frozenStringLiterals.getFrozenStringLiteral(bytes, encoding, codeRange);
441+
}
442+
443+
public ImmutableRubyString getFrozenStringLiteral(Rope rope) {
439444
return frozenStringLiterals.getFrozenStringLiteral(rope);
440445
}
441446

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

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@
6666
import org.truffleruby.interop.InteropNodes;
6767
import org.truffleruby.interop.ToJavaStringNode;
6868
import org.truffleruby.interop.TranslateInteropExceptionNode;
69-
import org.truffleruby.language.ImmutableRubyString;
69+
import org.truffleruby.core.string.ImmutableRubyString;
7070
import org.truffleruby.language.LexicalScope;
7171
import org.truffleruby.language.NotProvided;
7272
import org.truffleruby.language.RubyContextNode;
@@ -1150,7 +1150,8 @@ protected Object debug(Object... objects) {
11501150

11511151
representation = RopeOperations.decodeRope(rope) + " (" + builder.toString() + ")";
11521152
} else if (RubyGuards.isRubyValue(object)) {
1153-
representation = object.toString() + " (" + callToS(object).getJavaString() + ")";
1153+
representation = object.toString() + " (" +
1154+
RubyStringLibrary.getUncached().getJavaString(callToS(object)) + ")";
11541155
} else {
11551156
representation = object.toString();
11561157
}
@@ -1160,13 +1161,13 @@ protected Object debug(Object... objects) {
11601161
return nil;
11611162
}
11621163

1163-
private RubyString callToS(Object object) {
1164+
private Object callToS(Object object) {
11641165
if (toSCall == null) {
11651166
CompilerDirectives.transferToInterpreterAndInvalidate();
11661167
toSCall = insert(DispatchNode.create());
11671168
}
11681169

1169-
return (RubyString) toSCall.call(object, "to_s");
1170+
return toSCall.call(object, "to_s");
11701171
}
11711172

11721173
}

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,12 @@
4444
import org.truffleruby.core.numeric.BigIntegerOps;
4545
import org.truffleruby.core.numeric.RubyBignum;
4646
import org.truffleruby.core.rope.CodeRange;
47-
import org.truffleruby.core.rope.LeafRope;
4847
import org.truffleruby.core.string.RubyString;
4948
import org.truffleruby.core.string.StringOperations;
5049
import org.truffleruby.debug.GlobalVariablesObject;
5150
import org.truffleruby.debug.TopScopeObject;
5251
import org.truffleruby.extra.ffi.Pointer;
53-
import org.truffleruby.language.ImmutableRubyString;
52+
import org.truffleruby.core.string.ImmutableRubyString;
5453
import org.truffleruby.language.Nil;
5554
import org.truffleruby.language.NotProvided;
5655
import org.truffleruby.language.RubyRootNode;
@@ -737,10 +736,8 @@ private void setConstant(RubyModule module, String name, Object value) {
737736
}
738737

739738
private ImmutableRubyString frozenUSASCIIString(String string) {
740-
// NOTE(norswap, Nov. 2nd 2020): Okay for language access to be slow, currently only used during initialization.
741-
final LeafRope rope = language.ropeCache.getRope(
739+
return language.getFrozenStringLiteral(
742740
StringOperations.encodeRope(string, USASCIIEncoding.INSTANCE, CodeRange.CR_7BIT));
743-
return StringOperations.createFrozenString(rope);
744741
}
745742

746743
private RubyClass defineClass(String name) {

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -260,10 +260,11 @@ public static void log(Level level, String message) {
260260
public abstract static class SetProcessTitleNode extends PrimitiveArrayArgumentsNode {
261261

262262
@TruffleBoundary
263-
@Specialization
264-
protected RubyString setProcessTitle(RubyString name) {
263+
@Specialization(guards = "libString.isRubyString(name)")
264+
protected Object setProcessTitle(Object name,
265+
@CachedLibrary(limit = "2") RubyStringLibrary libString) {
265266
if (TruffleOptions.AOT) {
266-
ProcessProperties.setArgumentVectorProgramName(name.getJavaString());
267+
ProcessProperties.setArgumentVectorProgramName(libString.getJavaString(name));
267268
} else {
268269
// already checked in the caller
269270
throw CompilerDirectives.shouldNotReachHere();

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import org.truffleruby.RubyLanguage;
1313
import org.truffleruby.core.numeric.RubyBignum;
1414
import org.truffleruby.core.symbol.RubySymbol;
15-
import org.truffleruby.language.ImmutableRubyString;
15+
import org.truffleruby.core.string.ImmutableRubyString;
1616
import org.truffleruby.language.Nil;
1717
import org.truffleruby.language.RubyBaseNode;
1818
import org.truffleruby.language.RubyDynamicObject;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111

1212
import org.truffleruby.core.string.RubyString;
1313
import org.truffleruby.core.symbol.RubySymbol;
14-
import org.truffleruby.language.ImmutableRubyString;
14+
import org.truffleruby.core.string.ImmutableRubyString;
1515
import org.truffleruby.language.RubyContextSourceNode;
1616
import org.truffleruby.language.RubyNode;
1717

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
import org.truffleruby.core.regexp.RubyRegexp;
1515
import org.truffleruby.core.string.RubyString;
1616
import org.truffleruby.core.symbol.RubySymbol;
17-
import org.truffleruby.language.ImmutableRubyString;
17+
import org.truffleruby.core.string.ImmutableRubyString;
1818
import org.truffleruby.language.RubyContextNode;
1919

2020
import com.oracle.truffle.api.dsl.Fallback;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
package org.truffleruby.core.cast;
1111

1212
import org.truffleruby.core.string.RubyString;
13-
import org.truffleruby.language.ImmutableRubyString;
13+
import org.truffleruby.core.string.ImmutableRubyString;
1414
import org.truffleruby.language.RubyContextSourceNode;
1515
import org.truffleruby.language.RubyNode;
1616
import org.truffleruby.language.dispatch.DispatchNode;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import com.oracle.truffle.api.library.CachedLibrary;
1313
import org.truffleruby.core.kernel.KernelNodes;
1414
import org.truffleruby.core.string.RubyString;
15-
import org.truffleruby.language.ImmutableRubyString;
15+
import org.truffleruby.core.string.ImmutableRubyString;
1616
import org.truffleruby.language.RubyContextSourceNode;
1717
import org.truffleruby.language.RubyNode;
1818
import org.truffleruby.language.dispatch.DispatchNode;

0 commit comments

Comments
 (0)