Skip to content

Commit 7c554c5

Browse files
committed
Initialized an unready type during bases lookup
1 parent d25e526 commit 7c554c5

File tree

3 files changed

+14
-0
lines changed

3 files changed

+14
-0
lines changed

graalpython/com.oracle.graal.python.cext/src/capi.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1350,6 +1350,12 @@ PyAPI_FUNC(void) truffle_set_tp_flags(PyTypeObject* type, unsigned long flags) {
13501350
type->tp_flags = flags;
13511351
}
13521352

1353+
PyAPI_FUNC(void) truffle_check_type_ready(PyTypeObject* type) {
1354+
if (!(type->tp_flags & Py_TPFLAGS_READY)) {
1355+
PyType_Ready(type);
1356+
}
1357+
}
1358+
13531359
PyAPI_FUNC(int) truffle_BASETYPE_check(PyObject* type) {
13541360
return PyType_HasFeature(Py_TYPE(type), Py_TPFLAGS_BASETYPE);
13551361
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/NativeCAPISymbol.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,7 @@ public enum NativeCAPISymbol implements NativeCExtSymbol {
313313
FUN_UNICODE_SUBTYPE_NEW("unicode_subtype_new"),
314314
FUN_CHECK_BASESIZE_FOR_GETSTATE("tuffle_check_basesize_for_getstate"),
315315
FUN_TRUFFLE_SET_TP_FLAGS("truffle_set_tp_flags"),
316+
FUN_TRUFFLE_CHECK_TYPE_READY("truffle_check_type_ready"),
316317

317318
/* PyDateTime_CAPI */
318319

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/type/PythonManagedClass.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@
3535

3636
import com.oracle.graal.python.PythonLanguage;
3737
import com.oracle.graal.python.builtins.objects.PNone;
38+
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.PCallCapiFunction;
39+
import com.oracle.graal.python.builtins.objects.cext.capi.CExtNodes.ToSulongNode;
40+
import com.oracle.graal.python.builtins.objects.cext.capi.NativeCAPISymbol;
3841
import com.oracle.graal.python.builtins.objects.cext.capi.PythonClassNativeWrapper;
3942
import com.oracle.graal.python.builtins.objects.object.PythonObject;
4043
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
@@ -267,6 +270,10 @@ private void unsafeSetSuperClass(PythonAbstractClass... newBaseClasses) {
267270
}
268271
for (PythonAbstractClass base : getBaseClasses()) {
269272
if (base != null) {
273+
if (PGuards.isNativeClass(base)) {
274+
Object nativeBase = ToSulongNode.getUncached().execute(base);
275+
PCallCapiFunction.getUncached().call(NativeCAPISymbol.FUN_TRUFFLE_CHECK_TYPE_READY, nativeBase);
276+
}
270277
GetSubclassesNode.getUncached().execute(base).add(this);
271278
}
272279
}

0 commit comments

Comments
 (0)