|
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