@@ -509,19 +509,25 @@ public boolean isDummy(RubyEncoding encoding) {
509
509
@ CoreMethod (names = "encoding_map" , onSingleton = true )
510
510
public abstract static class EncodingMapNode extends CoreMethodNode {
511
511
512
+ @ Child private CallDispatchHeadNode upcaseNode ;
513
+ @ Child private CallDispatchHeadNode toSymNode ;
512
514
@ Child private CallDispatchHeadNode newLookupTableNode ;
513
515
@ Child private CallDispatchHeadNode lookupTableWriteNode ;
514
516
@ Child private CallDispatchHeadNode newTupleNode ;
515
517
516
518
public EncodingMapNode (RubyContext context , SourceSection sourceSection ) {
517
519
super (context , sourceSection );
520
+ upcaseNode = DispatchHeadNodeFactory .createMethodCall (context );
521
+ toSymNode = DispatchHeadNodeFactory .createMethodCall (context );
518
522
newLookupTableNode = DispatchHeadNodeFactory .createMethodCall (context );
519
523
lookupTableWriteNode = DispatchHeadNodeFactory .createMethodCall (context );
520
524
newTupleNode = DispatchHeadNodeFactory .createMethodCall (context );
521
525
}
522
526
523
527
public EncodingMapNode (EncodingMapNode prev ) {
524
528
super (prev );
529
+ upcaseNode = prev .upcaseNode ;
530
+ toSymNode = prev .toSymNode ;
525
531
newLookupTableNode = prev .newLookupTableNode ;
526
532
lookupTableWriteNode = prev .lookupTableWriteNode ;
527
533
newTupleNode = prev .newTupleNode ;
@@ -533,7 +539,8 @@ public Object encodingMap(VirtualFrame frame) {
533
539
534
540
final RubyEncoding [] encodings = RubyEncoding .cloneEncodingList ();
535
541
for (int i = 0 ; i < encodings .length ; i ++) {
536
- final RubySymbol key = getContext ().newSymbol (encodings [i ].getName ());
542
+ final Object upcased = upcaseNode .call (frame , getContext ().makeString (encodings [i ].getName ()), "upcase" , null );
543
+ final Object key = toSymNode .call (frame , upcased , "to_sym" , null );
537
544
final Object value = newTupleNode .call (frame , getContext ().getCoreLibrary ().getTupleClass (), "create" , null , nil (), i );
538
545
539
546
lookupTableWriteNode .call (frame , ret , "[]=" , null , key , value );
@@ -544,7 +551,8 @@ public Object encodingMap(VirtualFrame frame) {
544
551
final CaseInsensitiveBytesHash .CaseInsensitiveBytesHashEntry <EncodingDB .Entry > e =
545
552
((CaseInsensitiveBytesHash .CaseInsensitiveBytesHashEntry <EncodingDB .Entry >)i .next ());
546
553
547
- final RubySymbol key = getContext ().newSymbol (new ByteList (e .bytes , e .p , e .end - e .p ));
554
+ final Object upcased = upcaseNode .call (frame , getContext ().makeString (new ByteList (e .bytes , e .p , e .end - e .p )), "upcase" , null );
555
+ final Object key = toSymNode .call (frame , upcased , "to_sym" , null );
548
556
final RubyString alias = getContext ().makeString (new ByteList (e .bytes , e .p , e .end - e .p ));
549
557
final int index = e .value .getIndex ();
550
558
0 commit comments