Skip to content

Commit e7d2524

Browse files
committed
[Truffle] Encoding::EncodingMap keys need to be uppercase.
1 parent 5ff64f4 commit e7d2524

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

truffle/src/main/java/org/jruby/truffle/nodes/core/EncodingNodes.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -509,19 +509,25 @@ public boolean isDummy(RubyEncoding encoding) {
509509
@CoreMethod(names = "encoding_map", onSingleton = true)
510510
public abstract static class EncodingMapNode extends CoreMethodNode {
511511

512+
@Child private CallDispatchHeadNode upcaseNode;
513+
@Child private CallDispatchHeadNode toSymNode;
512514
@Child private CallDispatchHeadNode newLookupTableNode;
513515
@Child private CallDispatchHeadNode lookupTableWriteNode;
514516
@Child private CallDispatchHeadNode newTupleNode;
515517

516518
public EncodingMapNode(RubyContext context, SourceSection sourceSection) {
517519
super(context, sourceSection);
520+
upcaseNode = DispatchHeadNodeFactory.createMethodCall(context);
521+
toSymNode = DispatchHeadNodeFactory.createMethodCall(context);
518522
newLookupTableNode = DispatchHeadNodeFactory.createMethodCall(context);
519523
lookupTableWriteNode = DispatchHeadNodeFactory.createMethodCall(context);
520524
newTupleNode = DispatchHeadNodeFactory.createMethodCall(context);
521525
}
522526

523527
public EncodingMapNode(EncodingMapNode prev) {
524528
super(prev);
529+
upcaseNode = prev.upcaseNode;
530+
toSymNode = prev.toSymNode;
525531
newLookupTableNode = prev.newLookupTableNode;
526532
lookupTableWriteNode = prev.lookupTableWriteNode;
527533
newTupleNode = prev.newTupleNode;
@@ -533,7 +539,8 @@ public Object encodingMap(VirtualFrame frame) {
533539

534540
final RubyEncoding[] encodings = RubyEncoding.cloneEncodingList();
535541
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);
537544
final Object value = newTupleNode.call(frame, getContext().getCoreLibrary().getTupleClass(), "create", null, nil(), i);
538545

539546
lookupTableWriteNode.call(frame, ret, "[]=", null, key, value);
@@ -544,7 +551,8 @@ public Object encodingMap(VirtualFrame frame) {
544551
final CaseInsensitiveBytesHash.CaseInsensitiveBytesHashEntry<EncodingDB.Entry> e =
545552
((CaseInsensitiveBytesHash.CaseInsensitiveBytesHashEntry<EncodingDB.Entry>)i.next());
546553

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);
548556
final RubyString alias = getContext().makeString(new ByteList(e.bytes, e.p, e.end - e.p));
549557
final int index = e.value.getIndex();
550558

0 commit comments

Comments
 (0)