|
40 | 40 | */
|
41 | 41 | package com.oracle.graal.python.builtins.objects.cext.capi;
|
42 | 42 |
|
| 43 | +import com.oracle.graal.python.builtins.objects.cext.PythonAbstractNativeObject; |
43 | 44 | import com.oracle.graal.python.builtins.objects.cext.capi.PythonNativeWrapper.PythonAbstractObjectNativeWrapper;
|
44 | 45 | import com.oracle.graal.python.builtins.objects.cext.common.CArrayWrappers.CStringWrapper;
|
45 | 46 | import com.oracle.graal.python.builtins.objects.cext.structs.CFields;
|
|
49 | 50 | import com.oracle.graal.python.builtins.objects.type.PythonClass;
|
50 | 51 | import com.oracle.graal.python.builtins.objects.type.PythonManagedClass;
|
51 | 52 | import com.oracle.graal.python.builtins.objects.type.TypeFlags;
|
| 53 | +import com.oracle.graal.python.builtins.objects.type.TypeNodes; |
52 | 54 | import com.oracle.graal.python.builtins.objects.type.TypeNodes.GetTypeFlagsNode;
|
53 | 55 | import com.oracle.graal.python.builtins.objects.type.TypeNodes.SetTypeFlagsNode;
|
54 | 56 | import com.oracle.graal.python.builtins.objects.type.TypeNodesFactory.SetBasicSizeNodeGen;
|
55 | 57 | import com.oracle.graal.python.builtins.objects.type.TypeNodesFactory.SetItemSizeNodeGen;
|
56 | 58 | import com.oracle.graal.python.nodes.HiddenAttr;
|
57 | 59 | import com.oracle.graal.python.nodes.PGuards;
|
| 60 | +import com.oracle.graal.python.nodes.object.GetClassNode; |
58 | 61 | import com.oracle.graal.python.util.PythonUtils;
|
59 | 62 | import com.oracle.truffle.api.CompilerAsserts;
|
60 | 63 | import com.oracle.truffle.api.CompilerDirectives;
|
@@ -188,7 +191,15 @@ public Object getReplacement(InteropLibrary lib) {
|
188 | 191 | */
|
189 | 192 | PythonManagedClass clazz = (PythonManagedClass) getDelegate();
|
190 | 193 | boolean heaptype = (GetTypeFlagsNode.executeUncached(clazz) & TypeFlags.HEAPTYPE) != 0;
|
191 |
| - Object pointerObject = AllocateNode.allocUncached(heaptype ? CStructs.PyHeapTypeObject : CStructs.PyTypeObject); |
| 194 | + long size = CStructs.PyTypeObject.size(); |
| 195 | + if (heaptype) { |
| 196 | + size = CStructs.PyHeapTypeObject.size(); |
| 197 | + if (GetClassNode.executeUncached(clazz) instanceof PythonAbstractNativeObject nativeMetatype) { |
| 198 | + // TODO should call the metatype's tp_alloc |
| 199 | + size = TypeNodes.GetBasicSizeNode.executeUncached(nativeMetatype); |
| 200 | + } |
| 201 | + } |
| 202 | + Object pointerObject = AllocateNode.allocUncached(size); |
192 | 203 | replacement = registerReplacement(pointerObject, true, lib);
|
193 | 204 |
|
194 | 205 | ToNativeTypeNode.initializeType(this, pointerObject, heaptype);
|
|
0 commit comments