|
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