Skip to content

Commit 3993c52

Browse files
committed
Factor out common code creating dummy and replicate encodings.
1 parent ebcd55f commit 3993c52

File tree

1 file changed

+19
-16
lines changed

1 file changed

+19
-16
lines changed

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

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -652,21 +652,29 @@ public DynamicObject encodingGetObjectEncodingNil(DynamicObject object) {
652652

653653
}
654654

655+
public static abstract class EncodingCreationNode extends PrimitiveArrayArgumentsNode {
656+
657+
public DynamicObject setIndexOrRaiseError(String name, DynamicObject newEncoding) {
658+
if (newEncoding == null) {
659+
throw new RaiseException(getContext(), coreExceptions().argumentErrorEncodingAlreadyRegistered(name, this));
660+
}
661+
662+
final int index = Layouts.ENCODING.getEncoding(newEncoding).getIndex();
663+
return createArray(new Object[]{ newEncoding, index }, 2);
664+
}
665+
666+
}
667+
655668
@Primitive(name = "encoding_replicate")
656-
public static abstract class EncodingReplicateNode extends PrimitiveArrayArgumentsNode {
669+
public static abstract class EncodingReplicateNode extends EncodingCreationNode {
657670

658671
@Specialization(guards = "isRubyString(nameObject)")
659672
public DynamicObject encodingReplicate(DynamicObject self, DynamicObject nameObject) {
660673
final String name = StringOperations.getString(nameObject);
661674
final Encoding encoding = EncodingOperations.getEncoding(self);
662675

663676
final DynamicObject newEncoding = replicate(name, encoding);
664-
if (newEncoding == null) {
665-
throw new RaiseException(getContext(), coreExceptions().argumentErrorEncodingAlreadyRegistered(name, this));
666-
}
667-
668-
final int index = Layouts.ENCODING.getEncoding(newEncoding).getIndex();
669-
return createArray(new Object[]{ newEncoding, index }, 2);
677+
return setIndexOrRaiseError(name, newEncoding);
670678
}
671679

672680
@TruffleBoundary
@@ -677,23 +685,18 @@ private DynamicObject replicate(String name, Encoding encoding) {
677685
}
678686

679687
@Primitive(name = "encoding_create_dummy", needsSelf = false)
680-
public static abstract class DummyEncodingeNode extends PrimitiveArrayArgumentsNode {
688+
public static abstract class DummyEncodingeNode extends EncodingCreationNode {
681689

682690
@Specialization(guards = "isRubyString(nameObject)")
683691
public DynamicObject createDummyEncoding(DynamicObject nameObject) {
684692
final String name = StringOperations.getString(nameObject);
685693

686-
final DynamicObject newEncoding = dummy(name);
687-
if (newEncoding == null) {
688-
throw new RaiseException(getContext(), coreExceptions().argumentErrorEncodingAlreadyRegistered(name, this));
689-
}
690-
691-
final int index = Layouts.ENCODING.getEncoding(newEncoding).getIndex();
692-
return createArray(new Object[]{ newEncoding, index }, 2);
694+
final DynamicObject newEncoding = createDummy(name);
695+
return setIndexOrRaiseError(name, newEncoding);
693696
}
694697

695698
@TruffleBoundary
696-
private DynamicObject dummy(String name) {
699+
private DynamicObject createDummy(String name) {
697700
return getContext().getEncodingManager().createDummyEncoding(name);
698701
}
699702

0 commit comments

Comments
 (0)