|
72 | 72 | import com.oracle.graal.python.builtins.PythonBuiltins; |
73 | 73 | import com.oracle.graal.python.builtins.objects.PNone; |
74 | 74 | import com.oracle.graal.python.builtins.objects.PNotImplemented; |
| 75 | +import com.oracle.graal.python.builtins.objects.PythonAbstractObject; |
75 | 76 | import com.oracle.graal.python.builtins.objects.function.PKeyword; |
76 | 77 | import com.oracle.graal.python.builtins.objects.ints.PInt; |
77 | 78 | import com.oracle.graal.python.builtins.objects.iterator.PForeignArrayIterator; |
|
98 | 99 | import com.oracle.graal.python.runtime.PythonContext; |
99 | 100 | import com.oracle.graal.python.runtime.exception.PythonErrorType; |
100 | 101 | import com.oracle.graal.python.runtime.object.PythonObjectFactory; |
| 102 | +import com.oracle.graal.python.util.PythonUtils; |
101 | 103 | import com.oracle.truffle.api.CompilerDirectives; |
102 | 104 | import com.oracle.truffle.api.dsl.Cached; |
103 | 105 | import com.oracle.truffle.api.dsl.CachedContext; |
@@ -840,6 +842,35 @@ protected Object doArray(VirtualFrame frame, Object object, |
840 | 842 | return doIt(frame, object); |
841 | 843 | } |
842 | 844 |
|
| 845 | + @Specialization(guards = "getContext().getEnv().isHostObject(self)") |
| 846 | + Object doHostObject(VirtualFrame frame, Object self, |
| 847 | + @CachedLibrary(limit = "3") InteropLibrary lib) { |
| 848 | + try { |
| 849 | + boolean isMetaObject = lib.isMetaObject(self); |
| 850 | + Object metaObject = isMetaObject |
| 851 | + ? self |
| 852 | + : lib.hasMetaObject(self) ? lib.getMetaObject(self) : null; |
| 853 | + if (metaObject != null) { |
| 854 | + Object displayName = lib.toDisplayString(metaObject); |
| 855 | + String text = createDisplayName(isMetaObject, displayName); |
| 856 | + return PythonUtils.format("<%s at 0x%x>", text, PythonAbstractObject.systemHashCode(self)); |
| 857 | + } |
| 858 | + |
| 859 | + } catch (UnsupportedMessageException ex) { |
| 860 | + // do nothing |
| 861 | + } |
| 862 | + return doIt(frame, self); |
| 863 | + } |
| 864 | + |
| 865 | + @CompilerDirectives.TruffleBoundary |
| 866 | + private static String createDisplayName(boolean isMetaObject, Object object) { |
| 867 | + StringBuilder sb = new StringBuilder(); |
| 868 | + sb.append(isMetaObject ? "JavaClass[" : "JavaObject["); |
| 869 | + sb.append(object.toString()); |
| 870 | + sb.append("]"); |
| 871 | + return sb.toString(); |
| 872 | + } |
| 873 | + |
843 | 874 | @Fallback |
844 | 875 | protected Object doIt(VirtualFrame frame, Object object) { |
845 | 876 | return getObjectStrNode().call(frame, object); |
|
0 commit comments