@@ -205,7 +205,7 @@ protected int countFast(Object string, TStringWithEncoding[] args,
205
205
@ Bind ("libString.getEncoding(string)" ) RubyEncoding encoding ,
206
206
@ Cached ("libString.getEncoding(string)" ) RubyEncoding cachedEncoding ,
207
207
@ 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 ,
209
209
@ Cached ("makeTables(this, cachedArgs, squeeze, compatEncoding)" ) StringSupport .TrTables tables ,
210
210
@ Cached @ Shared TruffleString .GetInternalByteArrayNode byteArrayNode ,
211
211
@ Cached @ Shared TruffleString .GetByteCodeRangeNode getByteCodeRangeNode ) {
@@ -231,7 +231,7 @@ protected int count(Object string, TStringWithEncoding[] tstringsWithEncs,
231
231
var byteArray = byteArrayNode .execute (tstring , encoding .tencoding );
232
232
var codeRange = getByteCodeRangeNode .execute (tstring , encoding .tencoding );
233
233
234
- RubyEncoding enc = findEncoding (tstring , encoding , tstringsWithEncs , checkEncodingNode );
234
+ RubyEncoding enc = findEncoding (this , tstring , encoding , tstringsWithEncs , checkEncodingNode );
235
235
return countSlow (byteArray , codeRange , tstringsWithEncs , enc );
236
236
}
237
237
@@ -250,12 +250,13 @@ protected boolean[] squeeze() {
250
250
return new boolean [StringSupport .TRANS_SIZE + 1 ];
251
251
}
252
252
253
- protected static RubyEncoding findEncoding (AbstractTruffleString tstring , RubyEncoding encoding ,
253
+ protected static RubyEncoding findEncoding (Node node , AbstractTruffleString tstring , RubyEncoding encoding ,
254
254
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 ,
256
257
tstringsWithEncs [0 ].encoding );
257
258
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 ,
259
260
tstringsWithEncs [i ].encoding );
260
261
}
261
262
return enc ;
@@ -334,12 +335,12 @@ public abstract static class DeleteBangStringsNode extends TrTableNode {
334
335
limit = "getDefaultCacheLimit()" )
335
336
protected static Object deleteBangFast (Node node , RubyString string , TStringWithEncoding [] args ,
336
337
@ Cached (value = "args" , dimensions = 1 ) TStringWithEncoding [] cachedArgs ,
337
- @ Cached TruffleString .EqualNode equalNode ,
338
+ @ Cached ( inline = false ) TruffleString .EqualNode equalNode ,
338
339
@ Cached @ Shared EncodingNodes .CheckStringEncodingNode checkEncodingNode ,
339
340
@ Cached @ Shared RubyStringLibrary libString ,
340
341
@ Cached ("libString.getEncoding(string)" ) RubyEncoding cachedEncoding ,
341
342
@ 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 ,
343
344
@ Cached ("makeTables(node, cachedArgs, squeeze, compatEncoding)" ) StringSupport .TrTables tables ,
344
345
@ Cached @ Exclusive InlinedBranchProfile nullProfile ) {
345
346
var processedTString = processStr (node , string , squeeze , compatEncoding , tables );
@@ -362,7 +363,8 @@ protected static Object deleteBangSlow(Node node, RubyString string, TStringWith
362
363
throw new RaiseException (getContext (node ), coreExceptions (node ).argumentErrorEmptyVarargs (node ));
363
364
}
364
365
365
- RubyEncoding enc = findEncoding (string .tstring , libString .getEncoding (string ), args , checkEncodingNode );
366
+ RubyEncoding enc = findEncoding (node , string .tstring , libString .getEncoding (string ), args ,
367
+ checkEncodingNode );
366
368
367
369
return deleteBangSlow (node , string , args , enc );
368
370
}
@@ -622,22 +624,23 @@ public static StringAppendNode create() {
622
624
public abstract RubyString executeStringAppend (Object string , Object other );
623
625
624
626
@ Specialization (guards = "libOther.isRubyString(other)" , limit = "1" )
625
- protected RubyString stringAppend (Object string , Object other ,
627
+ protected static RubyString stringAppend (Object string , Object other ,
626
628
@ Cached RubyStringLibrary libString ,
627
629
@ Cached RubyStringLibrary libOther ,
628
630
@ Cached EncodingNodes .CheckStringEncodingNode checkEncodingNode ,
629
- @ Cached TruffleString .ConcatNode concatNode ) {
631
+ @ Cached TruffleString .ConcatNode concatNode ,
632
+ @ Bind ("this" ) Node node ) {
630
633
631
634
var left = libString .getTString (string );
632
635
var leftEncoding = libString .getEncoding (string );
633
636
var right = libOther .getTString (other );
634
637
var rightEncoding = libOther .getEncoding (other );
635
638
636
- final RubyEncoding compatibleEncoding = checkEncodingNode .executeCheckEncoding (left , leftEncoding ,
639
+ final RubyEncoding compatibleEncoding = checkEncodingNode .executeCheckEncoding (node , left , leftEncoding ,
637
640
right , rightEncoding );
638
641
639
642
var result = concatNode .execute (left , right , compatibleEncoding .tencoding , true );
640
- return createString (result , compatibleEncoding );
643
+ return createString (node , result , compatibleEncoding );
641
644
}
642
645
}
643
646
0 commit comments