hpy
hpy copied to clipboard
HPyType_FromSpec: disallow setting any tp_flags not supported by HPy
Currently HPy just copies HPyType_Spec flags to PyType_Spec:
// ctx_type.c: (simplified)
spec->flags = hpyspec->flags;
and the user is expected to use at least HPy_TPFLAGS_DEFAULT in their HPyType_Spec, which exposes CPython specific flags in HPy headers:
// hpytype.h:
/* All types are dynamically allocated */
#define _Py_TPFLAGS_HEAPTYPE (1UL << 9)
#define _Py_TPFLAGS_HAVE_VERSION_TAG (1UL << 18)
#define HPy_TPFLAGS_DEFAULT (_Py_TPFLAGS_HEAPTYPE | _Py_TPFLAGS_HAVE_VERSION_TAG)
- This allows users to use CPython specific flags via HPy and reduce portability -- I suggest to test the flags against a mask that contains only the flags supported by HPy (currently:
HPy_TPFLAGS_BASETYPEandHPy_TPFLAGS_HAVE_GC). - Would it be safer to treat
0as the default value? We can still also treat what wasHPy_TPFLAGS_DEFAULTas another way of specifying it, but without exposing a constant for it (and maybe with a warning?).- alternatively we can fail for
0and suggest to useHPy_TPFLAGS_DEFAULT
- alternatively we can fail for
In general, it is a question if we should use flags in HPy. Maybe HPy should have bool (or int?) fields in HPyType_Spec for individual flags instead: that is safer, easier to use and migration from CPython API should be simple enough.