|
48 | 48 | import static com.oracle.graal.python.builtins.objects.cext.structs.CFields.PyTypeObject__tp_del;
|
49 | 49 | import static com.oracle.graal.python.builtins.objects.cext.structs.CFields.PyTypeObject__tp_free;
|
50 | 50 | import static com.oracle.graal.python.builtins.objects.cext.structs.CFields.PyTypeObject__tp_vectorcall_offset;
|
| 51 | +import static com.oracle.graal.python.builtins.objects.cext.structs.CFields.PyTypeObject__tp_weaklistoffset; |
51 | 52 | import static com.oracle.graal.python.builtins.objects.type.TypeBuiltins.TYPE_ALLOC;
|
52 | 53 |
|
53 | 54 | import com.oracle.graal.python.builtins.PythonBuiltinClassType;
|
|
70 | 71 | import com.oracle.graal.python.builtins.objects.dict.PDict;
|
71 | 72 | import com.oracle.graal.python.builtins.objects.method.PDecoratedMethod;
|
72 | 73 | import com.oracle.graal.python.builtins.objects.str.PString;
|
| 74 | +import com.oracle.graal.python.builtins.objects.type.PythonBuiltinClass; |
73 | 75 | import com.oracle.graal.python.builtins.objects.type.PythonManagedClass;
|
74 | 76 | import com.oracle.graal.python.builtins.objects.type.SpecialMethodSlot;
|
75 | 77 | import com.oracle.graal.python.builtins.objects.type.TypeBuiltins;
|
|
80 | 82 | import com.oracle.graal.python.builtins.objects.type.TypeNodes.GetMroStorageNode;
|
81 | 83 | import com.oracle.graal.python.builtins.objects.type.TypeNodes.GetSubclassesNode;
|
82 | 84 | import com.oracle.graal.python.builtins.objects.type.TypeNodes.GetTypeFlagsNode;
|
83 |
| -import com.oracle.graal.python.builtins.objects.type.TypeNodes.GetWeakListOffsetNode; |
84 | 85 | import com.oracle.graal.python.builtins.objects.type.TypeNodesFactory.GetDictOffsetNodeGen;
|
85 | 86 | import com.oracle.graal.python.builtins.objects.type.TypeNodesFactory.GetTypeFlagsNodeGen;
|
86 | 87 | import com.oracle.graal.python.nodes.PNodeWithContext;
|
87 | 88 | import com.oracle.graal.python.nodes.SpecialAttributeNames;
|
| 89 | +import com.oracle.graal.python.nodes.attributes.LookupAttributeInMRONode; |
| 90 | +import com.oracle.graal.python.nodes.attributes.LookupAttributeInMRONodeGen; |
88 | 91 | import com.oracle.graal.python.nodes.attributes.LookupCallableSlotInMRONode;
|
89 | 92 | import com.oracle.graal.python.nodes.attributes.LookupNativeSlotNode;
|
90 | 93 | import com.oracle.graal.python.nodes.attributes.LookupNativeSlotNodeGen.LookupNativeGetattroSlotNodeGen;
|
@@ -262,6 +265,7 @@ static void initializeType(PythonClassNativeWrapper obj, Object mem,
|
262 | 265 |
|
263 | 266 | PythonToNativeNode toNative = PythonToNativeNodeGen.getUncached();
|
264 | 267 | PythonToNativeNewRefNode toNativeNewRef = PythonToNativeNewRefNodeGen.getUncached();
|
| 268 | + LookupAttributeInMRONode.Dynamic lookupAttrNode = LookupAttributeInMRONodeGen.DynamicNodeGen.getUncached(); |
265 | 269 | CastToTruffleStringNode castToStringNode = CastToTruffleStringNode.getUncached();
|
266 | 270 | CStructAccess.WritePointerNode writePtrNode = CStructAccessFactory.WritePointerNodeGen.getUncached();
|
267 | 271 | CStructAccess.WriteLongNode writeI64Node = CStructAccessFactory.WriteLongNodeGen.getUncached();
|
@@ -292,7 +296,19 @@ static void initializeType(PythonClassNativeWrapper obj, Object mem,
|
292 | 296 | writePtrNode.write(mem, CFields.PyTypeObject__tp_name, clazz.getClassNativeWrapper().getNameWrapper());
|
293 | 297 | writeI64Node.write(mem, CFields.PyTypeObject__tp_basicsize, GetBasicSizeNode.executeUncached(clazz));
|
294 | 298 | writeI64Node.write(mem, CFields.PyTypeObject__tp_itemsize, GetItemSizeNode.executeUncached(clazz));
|
295 |
| - writeI64Node.write(mem, CFields.PyTypeObject__tp_weaklistoffset, GetWeakListOffsetNode.executeUncached(clazz)); |
| 299 | + // writeI64Node.write(mem, CFields.PyTypeObject__tp_weaklistoffset, |
| 300 | + // GetWeakListOffsetNode.executeUncached(clazz)); |
| 301 | + /* |
| 302 | + * TODO msimacek: this should use GetWeakListOffsetNode as in the commented out code |
| 303 | + * above. Unfortunately, it causes memory corruption in several libraries |
| 304 | + */ |
| 305 | + long weaklistoffset; |
| 306 | + if (clazz instanceof PythonBuiltinClass builtin) { |
| 307 | + weaklistoffset = builtin.getType().getWeaklistoffset(); |
| 308 | + } else { |
| 309 | + weaklistoffset = LookupNativeI64MemberInMRONodeGen.getUncached().execute(clazz, PyTypeObject__tp_weaklistoffset, SpecialAttributeNames.T___WEAKLISTOFFSET__); |
| 310 | + } |
| 311 | + writeI64Node.write(mem, CFields.PyTypeObject__tp_weaklistoffset, weaklistoffset); |
296 | 312 | writePtrNode.write(mem, CFields.PyTypeObject__tp_dealloc, lookup(clazz, PyTypeObject__tp_dealloc, TypeBuiltins.TYPE_DEALLOC));
|
297 | 313 | writeI64Node.write(mem, CFields.PyTypeObject__tp_vectorcall_offset, lookupSize(clazz, PyTypeObject__tp_vectorcall_offset, TypeBuiltins.TYPE_VECTORCALL_OFFSET));
|
298 | 314 | writePtrNode.write(mem, CFields.PyTypeObject__tp_getattr, nullValue);
|
|
0 commit comments