Skip to content

Commit a2db171

Browse files
committed
Fix Module#{to_s,inspect} to not return an extra #<Class: for singleton classes
1 parent 6a22ec3 commit a2db171

File tree

3 files changed

+7
-7
lines changed

3 files changed

+7
-7
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ Bug fixes:
2525
* Process#exec: set close-on-exec to false for fd redirection (#1805, @XrXr, @rafaelfranca).
2626
* Building C extensions should now work with frozen string literals (#1786).
2727
* Keep the Truffle working directory in sync with the native working directory.
28+
* Fixed `Module#to_s` and `Module#inspect` to not return an extra `#<Class:` for singleton classes.
2829

2930
Compatibility:
3031

spec/tags/core/module/to_s_tags.txt

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/main/java/org/truffleruby/core/module/ModuleNodes.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1854,19 +1854,19 @@ protected DynamicObject toS(DynamicObject module) {
18541854
final ModuleFields fields = Layouts.MODULE.getFields(module);
18551855
if (RubyGuards.isSingletonClass(module)) {
18561856
final DynamicObject attached = Layouts.CLASS.getAttached(module);
1857-
final String name;
1858-
if (Layouts.CLASS.isClass(attached) || Layouts.MODULE.isModule(attached)) {
1857+
final String attachedName;
1858+
if (Layouts.MODULE.isModule(attached)) {
1859+
attachedName = Layouts.MODULE.getFields(attached).getName();
1860+
} else {
18591861
if (callRbInspect == null) {
18601862
CompilerDirectives.transferToInterpreterAndInvalidate();
18611863
callRbInspect = insert(CallDispatchHeadNode.createPrivate());
18621864
}
18631865
final Object inspectResult = callRbInspect
18641866
.call(coreLibrary().getTruffleTypeModule(), "rb_inspect", attached);
1865-
name = StringOperations.getString((DynamicObject) inspectResult);
1866-
} else {
1867-
name = fields.getName();
1867+
attachedName = StringOperations.getString((DynamicObject) inspectResult);
18681868
}
1869-
moduleName = "#<Class:" + name + ">";
1869+
moduleName = "#<Class:" + attachedName + ">";
18701870
} else if (fields.isRefinement()) {
18711871
final String refinedClass = Layouts.MODULE.getFields(fields.getRefinedClass()).getName();
18721872
final String refinementNamespace = Layouts.MODULE.getFields(fields.getRefinementNamespace()).getName();

0 commit comments

Comments
 (0)