@@ -1357,39 +1357,46 @@ protected RubyString sameEncoding(RubyString string, RubyEncoding newEncoding) {
1357
1357
@ Specialization (guards = { "encoding != newEncoding" , "tstring.isImmutable()" })
1358
1358
protected RubyString immutable (RubyString string , RubyEncoding newEncoding ,
1359
1359
@ Cached RubyStringLibrary libString ,
1360
+ @ Cached RubyStringLibrary profileEncoding ,
1360
1361
@ Cached TruffleString .ForceEncodingNode forceEncodingNode ,
1361
1362
@ Bind ("string.tstring" ) AbstractTruffleString tstring ,
1362
1363
@ Bind ("libString.getEncoding(string)" ) RubyEncoding encoding ) {
1363
- var newTString = forceEncodingNode .execute (tstring , encoding .tencoding , newEncoding .tencoding );
1364
- string .setTString (newTString , newEncoding );
1364
+ var newEncodingProfiled = profileEncoding .profileEncoding (newEncoding );
1365
+ var newTString = forceEncodingNode .execute (tstring , encoding .tencoding , newEncodingProfiled .tencoding );
1366
+ string .setTString (newTString , newEncodingProfiled );
1365
1367
return string ;
1366
1368
}
1367
1369
1368
1370
@ Specialization (
1369
1371
guards = { "encoding != newEncoding" , "!tstring.isImmutable()" , "!tstring.isNative()" })
1370
1372
protected RubyString mutableManaged (RubyString string , RubyEncoding newEncoding ,
1371
1373
@ Cached RubyStringLibrary libString ,
1374
+ @ Cached RubyStringLibrary profileEncoding ,
1372
1375
@ Cached MutableTruffleString .ForceEncodingNode forceEncodingNode ,
1373
1376
@ Bind ("string.tstring" ) AbstractTruffleString tstring ,
1374
1377
@ Bind ("libString.getEncoding(string)" ) RubyEncoding encoding ) {
1375
- var newTString = forceEncodingNode .execute (tstring , encoding .tencoding , newEncoding .tencoding );
1376
- string .setTString (newTString , newEncoding );
1378
+ var newEncodingProfiled = profileEncoding .profileEncoding (newEncoding );
1379
+ var newTString = forceEncodingNode .execute (tstring , encoding .tencoding , newEncodingProfiled .tencoding );
1380
+ string .setTString (newTString , newEncodingProfiled );
1377
1381
return string ;
1378
1382
}
1379
1383
1380
1384
@ Specialization (
1381
1385
guards = { "encoding != newEncoding" , "!tstring.isImmutable()" , "tstring.isNative()" })
1382
1386
protected RubyString mutableNative (RubyString string , RubyEncoding newEncoding ,
1383
1387
@ Cached RubyStringLibrary libString ,
1388
+ @ Cached RubyStringLibrary profileEncoding ,
1384
1389
@ Cached TruffleString .GetInternalNativePointerNode getInternalNativePointerNode ,
1385
1390
@ Cached MutableTruffleString .FromNativePointerNode fromNativePointerNode ,
1386
1391
@ Bind ("string.tstring" ) AbstractTruffleString tstring ,
1387
1392
@ Bind ("libString.getEncoding(string)" ) RubyEncoding encoding ) {
1393
+ var newEncodingProfiled = profileEncoding .profileEncoding (newEncoding );
1388
1394
var currentEncoding = encoding .tencoding ;
1389
1395
var pointer = (Pointer ) getInternalNativePointerNode .execute (tstring , currentEncoding );
1390
1396
var byteLength = tstring .byteLength (currentEncoding );
1391
- var newTString = fromNativePointerNode .execute (pointer , 0 , byteLength , newEncoding .tencoding , false );
1392
- string .setTString (newTString , newEncoding );
1397
+ var newTString = fromNativePointerNode .execute (pointer , 0 , byteLength , newEncodingProfiled .tencoding ,
1398
+ false );
1399
+ string .setTString (newTString , newEncodingProfiled );
1393
1400
return string ;
1394
1401
}
1395
1402
0 commit comments