|
82 | 82 | import com.oracle.graal.python.builtins.PythonBuiltins;
|
83 | 83 | import com.oracle.graal.python.builtins.objects.PNone;
|
84 | 84 | import com.oracle.graal.python.builtins.objects.PNotImplemented;
|
| 85 | +import com.oracle.graal.python.builtins.objects.PythonAbstractObject; |
85 | 86 | import com.oracle.graal.python.builtins.objects.function.PKeyword;
|
86 | 87 | import com.oracle.graal.python.builtins.objects.ints.PInt;
|
87 | 88 | import com.oracle.graal.python.builtins.objects.iterator.PForeignArrayIterator;
|
@@ -876,6 +877,35 @@ protected Object doArray(VirtualFrame frame, Object object,
|
876 | 877 | return doIt(frame, object);
|
877 | 878 | }
|
878 | 879 |
|
| 880 | + @Specialization(guards = "getContext().getEnv().isHostObject(self)") |
| 881 | + Object doHostObject(VirtualFrame frame, Object self, |
| 882 | + @CachedLibrary(limit = "3") InteropLibrary lib) { |
| 883 | + try { |
| 884 | + boolean isMetaObject = lib.isMetaObject(self); |
| 885 | + Object metaObject = isMetaObject |
| 886 | + ? self |
| 887 | + : lib.hasMetaObject(self) ? lib.getMetaObject(self) : null; |
| 888 | + if (metaObject != null) { |
| 889 | + Object displayName = lib.toDisplayString(metaObject); |
| 890 | + String text = createDisplayName(isMetaObject, displayName); |
| 891 | + return PythonUtils.format("<%s at 0x%x>", text, PythonAbstractObject.systemHashCode(self)); |
| 892 | + } |
| 893 | + |
| 894 | + } catch (UnsupportedMessageException ex) { |
| 895 | + // do nothing |
| 896 | + } |
| 897 | + return doIt(frame, self); |
| 898 | + } |
| 899 | + |
| 900 | + @CompilerDirectives.TruffleBoundary |
| 901 | + private static String createDisplayName(boolean isMetaObject, Object object) { |
| 902 | + StringBuilder sb = new StringBuilder(); |
| 903 | + sb.append(isMetaObject ? "JavaClass[" : "JavaObject["); |
| 904 | + sb.append(object.toString()); |
| 905 | + sb.append("]"); |
| 906 | + return sb.toString(); |
| 907 | + } |
| 908 | + |
879 | 909 | @Fallback
|
880 | 910 | protected Object doIt(VirtualFrame frame, Object object) {
|
881 | 911 | return getObjectStrNode().call(frame, object);
|
|
0 commit comments