Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
cfbf5cf
Use clean --aggressive in bisect benchmark
msimacek Aug 6, 2026
ca2a161
Make it possible to bisect pyperformance
msimacek Aug 6, 2026
1d01825
Make the --force arg in bisect script repush new branch
msimacek Aug 6, 2026
9c9e77e
Fetch the right JDK for coverage jobs
msimacek Aug 6, 2026
0336595
Fix keeping the right graal in bisect script
msimacek Aug 6, 2026
b988468
Remove pyo3 test workaround
msimacek Aug 7, 2026
dde4987
Implement marshal allow_code parameter
msimacek Aug 5, 2026
9c41d58
Add _Py_IsFinalizing compatiblity alias for pybind11
msimacek Aug 7, 2026
3de0664
Add sysconfig INSTSONAME var
msimacek Aug 7, 2026
42f5f8d
Update librt patch
msimacek Aug 10, 2026
c98d91e
Fix unused variable warning
msimacek Aug 10, 2026
c165ec3
Update torch patch
msimacek Aug 10, 2026
acf0010
Fix get_pypi_source.py shebang
msimacek Aug 10, 2026
5028b25
Fix cell access in frame proxy
msimacek Aug 10, 2026
ab2af7f
Make PCell inherit from PythonBuiltinObject
msimacek Aug 10, 2026
f18faa4
Fix sending NoDefault to native
msimacek Aug 10, 2026
d9b82be
Implement PyFunction C getters
msimacek Aug 10, 2026
e06b8a1
Implement PyCell C accessors
msimacek Aug 11, 2026
ee40d9c
Implement missing PyCode C accessors
msimacek Aug 11, 2026
bee19f2
Add accessor indirection for PyMemoryView
msimacek Aug 11, 2026
e337e60
Fix PyDict_GET_SIZE
msimacek Aug 11, 2026
210c3c3
Add missing C type registrations
msimacek Aug 11, 2026
14eaf90
Add more constants to opcode and dis
msimacek Aug 11, 2026
05c63ce
Unpin cloudpickle patch
msimacek Aug 11, 2026
a52fcd2
Add new Cython-specific APIs to support their array module
msimacek Aug 11, 2026
83b626d
Add new ABI baseline
msimacek Aug 12, 2026
5d66b55
Fix test issues on windows
msimacek Aug 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .agents/skills/rota-bench-regression-analysis/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ git diff --stat GOOD..BAD
- In the attributed section, use this header format: `abcd1234efgh | [email protected] | Full subject`
- Unattributed changes that look plausible go to "to bisect", flaky ones go to "to watch"
- In the "to bisect" section, add an invocation (don't execute yet) of `scripts/bisect_benchmark_regression.py` that can bisect it (use unabbreviated commits in this case)
- The positional benchmark name identifies the result to compare. If the harness runs that result through a differently named parent or group, pass the runnable name with `--benchmark-selector`. For example, use result `pyperformance-suite.scimark_fft` with `--benchmark-selector scimark`, because pyperformance runs the `scimark` group and reports `scimark_fft` separately.
- In the "to watch" section, say whether the item looks flaky, or likely the same cause as another attributed item.
- Do not abbreviate commit subjects.
- Keep author emails.
Expand Down
14,963 changes: 14,963 additions & 0 deletions abi/abi-graalpy253.xml

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions ci/python-gate.libsonnet
Original file line number Diff line number Diff line change
Expand Up @@ -517,6 +517,8 @@
$.overlay_imports.BUILDBOT_COMMIT_SERVICE + '?repoName=graal&target=weekly&before-ts=${MAIN_COMMIT_TS}']],
["git", "clone", $.overlay_imports.GRAAL_ENTERPRISE_GIT, "../graal-enterprise"],
['git', '-C', '../graal', 'checkout', '${GRAAL_COMMIT}'],
['mx', '-p', '../graal', 'fetch-jdk', '-A', 'labsjdk-ce-latest'],
['set-export', 'JAVA_HOME', ['mx', '-p', '../graal', 'get-jdk-path', 'labsjdk-ce-latest']],
// NOTE: this will checkout older graalpy. We need to live with that to ensure consistency with graal
['mx', '-p', '../graal/vm', '--dynamicimports', 'graalpython', 'sforceimports'],
// NOTE: jvm-only, so not need to handle substratevm-enterprise-gcs
Expand Down
1 change: 1 addition & 0 deletions graalpython/com.oracle.graal.python.cext/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,7 @@ set(SRC_FILES ${CAPI_SRC}/codecs.c ${CAPI_SRC}/compile.c ${CAPI_SRC}/thread.c
${CAPI_SRC}/genobject.c ${CAPI_SRC}/methodobject.c ${CAPI_SRC}/boolobject.c ${CAPI_SRC}/pylifecycle.c
${CAPI_SRC}/errors.c ${CAPI_SRC}/signals.c ${CAPI_SRC}/datetime.c ${CAPI_SRC}/call.c
${CAPI_SRC}/getargs.c ${CAPI_SRC}/tracemalloc.c ${CAPI_SRC}/initconfig.c ${CAPI_SRC}/graalpy_stacktrace.c
${CAPI_SRC}/graalpyarray.c
${CAPI_SRC}/lock.c ${CAPI_SRC}/parking_lot.c
)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* Copyright (c) 2018, 2024, Oracle and/or its affiliates.
/* Copyright (c) 2018, 2026, Oracle and/or its affiliates.
* Copyright (C) 1996-2020 Python Software Foundation
*
* Licensed under the PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
Expand Down Expand Up @@ -26,19 +26,19 @@ PyAPI_FUNC(PyObject *) PyCell_New(PyObject *);
PyAPI_FUNC(PyObject *) PyCell_Get(PyObject *);
PyAPI_FUNC(int) PyCell_Set(PyObject *, PyObject *);

/* GraalPy public API functions replacing direct PyCellObject field access. */
PyAPI_FUNC(PyObject *) GraalPyCell_GET(PyObject *op);
PyAPI_FUNC(void) GraalPyCell_SET(PyObject *op, PyObject *value);

static inline PyObject* PyCell_GET(PyObject *op) {
PyCellObject *cell;
assert(PyCell_Check(op));
cell = _Py_CAST(PyCellObject*, op);
return cell->ob_ref;
return GraalPyCell_GET(op);
}
#define PyCell_GET(op) PyCell_GET(_PyObject_CAST(op))

static inline void PyCell_SET(PyObject *op, PyObject *value) {
PyCellObject *cell;
assert(PyCell_Check(op));
cell = _Py_CAST(PyCellObject*, op);
cell->ob_ref = value;
GraalPyCell_SET(op, value);
}
#define PyCell_SET(op, value) PyCell_SET(_PyObject_CAST(op), (value))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,14 +186,18 @@ PyAPI_DATA(PyTypeObject) PyCode_Type;

#define PyCode_Check(op) Py_IS_TYPE((op), &PyCode_Type)

/* GraalPy public API functions replacing direct PyCodeObject field access. */
PyAPI_FUNC(Py_ssize_t) GraalPyCode_GetNumFree(PyCodeObject *op);
PyAPI_FUNC(int) GraalPyCode_GetFirstFree(PyCodeObject *op);

static inline Py_ssize_t PyCode_GetNumFree(PyCodeObject *op) {
assert(PyCode_Check(op));
return op->co_nfreevars;
return GraalPyCode_GetNumFree(op);
}

static inline int PyUnstable_Code_GetFirstFree(PyCodeObject *op) {
assert(PyCode_Check(op));
return op->co_nlocalsplus - op->co_nfreevars;
return GraalPyCode_GetFirstFree(op);
}

Py_DEPRECATED(3.13) static inline int PyCode_GetFirstFree(PyCodeObject *op) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,18 +56,15 @@ PyAPI_FUNC(PyObject *) PyDict_SetDefault(
// 1 if `key` was present and `default_value` was not inserted
PyAPI_FUNC(int) PyDict_SetDefaultRef(PyObject *mp, PyObject *key, PyObject *default_value, PyObject **result);

/* GraalPy public API function replacing direct PyDictObject field access. */
PyAPI_FUNC(Py_ssize_t) GraalPyDict_GET_SIZE(PyObject *op);

/* Get the number of items of a dictionary. */
static inline Py_ssize_t PyDict_GET_SIZE(PyObject *op) {
PyDictObject *mp;
assert(PyDict_Check(op));
mp = _Py_CAST(PyDictObject*, op);
#ifdef Py_GIL_DISABLED
return _Py_atomic_load_ssize_relaxed(&mp->ma_used);
#else
return mp->ma_used;
#endif
return GraalPyDict_GET_SIZE(op);
}
#define PyDict_GET_SIZE(mp) (assert(PyDict_Check(mp)),PyObject_Size((PyObject*) mp))
#define PyDict_GET_SIZE(op) PyDict_GET_SIZE(_PyObject_CAST(op))

PyAPI_FUNC(int) PyDict_ContainsString(PyObject *mp, const char *key);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,40 +89,50 @@ PyAPI_FUNC(int) PyFunction_SetAnnotations(PyObject *, PyObject *);
#define _PyFunction_CAST(func) \
(assert(PyFunction_Check(func)), _Py_CAST(PyFunctionObject*, func))

/* GraalPy public API functions replacing direct PyFunctionObject field access.
Return borrowed references. */
PyAPI_FUNC(PyObject *) GraalPyFunction_GET_CODE(PyObject *func);
PyAPI_FUNC(PyObject *) GraalPyFunction_GET_GLOBALS(PyObject *func);
PyAPI_FUNC(PyObject *) GraalPyFunction_GET_MODULE(PyObject *func);
PyAPI_FUNC(PyObject *) GraalPyFunction_GET_DEFAULTS(PyObject *func);
PyAPI_FUNC(PyObject *) GraalPyFunction_GET_KW_DEFAULTS(PyObject *func);
PyAPI_FUNC(PyObject *) GraalPyFunction_GET_CLOSURE(PyObject *func);
PyAPI_FUNC(PyObject *) GraalPyFunction_GET_ANNOTATIONS(PyObject *func);

/* Static inline functions for direct access to these values.
Type checks are *not* done, so use with care. */
static inline PyObject* PyFunction_GET_CODE(PyObject *func) {
return _PyFunction_CAST(func)->func_code;
return GraalPyFunction_GET_CODE(func);
}
#define PyFunction_GET_CODE(func) PyFunction_GET_CODE(_PyObject_CAST(func))

static inline PyObject* PyFunction_GET_GLOBALS(PyObject *func) {
return _PyFunction_CAST(func)->func_globals;
return GraalPyFunction_GET_GLOBALS(func);
}
#define PyFunction_GET_GLOBALS(func) PyFunction_GET_GLOBALS(_PyObject_CAST(func))

static inline PyObject* PyFunction_GET_MODULE(PyObject *func) {
return _PyFunction_CAST(func)->func_module;
return GraalPyFunction_GET_MODULE(func);
}
#define PyFunction_GET_MODULE(func) PyFunction_GET_MODULE(_PyObject_CAST(func))

static inline PyObject* PyFunction_GET_DEFAULTS(PyObject *func) {
return _PyFunction_CAST(func)->func_defaults;
return GraalPyFunction_GET_DEFAULTS(func);
}
#define PyFunction_GET_DEFAULTS(func) PyFunction_GET_DEFAULTS(_PyObject_CAST(func))

static inline PyObject* PyFunction_GET_KW_DEFAULTS(PyObject *func) {
return _PyFunction_CAST(func)->func_kwdefaults;
return GraalPyFunction_GET_KW_DEFAULTS(func);
}
#define PyFunction_GET_KW_DEFAULTS(func) PyFunction_GET_KW_DEFAULTS(_PyObject_CAST(func))

static inline PyObject* PyFunction_GET_CLOSURE(PyObject *func) {
return _PyFunction_CAST(func)->func_closure;
return GraalPyFunction_GET_CLOSURE(func);
}
#define PyFunction_GET_CLOSURE(func) PyFunction_GET_CLOSURE(_PyObject_CAST(func))

static inline PyObject* PyFunction_GET_ANNOTATIONS(PyObject *func) {
return _PyFunction_CAST(func)->func_annotations;
return GraalPyFunction_GET_ANNOTATIONS(func);
}
#define PyFunction_GET_ANNOTATIONS(func) PyFunction_GET_ANNOTATIONS(_PyObject_CAST(func))

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,18 @@ typedef struct {

#define _PyMemoryView_CAST(op) _Py_CAST(PyMemoryViewObject*, op)

/* GraalPy public API functions replacing direct PyMemoryViewObject field access. */
PyAPI_FUNC(Py_buffer *) GraalPyMemoryView_GET_BUFFER(PyObject *op);
PyAPI_FUNC(PyObject *) GraalPyMemoryView_GET_BASE(PyObject *op);

/* Get a pointer to the memoryview's private copy of the exporter's buffer. */
static inline Py_buffer* PyMemoryView_GET_BUFFER(PyObject *op) {
return (&_PyMemoryView_CAST(op)->view);
return GraalPyMemoryView_GET_BUFFER(op);
}
#define PyMemoryView_GET_BUFFER(op) PyMemoryView_GET_BUFFER(_PyObject_CAST(op))

/* Get a pointer to the exporting object (this may be NULL!). */
static inline PyObject* PyMemoryView_GET_BASE(PyObject *op) {
return _PyMemoryView_CAST(op)->view.obj;
return GraalPyMemoryView_GET_BASE(op);
}
#define PyMemoryView_GET_BASE(op) PyMemoryView_GET_BASE(_PyObject_CAST(op))
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,8 @@ PyAPI_FUNC(void) GraalPyTuple_SET_ITEM(PyObject*, Py_ssize_t, PyObject*);
/* Function *only* to be used to fill in brand new tuples */
static inline void
PyTuple_SET_ITEM(PyObject *op, Py_ssize_t index, PyObject *value) {
PyTupleObject *tuple = _PyTuple_CAST(op);
assert(0 <= index);
assert(index < Py_SIZE(tuple));
assert(index < Py_SIZE(_PyTuple_CAST(op)));
GraalPyTuple_SET_ITEM(op, index, value);
}
#define PyTuple_SET_ITEM(op, index, value) \
Expand Down
11 changes: 11 additions & 0 deletions graalpython/com.oracle.graal.python.cext/include/listobject.h
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,17 @@ PyAPI_FUNC(int) GraalPyArray_Resize(PyObject* array, Py_ssize_t new_size);
*/
PyAPI_FUNC(char*) GraalPyArray_Data(PyObject* array);

typedef struct GraalPyArray_Descriptor {
char typecode;
int itemsize;
} GraalPyArray_Descriptor;

/*
* GraalPy public API used by Cython's array module. Available since GraalPy 25.3.4.
*/
PyAPI_FUNC(GraalPyArray_Descriptor*) GraalPyArray_GetDescriptor(PyObject* array);
PyAPI_FUNC(PyObject*) GraalPyArray_New(PyObject* type, Py_ssize_t size, GraalPyArray_Descriptor* descriptor);

#ifndef Py_LIMITED_API
# define Py_CPYTHON_LISTOBJECT_H
# include "cpython/listobject.h"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,9 @@ PyAPI_DATA(const unsigned long) Py_Version;
PyAPI_FUNC(int) Py_IsFinalizing(void);
#endif

// GraalPy change: compatibility alias for pybind11
PyAPI_FUNC(int) _Py_IsFinalizing(void);

#ifndef Py_LIMITED_API
# define Py_CPYTHON_PYLIFECYCLE_H
# include "cpython/pylifecycle.h"
Expand Down
59 changes: 30 additions & 29 deletions graalpython/com.oracle.graal.python.cext/src/capi.h
Original file line number Diff line number Diff line change
Expand Up @@ -323,18 +323,36 @@ PY_TRUFFLE_TYPE_LOCAL(Arraytype, "array", &
PY_TRUFFLE_TYPE_LOCAL(mmap_object_type, "mmap.mmap", &PyType_Type, 0) \
PY_TRUFFLE_TYPE(PyArrayIter_Type, "arrayiterator", &PyType_Type, sizeof(arrayiterobject)) \
PY_TRUFFLE_TYPE(PyAsyncGen_Type, "async_generator", &PyType_Type, sizeof(PyAsyncGenObject)) \
PY_TRUFFLE_TYPE(_PyAsyncGenASend_Type, "async_generator_asend", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(_PyAsyncGenAThrow_Type, "async_generator_athrow", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(_PyAsyncGenWrappedValue_Type, "async_generator_wrapped_value", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE_WITH_ITEMSIZE(PyLong_Type, "int", &PyType_Type, offsetof(PyLongObject, long_value.ob_digit), sizeof(PyObject *)) \
PY_TRUFFLE_TYPE(PyBool_Type, "bool", &PyType_Type, sizeof(struct _longobject)) \
PY_TRUFFLE_TYPE(PyByteArray_Type, "bytearray", &PyType_Type, sizeof(PyByteArrayObject)) \
PY_TRUFFLE_TYPE_WITH_ITEMSIZE(PyBytes_Type, "bytes", &PyType_Type, PyBytesObject_SIZE, sizeof(char)) \
PY_TRUFFLE_TYPE_WITH_ALLOC(PyCapsule_Type, "PyCapsule", &PyType_Type, sizeof(PyCapsule), PyType_GenericAlloc, capsule_dealloc, PyObject_Del) \
PY_TRUFFLE_TYPE(PyCallIter_Type, "callable_iterator", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(PyCell_Type, "cell", &PyType_Type, sizeof(PyCellObject)) \
PY_TRUFFLE_TYPE(PyCMethod_Type, "builtin_method", &PyCFunction_Type, sizeof(PyCFunctionObject)) \
PY_TRUFFLE_TYPE(PyClassMethod_Type, "classmethod", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(PyClassMethodDescr_Type, "classmethod_descriptor", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(PyCode_Type, "code", &PyType_Type, sizeof(PyTypeObject)) \
PY_TRUFFLE_TYPE(PyCmpWrapper_Type, "KeyWrapper", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(PyComplex_Type, "complex", &PyType_Type, sizeof(PyComplexObject)) \
PY_TRUFFLE_TYPE(PyContext_Type, "Context", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(PyContextToken_Type, "Token", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(PyContextVar_Type, "ContextVar", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(_PyCoroWrapper_Type, "coroutine_wrapper", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE_EXTERN(PyDict_Type, "dict" ) \
PY_TRUFFLE_TYPE(PyDictIterItem_Type, "dict_itemiterator", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(PyDictIterKey_Type, "dict_keyiterator", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(PyDictIterValue_Type, "dict_valueiterator", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(PyDictItems_Type, "dict_items", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(PyDictKeys_Type, "dict_keys", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(PyDictProxy_Type, "mappingproxy", &PyType_Type, sizeof(mappingproxyobject)) \
PY_TRUFFLE_TYPE(PyDictValues_Type, "dict_values", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(PyEllipsis_Type, "ellipsis", &PyType_Type, 0) \
PY_TRUFFLE_TYPE(PyFilter_Type, "filter", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(PyFloat_Type, "float", &PyType_Type, sizeof(PyFloatObject)) \
PY_TRUFFLE_TYPE_WITH_ITEMSIZE(PyFrame_Type, "frame", &PyType_Type, sizeof(PyTypeObject), sizeof(PyObject *)) \
PY_TRUFFLE_TYPE(PyFrozenSet_Type, "frozenset", &PyType_Type, sizeof(PySetObject)) \
Expand All @@ -347,9 +365,15 @@ PY_TRUFFLE_TYPE(PyMap_Type, "map", &
PY_TRUFFLE_TYPE(PyMemberDescr_Type, "member_descriptor", &PyType_Type, sizeof(PyMemberDescrObject)) \
PY_TRUFFLE_TYPE_WITH_ITEMSIZE(PyMemoryView_Type, "memoryview", &PyType_Type, offsetof(PyMemoryViewObject, ob_array), sizeof(Py_ssize_t)) \
PY_TRUFFLE_TYPE(PyMethod_Type, "method", &PyType_Type, sizeof(PyMethodObject)) \
PY_TRUFFLE_TYPE(_PyMethodWrapper_Type, "method-wrapper", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(PyMethodDescr_Type, "method_descriptor", &PyType_Type, sizeof(PyMethodDescrObject)) \
PY_TRUFFLE_TYPE_EXTERN(PyModule_Type, "module" ) \
PY_TRUFFLE_TYPE(PyModuleDef_Type, "moduledef", &PyType_Type, sizeof(struct PyModuleDef)) \
PY_TRUFFLE_TYPE(PyODict_Type, "OrderedDict", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(PyODictItems_Type, "odict_items", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(PyODictIter_Type, "odict_iterator", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(PyODictKeys_Type, "odict_keys", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(PyODictValues_Type, "odict_values", &PyType_Type, sizeof(PyObject)) \
PY_TRUFFLE_TYPE(PyProperty_Type, "property", &PyType_Type, sizeof(propertyobject)) \
PY_TRUFFLE_TYPE(PyRange_Type, "range", &PyType_Type, sizeof(rangeobject)) \
PY_TRUFFLE_TYPE(PySet_Type, "set", &PyType_Type, sizeof(PySetObject)) \
Expand All @@ -370,11 +394,8 @@ PY_TRUFFLE_TYPE(PyCoro_Type, "coroutine", &
PY_TRUFFLE_TYPE(Py_GenericAliasType, "types.GenericAlias", &PyType_Type, sizeof(PyObject)) \
/* PyPickleBufferObject (PyObject_HEAD + Py_buffer + PyObject*) is defined within Objects/picklebufobject.c, so its not exposed. */ \
PY_TRUFFLE_TYPE(PyPickleBuffer_Type, "_pickle.PickleBuffer", &PyType_Type, sizeof(PyPickleBufferObject)) \
/* GraalPy has no corresponding Python object types for these CPython implementation details. */ \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(_PyAIterWrapper_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(_PyAsyncGenASend_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(_PyAsyncGenAThrow_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(_PyAsyncGenWrappedValue_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(_PyCoroWrapper_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(_PyHamt_ArrayNode_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(_PyHamt_BitmapNode_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(_PyHamt_CollisionNode_Type) \
Expand All @@ -384,41 +405,21 @@ PY_TRUFFLE_TYPE_UNIMPLEMENTED(_PyHamtKeys_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(_PyHamtValues_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(_PyInterpreterID_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(_PyManagedBuffer_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(_PyMethodWrapper_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyNullImporter_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PySortWrapper_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyStdPrinter_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PySTEntry_Type) \
/* GraalPy represents these using shared iterator types rather than distinct Python types. */ \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyByteArrayIter_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyBytesIter_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyCallIter_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyClassMethod_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyClassMethodDescr_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyCmpWrapper_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyContext_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyContextToken_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyContextVar_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyDictItems_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyDictIterItem_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyDictIterKey_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyDictIterValue_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyDictKeys_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyDictRevIterItem_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyDictRevIterKey_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyDictRevIterValue_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyDictValues_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyFilter_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyListIter_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyListRevIter_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyLongRangeIter_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyNullImporter_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyODict_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyODictItems_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyODictIter_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyODictKeys_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyODictValues_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyRangeIter_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PySetIter_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PySortWrapper_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyStaticMethod_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyStdPrinter_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PySTEntry_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyTupleIter_Type) \
PY_TRUFFLE_TYPE_UNIMPLEMENTED(PyUnicodeIter_Type) \

Expand Down
Loading
Loading