Skip to content

Commit 70de9ff

Browse files
committed
Fix: consider '__module__' attribute in '__repr__' builtin.
1 parent 6bc05ea commit 70de9ff

File tree

4 files changed

+17
-7
lines changed

4 files changed

+17
-7
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/Python3Core.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,7 @@ public String[] builtinModuleNames() {
425425
return builtinModules.keySet().toArray(new String[0]);
426426
}
427427

428+
@Override
428429
public PythonModule getBuiltins() {
429430
return builtinsModule;
430431
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/object/ObjectBuiltins.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828

2929
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__CLASS__;
3030
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__DICT__;
31+
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__MODULE__;
32+
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__QUALNAME__;
3133
import static com.oracle.graal.python.nodes.SpecialMethodNames.RICHCMP;
3234
import static com.oracle.graal.python.nodes.SpecialMethodNames.__BOOL__;
3335
import static com.oracle.graal.python.nodes.SpecialMethodNames.__DELATTR__;
@@ -75,15 +77,13 @@
7577
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
7678
import com.oracle.graal.python.nodes.function.builtins.PythonVarargsBuiltinNode;
7779
import com.oracle.graal.python.nodes.object.GetClassNode;
78-
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
7980
import com.oracle.truffle.api.CompilerDirectives;
8081
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
8182
import com.oracle.truffle.api.dsl.Cached;
8283
import com.oracle.truffle.api.dsl.Fallback;
8384
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
8485
import com.oracle.truffle.api.dsl.NodeFactory;
8586
import com.oracle.truffle.api.dsl.Specialization;
86-
import com.oracle.truffle.api.dsl.TypeSystemReference;
8787
import com.oracle.truffle.api.frame.VirtualFrame;
8888
import com.oracle.truffle.api.nodes.UnexpectedResultException;
8989
import com.oracle.truffle.api.profiles.BranchProfile;
@@ -168,17 +168,24 @@ public Object str(Object self,
168168
}
169169

170170
@Builtin(name = __REPR__, fixedNumOfPositionalArgs = 1)
171-
@TypeSystemReference(PythonArithmeticTypes.class)
172171
@GenerateNodeFactory
173172
public abstract static class ReprNode extends PythonUnaryBuiltinNode {
174173
@Specialization
175174
@TruffleBoundary
176175
String repr(Object self,
177-
@Cached("create()") GetClassNode getClass) {
176+
@Cached("create()") GetClassNode getClass,
177+
@Cached("create()") ReadAttributeFromObjectNode readModuleNode,
178+
@Cached("create()") ReadAttributeFromObjectNode readQualNameNode) {
178179
if (self == PNone.NONE) {
179180
return "None";
180181
}
181-
return String.format("<%s object at 0x%x>", getClass.execute(self).getName(), self.hashCode());
182+
PythonClass type = getClass.execute(self);
183+
Object moduleName = readModuleNode.execute(type, __MODULE__);
184+
Object qualName = readQualNameNode.execute(type, __QUALNAME__);
185+
if (moduleName != PNone.NO_VALUE && !moduleName.equals(getCore().getBuiltins().getModuleName())) {
186+
return String.format("<%s.%s object at 0x%x>", moduleName, qualName, self.hashCode());
187+
}
188+
return String.format("<%s object at 0x%x>", qualName, self.hashCode());
182189
}
183190
}
184191

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/type/TypeBuiltins.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,8 @@ public String repr(PythonClass self,
117117
}
118118

119119
@TruffleBoundary
120-
private static String concat(Object moduleName, Object qualName) {
121-
if (moduleName != PNone.NO_VALUE) {
120+
private String concat(Object moduleName, Object qualName) {
121+
if (moduleName != PNone.NO_VALUE && !moduleName.equals(getCore().getBuiltins().getModuleName())) {
122122
return String.format("<class '%s.%s'>", moduleName, qualName);
123123
}
124124
return String.format("<class '%s'>", qualName);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/PythonCore.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ public interface PythonCore {
115115

116116
public PInt getFalse();
117117

118+
public PythonModule getBuiltins();
119+
118120
static void writeWarning(String warning) {
119121
PythonLanguage.getLogger().warning(warning);
120122
}

0 commit comments

Comments
 (0)