|
29 | 29 | import static com.oracle.graal.python.nodes.SpecialAttributeNames.__BASES__;
|
30 | 30 | import static com.oracle.graal.python.nodes.SpecialAttributeNames.__CLASS__;
|
31 | 31 | import static com.oracle.graal.python.nodes.SpecialAttributeNames.__DICT__;
|
| 32 | +import static com.oracle.graal.python.nodes.SpecialAttributeNames.__MODULE__; |
32 | 33 | import static com.oracle.graal.python.nodes.SpecialAttributeNames.__MRO__;
|
33 | 34 | import static com.oracle.graal.python.nodes.SpecialAttributeNames.__NAME__;
|
| 35 | +import static com.oracle.graal.python.nodes.SpecialAttributeNames.__QUALNAME__; |
34 | 36 | import static com.oracle.graal.python.nodes.SpecialMethodNames.__CALL__;
|
35 | 37 | import static com.oracle.graal.python.nodes.SpecialMethodNames.__DELETE__;
|
36 | 38 | import static com.oracle.graal.python.nodes.SpecialMethodNames.__GETATTRIBUTE__;
|
|
39 | 41 | import static com.oracle.graal.python.nodes.SpecialMethodNames.__INSTANCECHECK__;
|
40 | 42 | import static com.oracle.graal.python.nodes.SpecialMethodNames.__NEW__;
|
41 | 43 | import static com.oracle.graal.python.nodes.SpecialMethodNames.__PREPARE__;
|
| 44 | +import static com.oracle.graal.python.nodes.SpecialMethodNames.__REPR__; |
42 | 45 | import static com.oracle.graal.python.nodes.SpecialMethodNames.__SET__;
|
43 | 46 | import static com.oracle.graal.python.nodes.SpecialMethodNames.__SUBCLASSCHECK__;
|
44 | 47 | import static com.oracle.graal.python.nodes.SpecialMethodNames.__SUBCLASSES__;
|
|
62 | 65 | import com.oracle.graal.python.builtins.objects.mappingproxy.PMappingproxy;
|
63 | 66 | import com.oracle.graal.python.builtins.objects.object.PythonObject;
|
64 | 67 | import com.oracle.graal.python.builtins.objects.type.TypeBuiltinsFactory.CallNodeFactory;
|
65 |
| -import com.oracle.graal.python.nodes.SpecialMethodNames; |
66 | 68 | import com.oracle.graal.python.nodes.argument.positional.PositionalArgumentsNode;
|
67 | 69 | import com.oracle.graal.python.nodes.attributes.LookupAttributeInMRONode;
|
68 | 70 | import com.oracle.graal.python.nodes.attributes.LookupInheritedAttributeNode;
|
@@ -101,14 +103,25 @@ protected List<? extends NodeFactory<? extends PythonBuiltinBaseNode>> getNodeFa
|
101 | 103 | return TypeBuiltinsFactory.getFactories();
|
102 | 104 | }
|
103 | 105 |
|
104 |
| - @Builtin(name = SpecialMethodNames.__REPR__, fixedNumOfPositionalArgs = 1) |
| 106 | + @Builtin(name = __REPR__, fixedNumOfPositionalArgs = 1) |
105 | 107 | @GenerateNodeFactory
|
106 | 108 | public abstract static class ReprNode extends PythonUnaryBuiltinNode {
|
107 | 109 |
|
108 | 110 | @Specialization
|
| 111 | + public String repr(PythonClass self, |
| 112 | + @Cached("create()") ReadAttributeFromObjectNode readModuleNode, |
| 113 | + @Cached("create()") ReadAttributeFromObjectNode readQualNameNode) { |
| 114 | + Object moduleName = readModuleNode.execute(self, __MODULE__); |
| 115 | + Object qualName = readQualNameNode.execute(self, __QUALNAME__); |
| 116 | + return concat(moduleName, qualName); |
| 117 | + } |
| 118 | + |
109 | 119 | @TruffleBoundary
|
110 |
| - public String repr(PythonClass self) { |
111 |
| - return self.toString(); |
| 120 | + private static String concat(Object moduleName, Object qualName) { |
| 121 | + if (moduleName != PNone.NO_VALUE) { |
| 122 | + return String.format("<class '%s.%s'>", moduleName, qualName); |
| 123 | + } |
| 124 | + return String.format("<class '%s'>", qualName); |
112 | 125 | }
|
113 | 126 | }
|
114 | 127 |
|
|
0 commit comments