Skip to content

Commit eb2bbb4

Browse files
committed
CheckStringEncodingNode supports DSL inlining + adding inline false to nodes which cannot be migrated
1 parent 3fc2c33 commit eb2bbb4

File tree

3 files changed

+28
-28
lines changed

3 files changed

+28
-28
lines changed

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

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -228,8 +228,6 @@ private TruffleString.GetByteCodeRangeNode getCodeRangeNode() {
228228
protected boolean isStandardEncoding(RubyEncoding encoding) {
229229
return encoding == Encodings.UTF_8 || encoding == Encodings.US_ASCII || encoding == Encodings.BINARY;
230230
}
231-
232-
233231
}
234232

235233
// MRI: enc_compatible_latter
@@ -799,18 +797,16 @@ protected static RubyEncoding checkEncodingStringString(Object first, Object sec
799797
}
800798

801799
// MRI: rb_enc_check_str / rb_encoding_check (with RopeWithEncoding arguments)
800+
@GenerateInline
801+
@GenerateCached(false)
802802
public abstract static class CheckStringEncodingNode extends RubyBaseNode {
803803

804-
@NeverDefault
805-
public static CheckStringEncodingNode create() {
806-
return EncodingNodesFactory.CheckStringEncodingNodeGen.create();
807-
}
808-
809-
public abstract RubyEncoding executeCheckEncoding(AbstractTruffleString first, RubyEncoding firstEncoding,
810-
AbstractTruffleString second, RubyEncoding secondEncoding);
804+
public abstract RubyEncoding executeCheckEncoding(Node node, AbstractTruffleString first,
805+
RubyEncoding firstEncoding, AbstractTruffleString second, RubyEncoding secondEncoding);
811806

812807
@Specialization
813-
protected RubyEncoding checkEncoding(
808+
protected static RubyEncoding checkEncoding(
809+
Node node,
814810
AbstractTruffleString first,
815811
RubyEncoding firstEncoding,
816812
AbstractTruffleString second,
@@ -821,9 +817,10 @@ protected RubyEncoding checkEncoding(
821817
secondEncoding);
822818

823819
if (negotiatedEncoding == null) {
824-
errorProfile.enter(this);
825-
throw new RaiseException(getContext(),
826-
coreExceptions().encodingCompatibilityErrorIncompatible(firstEncoding, secondEncoding, this));
820+
errorProfile.enter(node);
821+
throw new RaiseException(getContext(node),
822+
coreExceptions(node).encodingCompatibilityErrorIncompatible(firstEncoding, secondEncoding,
823+
node));
827824
}
828825

829826
return negotiatedEncoding;

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

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,7 @@ protected int countFast(Object string, TStringWithEncoding[] args,
205205
@Bind("libString.getEncoding(string)") RubyEncoding encoding,
206206
@Cached("libString.getEncoding(string)") RubyEncoding cachedEncoding,
207207
@Cached(value = "squeeze()", dimensions = 1) boolean[] squeeze,
208-
@Cached("findEncoding(libString.getTString(string), libString.getEncoding(string), cachedArgs, checkEncodingNode)") RubyEncoding compatEncoding,
208+
@Cached("findEncoding(this, libString.getTString(string), libString.getEncoding(string), cachedArgs, checkEncodingNode)") RubyEncoding compatEncoding,
209209
@Cached("makeTables(this, cachedArgs, squeeze, compatEncoding)") StringSupport.TrTables tables,
210210
@Cached @Shared TruffleString.GetInternalByteArrayNode byteArrayNode,
211211
@Cached @Shared TruffleString.GetByteCodeRangeNode getByteCodeRangeNode) {
@@ -231,7 +231,7 @@ protected int count(Object string, TStringWithEncoding[] tstringsWithEncs,
231231
var byteArray = byteArrayNode.execute(tstring, encoding.tencoding);
232232
var codeRange = getByteCodeRangeNode.execute(tstring, encoding.tencoding);
233233

234-
RubyEncoding enc = findEncoding(tstring, encoding, tstringsWithEncs, checkEncodingNode);
234+
RubyEncoding enc = findEncoding(this, tstring, encoding, tstringsWithEncs, checkEncodingNode);
235235
return countSlow(byteArray, codeRange, tstringsWithEncs, enc);
236236
}
237237

@@ -250,12 +250,13 @@ protected boolean[] squeeze() {
250250
return new boolean[StringSupport.TRANS_SIZE + 1];
251251
}
252252

253-
protected static RubyEncoding findEncoding(AbstractTruffleString tstring, RubyEncoding encoding,
253+
protected static RubyEncoding findEncoding(Node node, AbstractTruffleString tstring, RubyEncoding encoding,
254254
TStringWithEncoding[] tstringsWithEncs, EncodingNodes.CheckStringEncodingNode checkEncodingNode) {
255-
RubyEncoding enc = checkEncodingNode.executeCheckEncoding(tstring, encoding, tstringsWithEncs[0].tstring,
255+
RubyEncoding enc = checkEncodingNode.executeCheckEncoding(node, tstring, encoding,
256+
tstringsWithEncs[0].tstring,
256257
tstringsWithEncs[0].encoding);
257258
for (int i = 1; i < tstringsWithEncs.length; i++) {
258-
enc = checkEncodingNode.executeCheckEncoding(tstring, encoding, tstringsWithEncs[i].tstring,
259+
enc = checkEncodingNode.executeCheckEncoding(node, tstring, encoding, tstringsWithEncs[i].tstring,
259260
tstringsWithEncs[i].encoding);
260261
}
261262
return enc;
@@ -334,12 +335,12 @@ public abstract static class DeleteBangStringsNode extends TrTableNode {
334335
limit = "getDefaultCacheLimit()")
335336
protected static Object deleteBangFast(Node node, RubyString string, TStringWithEncoding[] args,
336337
@Cached(value = "args", dimensions = 1) TStringWithEncoding[] cachedArgs,
337-
@Cached TruffleString.EqualNode equalNode,
338+
@Cached(inline = false) TruffleString.EqualNode equalNode,
338339
@Cached @Shared EncodingNodes.CheckStringEncodingNode checkEncodingNode,
339340
@Cached @Shared RubyStringLibrary libString,
340341
@Cached("libString.getEncoding(string)") RubyEncoding cachedEncoding,
341342
@Cached(value = "squeeze()", dimensions = 1) boolean[] squeeze,
342-
@Cached("findEncoding(libString.getTString(string), libString.getEncoding(string), cachedArgs, checkEncodingNode)") RubyEncoding compatEncoding,
343+
@Cached("findEncoding(node, libString.getTString(string), libString.getEncoding(string), cachedArgs, checkEncodingNode)") RubyEncoding compatEncoding,
343344
@Cached("makeTables(node, cachedArgs, squeeze, compatEncoding)") StringSupport.TrTables tables,
344345
@Cached @Exclusive InlinedBranchProfile nullProfile) {
345346
var processedTString = processStr(node, string, squeeze, compatEncoding, tables);
@@ -362,7 +363,8 @@ protected static Object deleteBangSlow(Node node, RubyString string, TStringWith
362363
throw new RaiseException(getContext(node), coreExceptions(node).argumentErrorEmptyVarargs(node));
363364
}
364365

365-
RubyEncoding enc = findEncoding(string.tstring, libString.getEncoding(string), args, checkEncodingNode);
366+
RubyEncoding enc = findEncoding(node, string.tstring, libString.getEncoding(string), args,
367+
checkEncodingNode);
366368

367369
return deleteBangSlow(node, string, args, enc);
368370
}
@@ -622,22 +624,23 @@ public static StringAppendNode create() {
622624
public abstract RubyString executeStringAppend(Object string, Object other);
623625

624626
@Specialization(guards = "libOther.isRubyString(other)", limit = "1")
625-
protected RubyString stringAppend(Object string, Object other,
627+
protected static RubyString stringAppend(Object string, Object other,
626628
@Cached RubyStringLibrary libString,
627629
@Cached RubyStringLibrary libOther,
628630
@Cached EncodingNodes.CheckStringEncodingNode checkEncodingNode,
629-
@Cached TruffleString.ConcatNode concatNode) {
631+
@Cached TruffleString.ConcatNode concatNode,
632+
@Bind("this") Node node) {
630633

631634
var left = libString.getTString(string);
632635
var leftEncoding = libString.getEncoding(string);
633636
var right = libOther.getTString(other);
634637
var rightEncoding = libOther.getEncoding(other);
635638

636-
final RubyEncoding compatibleEncoding = checkEncodingNode.executeCheckEncoding(left, leftEncoding,
639+
final RubyEncoding compatibleEncoding = checkEncodingNode.executeCheckEncoding(node, left, leftEncoding,
637640
right, rightEncoding);
638641

639642
var result = concatNode.execute(left, right, compatibleEncoding.tencoding, true);
640-
return createString(result, compatibleEncoding);
643+
return createString(node, result, compatibleEncoding);
641644
}
642645
}
643646

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -777,8 +777,8 @@ protected static Object caseCmpSingleByte(Node node, Object string, Object other
777777
@Bind("libString.getEncoding(string)") RubyEncoding selfEncoding,
778778
@Bind("libOther.getTString(other)") AbstractTruffleString otherTString,
779779
@Bind("libOther.getEncoding(other)") RubyEncoding otherEncoding,
780-
@Cached TruffleString.GetInternalByteArrayNode byteArraySelfNode,
781-
@Cached TruffleString.GetInternalByteArrayNode byteArrayOtherNode) {
780+
@Cached(inline = false) TruffleString.GetInternalByteArrayNode byteArraySelfNode,
781+
@Cached(inline = false) TruffleString.GetInternalByteArrayNode byteArrayOtherNode) {
782782
// Taken from org.jruby.RubyString#casecmp19.
783783

784784
final RubyEncoding encoding = negotiateCompatibleEncodingNode.execute(selfTString, selfEncoding,
@@ -1001,7 +1001,7 @@ public abstract static class DeleteBangNode extends RubyBaseNode {
10011001
@Specialization(guards = "args.length == size", limit = "getDefaultCacheLimit()")
10021002
protected static Object deleteBang(Node node, RubyString string, Object[] args,
10031003
@Cached @Shared ToStrNode toStrNode,
1004-
@Cached @Shared AsTruffleStringNode asTruffleStringNode,
1004+
@Cached(inline = false) @Shared AsTruffleStringNode asTruffleStringNode,
10051005
@Cached @Shared DeleteBangStringsNode deleteBangStringsNode,
10061006
@Cached @Shared RubyStringLibrary rubyStringLibrary,
10071007
@Cached("args.length") int size) {

0 commit comments

Comments
 (0)