|
63 | 63 | import com.oracle.graal.python.builtins.objects.ints.PInt;
|
64 | 64 | import com.oracle.graal.python.builtins.objects.list.PList;
|
65 | 65 | import com.oracle.graal.python.builtins.objects.memoryview.PMemoryView;
|
| 66 | +import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary; |
66 | 67 | import com.oracle.graal.python.builtins.objects.set.PFrozenSet;
|
67 | 68 | import com.oracle.graal.python.builtins.objects.set.PSet;
|
68 | 69 | import com.oracle.graal.python.builtins.objects.str.PString;
|
69 | 70 | import com.oracle.graal.python.builtins.objects.tuple.PTuple;
|
70 |
| -import com.oracle.graal.python.builtins.objects.type.LazyPythonClass; |
71 | 71 | import com.oracle.graal.python.nodes.ErrorMessages;
|
72 | 72 | import com.oracle.graal.python.nodes.IndirectCallNode;
|
73 | 73 | import com.oracle.graal.python.nodes.PNodeWithState;
|
@@ -231,6 +231,7 @@ abstract static class MarshallerNode extends PNodeWithState {
|
231 | 231 | @Child private MarshallerNode recursiveNode;
|
232 | 232 | private int depth = 0;
|
233 | 233 | @Child private IsBuiltinClassProfile isBuiltinProfile;
|
| 234 | + @Child private PythonObjectLibrary plib; |
234 | 235 |
|
235 | 236 | protected MarshallerNode getRecursiveNode() {
|
236 | 237 | if (recursiveNode == null) {
|
@@ -492,13 +493,17 @@ void handlePNone(PNone v, int version, DataOutputStream buffer) {
|
492 | 493 |
|
493 | 494 | @Fallback
|
494 | 495 | void writeObject(Object v, int version, DataOutputStream buffer) {
|
| 496 | + if (plib == null) { |
| 497 | + CompilerDirectives.transferToInterpreterAndInvalidate(); |
| 498 | + plib = insert(PythonObjectLibrary.getFactory().create(v)); |
| 499 | + } |
495 | 500 | if (depth >= MAX_MARSHAL_STACK_DEPTH) {
|
496 | 501 | throw raise(ValueError, ErrorMessages.MAX_MARSHAL_STACK_DEPTH);
|
497 | 502 | } else if (v == null) {
|
498 | 503 | writeByte(TYPE_NULL, version, buffer);
|
499 | 504 | } else if (v == PNone.NONE) {
|
500 | 505 | writeByte(TYPE_NONE, version, buffer);
|
501 |
| - } else if (v instanceof LazyPythonClass) { |
| 506 | + } else if (plib.isLazyPythonClass(v)) { |
502 | 507 | if (isBuiltinProfile == null) {
|
503 | 508 | CompilerDirectives.transferToInterpreterAndInvalidate();
|
504 | 509 | isBuiltinProfile = insert(IsBuiltinClassProfile.create());
|
|
0 commit comments