Skip to content

[GR-67172] Fixes for Cython, part 1 #515

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 13 commits into from
Jul 9, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
32 changes: 18 additions & 14 deletions .github/workflows/downstream-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,36 +12,40 @@ jobs:
name:
- pybind11
- virtualenv
# Currently fails
# - pyo3
- pyo3
os:
- id: ubuntu-latest
graalpy_platform: linux-amd64
platform: linux
arch: amd64
- id: macos-latest
graalpy_platform: darwin-aarch64
platform: darwin
arch: aarch64

runs-on: ${{ matrix.os.id }}

steps:
- name: Install CMake
if: ${{ matrix.name == 'pybind11' }}
uses: lukka/get-cmake@latest
with:
cmakeVersion: 3.30.8
ninjaVersion: 1.12.1
- name: Install CMake (Linux)
if: ${{ matrix.os.platform == 'linux' && matrix.name == 'pybind11' }}
run: |
sudo apt-get update
sudo apt-get install -y cmake

- name: Install CMake (Darwin)
if: ${{ matrix.os.platform == 'darwin' && matrix.name == 'pybind11' }}
run: brew install cmake

- name: Install Rust toolchain
if: ${{ matrix.name == 'pyo3' }}
uses: actions-rs/toolchain@v1
with:
toolchain: stable
run: |
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
echo "${HOME}/.cargo/bin" >> $GITHUB_PATH

- name: Checkout main repository
uses: actions/checkout@v4

- name: Get GraalPy EA build
run: |
tarball="$(curl -sfL https://raw.githubusercontent.com/graalvm/graal-languages-ea-builds/refs/heads/main/graalpy/versions/latest-native-${{ matrix.os.graalpy_platform }}.url)"
tarball="$(curl -sfL https://raw.githubusercontent.com/graalvm/graal-languages-ea-builds/refs/heads/main/graalpy/versions/latest-native-${{ matrix.os.platform }}-${{ matrix.os.arch}}.url)"
curl -sfL "$tarball" | tar xz

- name: Run downstream tests for ${{ matrix.name }}
Expand Down
1 change: 1 addition & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,3 +34,4 @@ repos:
language: python
types: [text]
files: '\.(java|py|md|c|h|sh)$'
exclude: '^graalpython/lib-python/.*'
65 changes: 62 additions & 3 deletions graalpython/com.oracle.graal.python.cext/CAPIFunctions.txt
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,9 @@ PyDescr_NewMember;PyObject*;PyTypeObject*|PyMemberDef*
PyDescr_NewMethod;PyObject*;PyTypeObject*|PyMethodDef*
PyDescr_NewWrapper;PyObject*;PyTypeObject*|struct wrapperbase*|void*
PyDictProxy_New;PyObject*;PyObject*
PyDict_AddWatcher;int;PyDict_WatchCallback
PyDict_Clear;void;PyObject*
PyDict_ClearWatcher;int;int
PyDict_Contains;int;PyObject*|PyObject*
PyDict_Copy;PyObject*;PyObject*
PyDict_DelItem;int;PyObject*|PyObject*
Expand All @@ -138,19 +140,23 @@ PyDict_SetDefault;PyObject*;PyObject*|PyObject*|PyObject*
PyDict_SetItem;int;PyObject*|PyObject*|PyObject*
PyDict_SetItemString;int;PyObject*|const char*|PyObject*
PyDict_Size;Py_ssize_t;PyObject*
PyDict_Unwatch;int;int|PyObject*
PyDict_Update;int;PyObject*|PyObject*
PyDict_Values;PyObject*;PyObject*
PyDict_Watch;int;int|PyObject*
PyErr_BadArgument;int;void
PyErr_BadInternalCall;void;void
PyErr_CheckSignals;int;void
PyErr_Clear;void;void
PyErr_Display;void;PyObject*|PyObject*|PyObject*
PyErr_DisplayException;void;PyObject*
PyErr_ExceptionMatches;int;PyObject*
PyErr_Fetch;void;PyObject**|PyObject**|PyObject**
PyErr_Format;PyObject*;PyObject*|const char*|...
PyErr_FormatV;PyObject*;PyObject*|const char*|va_list
PyErr_GetExcInfo;void;PyObject**|PyObject**|PyObject**
PyErr_GetHandledException;PyObject*;void
PyErr_GetRaisedException;PyObject*;void
PyErr_GivenExceptionMatches;int;PyObject*|PyObject*
PyErr_NewException;PyObject*;const char*|PyObject*|PyObject*
PyErr_NewExceptionWithDoc;PyObject*;const char*|const char*|PyObject*|PyObject*
Expand All @@ -176,6 +182,7 @@ PyErr_SetInterrupt;void;void
PyErr_SetInterruptEx;int;int
PyErr_SetNone;void;PyObject*
PyErr_SetObject;void;PyObject*|PyObject*
PyErr_SetRaisedException;void;PyObject*
PyErr_SetString;void;PyObject*|const char*
PyErr_SyntaxLocation;void;const char*|int
PyErr_SyntaxLocationEx;void;const char*|int|int
Expand Down Expand Up @@ -208,12 +215,16 @@ PyEval_ReleaseThread;void;PyThreadState*
PyEval_RestoreThread;void;PyThreadState*
PyEval_SaveThread;PyThreadState*;void
PyEval_SetProfile;void;Py_tracefunc|PyObject*
PyEval_SetProfileAllThreads;void;Py_tracefunc|PyObject*
PyEval_SetTrace;void;Py_tracefunc|PyObject*
PyEval_SetTraceAllThreads;void;Py_tracefunc|PyObject*
PyEval_ThreadsInitialized;int;void
PyExceptionClass_Name;const char*;PyObject*
PyException_GetArgs;PyObject*;PyObject*
PyException_GetCause;PyObject*;PyObject*
PyException_GetContext;PyObject*;PyObject*
PyException_GetTraceback;PyObject*;PyObject*
PyException_SetArgs;void;PyObject*|PyObject*
PyException_SetCause;void;PyObject*|PyObject*
PyException_SetContext;void;PyObject*|PyObject*
PyException_SetTraceback;int;PyObject*|PyObject*
Expand Down Expand Up @@ -247,9 +258,13 @@ PyFrame_GetGlobals;PyObject*;PyFrameObject*
PyFrame_GetLasti;int;PyFrameObject*
PyFrame_GetLineNumber;int;PyFrameObject*
PyFrame_GetLocals;PyObject*;PyFrameObject*
PyFrame_GetVar;PyObject*;PyFrameObject*|PyObject*
PyFrame_GetVarString;PyObject*;PyFrameObject*|const char*
PyFrame_LocalsToFast;void;PyFrameObject*|int
PyFrame_New;PyFrameObject*;PyThreadState*|PyCodeObject*|PyObject*|PyObject*
PyFrozenSet_New;PyObject*;PyObject*
PyFunction_AddWatcher;int;PyFunction_WatchCallback
PyFunction_ClearWatcher;int;int
PyFunction_GetAnnotations;PyObject*;PyObject*
PyFunction_GetClosure;PyObject*;PyObject*
PyFunction_GetCode;PyObject*;PyObject*
Expand All @@ -272,6 +287,7 @@ PyGILState_Check;int;void
PyGILState_Ensure;PyGILState_STATE;void
PyGILState_GetThisThreadState;PyThreadState*;void
PyGILState_Release;void;PyGILState_STATE
PyGen_GetCode;PyCodeObject*;PyGenObject*
PyGen_New;PyObject*;PyFrameObject*
PyGen_NewWithQualName;PyObject*;PyFrameObject*|PyObject*|PyObject*
PyHash_GetFuncDef;PyHash_FuncDef*;void
Expand Down Expand Up @@ -504,7 +520,9 @@ PyObject_GetAttr;PyObject*;PyObject*|PyObject*
PyObject_GetAttrString;PyObject*;PyObject*|const char*
PyObject_GetBuffer;int;PyObject*|Py_buffer*|int
PyObject_GetItem;PyObject*;PyObject*|PyObject*
PyObject_GetItemData;void*;PyObject*
PyObject_GetIter;PyObject*;PyObject*
PyObject_GetTypeData;void*;PyObject*|PyTypeObject*
PyObject_HasAttr;int;PyObject*|PyObject*
PyObject_HasAttrString;int;PyObject*|const char*
PyObject_Hash;Py_hash_t;PyObject*
Expand Down Expand Up @@ -588,7 +606,6 @@ PySet_Discard;int;PyObject*|PyObject*
PySet_New;PyObject*;PyObject*
PySet_Pop;PyObject*;PyObject*
PySet_Size;Py_ssize_t;PyObject*
PySignal_SetWakeupFd;int;int
PySlice_AdjustIndices;Py_ssize_t;Py_ssize_t|Py_ssize_t*|Py_ssize_t*|Py_ssize_t
PySlice_GetIndices;int;PyObject*|Py_ssize_t|Py_ssize_t*|Py_ssize_t*|Py_ssize_t*
PySlice_GetIndicesEx;int;PyObject*|Py_ssize_t|Py_ssize_t*|Py_ssize_t*|Py_ssize_t*|Py_ssize_t*
Expand Down Expand Up @@ -678,23 +695,30 @@ PyTuple_New;PyObject*;Py_ssize_t
PyTuple_Pack;PyObject*;Py_ssize_t|...
PyTuple_SetItem;int;PyObject*|Py_ssize_t|PyObject*
PyTuple_Size;Py_ssize_t;PyObject*
PyType_AddWatcher;int;PyType_WatchCallback
PyType_ClearCache;unsigned int;void
PyType_ClearWatcher;int;int
PyType_FromMetaclass;PyObject*;PyTypeObject*|PyObject*|PyType_Spec*|PyObject*
PyType_FromModuleAndSpec;PyObject*;PyObject*|PyType_Spec*|PyObject*
PyType_FromSpec;PyObject*;PyType_Spec*
PyType_FromSpecWithBases;PyObject*;PyType_Spec*|PyObject*
PyType_GenericAlloc;PyObject*;PyTypeObject*|Py_ssize_t
PyType_GenericNew;PyObject*;PyTypeObject*|PyObject*|PyObject*
PyType_GetDict;PyObject*;PyTypeObject*
PyType_GetFlags;unsigned long;PyTypeObject*
PyType_GetModule;PyObject*;PyTypeObject*
PyType_GetModuleByDef;PyObject*;PyTypeObject*|PyModuleDef*
PyType_GetModuleState;void*;PyTypeObject*
PyType_GetName;PyObject*;PyTypeObject*
PyType_GetQualName;PyObject*;PyTypeObject*
PyType_GetSlot;void*;PyTypeObject*|int
PyType_GetTypeDataSize;Py_ssize_t;PyTypeObject*
PyType_IsSubtype;int;PyTypeObject*|PyTypeObject*
PyType_Modified;void;PyTypeObject*
PyType_Ready;int;PyTypeObject*
PyType_SUPPORTS_WEAKREFS;int;PyTypeObject*
PyType_Unwatch;int;int|PyObject*
PyType_Watch;int;int|PyObject*
PyUnicodeDecodeError_Create;PyObject*;const char*|const char*|Py_ssize_t|Py_ssize_t|Py_ssize_t|const char*
PyUnicodeDecodeError_GetEncoding;PyObject*;PyObject*
PyUnicodeDecodeError_GetEnd;int;PyObject*|Py_ssize_t*
Expand Down Expand Up @@ -806,8 +830,22 @@ PyUnstable_Code_GetExtra;int;PyObject*|Py_ssize_t|void**
PyUnstable_Code_New;PyCodeObject*;int|int|int|int|int|PyObject*|PyObject*|PyObject*|PyObject*|PyObject*|PyObject*|PyObject*|PyObject*|PyObject*|int|PyObject*|PyObject*
PyUnstable_Code_NewWithPosOnlyArgs;PyCodeObject*;int|int|int|int|int|int|PyObject*|PyObject*|PyObject*|PyObject*|PyObject*|PyObject*|PyObject*|PyObject*|PyObject*|int|PyObject*|PyObject*
PyUnstable_Code_SetExtra;int;PyObject*|Py_ssize_t|void*
PyUnstable_Eval_RequestCodeExtraIndex;Py_ssize_t;freefunc
PyUnstable_Exc_PrepReraiseStar;PyObject*;PyObject*|PyObject*
PyUnstable_GC_VisitObjects;void;gcvisitobjects_t|void*
PyUnstable_InterpreterFrame_GetCode;PyObject*;struct _PyInterpreterFrame*
PyUnstable_InterpreterFrame_GetLasti;int;struct _PyInterpreterFrame*
PyUnstable_InterpreterFrame_GetLine;int;struct _PyInterpreterFrame*
PyUnstable_Long_CompactValue;Py_ssize_t;const PyLongObject*
PyUnstable_Long_IsCompact;int;const PyLongObject*
PyUnstable_Object_GC_NewWithExtraData;PyObject*;PyTypeObject*|size_t
PyUnstable_PerfMapState_Fini;void;void
PyUnstable_PerfMapState_Init;int;void
PyUnstable_Type_AssignVersionTag;int;PyTypeObject*
PyUnstable_WritePerfMapEntry;int;const void*|unsigned int|const char*
PyVectorcall_Call;PyObject*;PyObject*|PyObject*|PyObject*
PyVectorcall_Function;vectorcallfunc;PyObject*
PyVectorcall_NARGS;Py_ssize_t;size_t
PyWeakref_GetObject;PyObject*;PyObject*
PyWeakref_NewProxy;PyObject*;PyObject*|PyObject*
PyWeakref_NewRef;PyObject*;PyObject*|PyObject*
Expand Down Expand Up @@ -861,6 +899,7 @@ Py_LeaveRecursiveCall;void;void
Py_Main;int;int|wchar_t**
Py_MakePendingCalls;int;void
Py_NewInterpreter;PyThreadState*;void
Py_NewInterpreterFromConfig;PyStatus;PyThreadState**|const PyInterpreterConfig*
Py_NewRef;PyObject*;PyObject*
Py_PreInitialize;PyStatus;const PyPreConfig*
Py_PreInitializeFromArgs;PyStatus;const PyPreConfig*|Py_ssize_t|wchar_t**
Expand Down Expand Up @@ -942,27 +981,29 @@ _PyDict_SetItemId;int;PyObject*|_Py_Identifier*|PyObject*
_PyDict_SetItem_KnownHash;int;PyObject*|PyObject*|PyObject*|Py_hash_t
_PyDict_SizeOf;Py_ssize_t;PyDictObject*
_PyErr_BadInternalCall;void;const char*|int
_PyErr_ChainExceptions;void;PyObject*|PyObject*|PyObject*
_PyErr_ChainExceptions1;void;PyObject*
_PyErr_ChainExceptions;void;PyObject*|PyObject*|PyObject*
_PyErr_CheckSignals;int;void
_PyErr_FormatFromCause;PyObject*;PyObject*|const char*|...
_PyErr_GetExcInfo;void;PyThreadState*|PyObject**|PyObject**|PyObject**
_PyErr_GetHandledException;PyObject*;PyThreadState*
_PyErr_GetTopmostException;_PyErr_StackItem*;PyThreadState*
_PyErr_ProgramDecodedTextObject;PyObject*;PyObject*|int|const char*
_PyErr_SetFromPyStatus;PyObject*;PyStatus
_PyErr_SetHandledException;void;PyThreadState*|PyObject*
_PyErr_SetKeyError;void;PyObject*
_PyErr_WriteUnraisableMsg;void;const char*|PyObject*
_PyEval_EvalFrameDefault;PyObject*;PyThreadState*|struct _PyInterpreterFrame*|int
_PyEval_GetBuiltin;PyObject*;PyObject*
_PyEval_GetBuiltinId;PyObject*;_Py_Identifier*
_PyEval_GetSwitchInterval;unsigned long;void
_PyEval_MakePendingCalls;int;PyThreadState*
_PyEval_SetProfile;int;PyThreadState*|Py_tracefunc|PyObject*
_PyEval_SetSwitchInterval;void;unsigned long
_PyEval_SetTrace;int;PyThreadState*|Py_tracefunc|PyObject*
_PyEval_SliceIndex;int;PyObject*|Py_ssize_t*
_PyEval_SliceIndexNotNone;int;PyObject*|Py_ssize_t*
PyUnstable_Eval_RequestCodeExtraIndex;Py_ssize_t;freefunc
_PyException_AddNote;int;PyObject*|PyObject*
_PyFrame_IsEntryFrame;int;PyFrameObject*
_PyFunction_Vectorcall;PyObject*;PyObject*|PyObject*const*|size_t|PyObject*
_PyGILState_GetInterpreterStateUnsafe;PyInterpreterState*;void
Expand Down Expand Up @@ -1000,6 +1041,7 @@ _PyLong_Format;PyObject*;PyObject*|int
_PyLong_Frexp;double;PyLongObject*|Py_ssize_t*
_PyLong_FromByteArray;PyObject*;const unsigned char*|size_t|int|int
_PyLong_FromBytes;PyObject*;const char*|Py_ssize_t|int
_PyLong_FromDigits;PyLongObject*;int|Py_ssize_t|digit*
_PyLong_FromTime_t;PyObject*;time_t
_PyLong_GCD;PyObject*;PyObject*|PyObject*
_PyLong_Lshift;PyObject*;PyObject*|size_t
Expand Down Expand Up @@ -1034,6 +1076,7 @@ _PyObject_CallMethodId_SizeT;PyObject*;PyObject*|_Py_Identifier*|const char*|...
_PyObject_CallMethod_SizeT;PyObject*;PyObject*|const char*|const char*|...
_PyObject_CheckConsistency;int;PyObject*|int
_PyObject_CheckCrossInterpreterData;int;PyObject*
_PyObject_ClearManagedDict;void;PyObject*
_PyObject_DebugTypeStats;void;FILE*
_PyObject_Dump;void;PyObject*
_PyObject_FastCall;PyObject*;PyObject*|PyObject*const*|Py_ssize_t
Expand Down Expand Up @@ -1061,6 +1104,7 @@ _PyObject_NextNotImplemented;PyObject*;PyObject*
_PyObject_RealIsInstance;int;PyObject*|PyObject*
_PyObject_RealIsSubclass;int;PyObject*|PyObject*
_PyObject_SetAttrId;int;PyObject*|_Py_Identifier*|PyObject*
_PyObject_VisitManagedDict;int;PyObject*|visitproc|void*
_PyRun_AnyFileObject;int;FILE*|PyObject*|int|PyCompilerFlags*
_PyRun_InteractiveLoopObject;int;FILE*|PyObject*|PyCompilerFlags*
_PyRun_SimpleFileObject;int;FILE*|PyObject*|int|PyCompilerFlags*
Expand Down Expand Up @@ -1090,6 +1134,7 @@ _PyTime_AsTimespec_clamp;void;_PyTime_t|struct timespec*
_PyTime_AsTimeval;int;_PyTime_t|struct timeval*|_PyTime_round_t
_PyTime_AsTimevalTime_t;int;_PyTime_t|time_t*|int*|_PyTime_round_t
_PyTime_AsTimeval_clamp;void;_PyTime_t|struct timeval*|_PyTime_round_t
_PyTime_FromMicrosecondsClamp;_PyTime_t;_PyTime_t
_PyTime_FromMillisecondsObject;int;_PyTime_t*|PyObject*|_PyTime_round_t
_PyTime_FromNanoseconds;_PyTime_t;_PyTime_t
_PyTime_FromNanosecondsObject;int;_PyTime_t*|PyObject*
Expand All @@ -1109,7 +1154,18 @@ _PyTime_ObjectToTimespec;int;PyObject*|time_t*|long*|_PyTime_round_t
_PyTime_ObjectToTimeval;int;PyObject*|time_t*|long*|_PyTime_round_t
_PyTime_gmtime;int;time_t|struct tm*
_PyTime_localtime;int;time_t|struct tm*
_PyTraceMalloc_ClearTraces;void;void
_PyTraceMalloc_GetMemory;size_t;void
_PyTraceMalloc_GetObjectTraceback;PyObject*;PyObject*
_PyTraceMalloc_GetTraceback;PyObject*;unsigned int|uintptr_t
_PyTraceMalloc_GetTracebackLimit;int;void
_PyTraceMalloc_GetTracedMemory;PyObject*;void
_PyTraceMalloc_GetTraces;PyObject*;void
_PyTraceMalloc_Init;int;void
_PyTraceMalloc_IsTracing;int;void
_PyTraceMalloc_ResetPeak;void;void
_PyTraceMalloc_Start;int;int
_PyTraceMalloc_Stop;void;void
_PyTraceback_Add;void;const char*|const char*|int
_PyTrash_begin;int;PyThreadState*|PyObject*
_PyTrash_cond;int;PyObject*|destructor
Expand Down Expand Up @@ -1190,6 +1246,7 @@ _PyUnicode_WideCharString_Opt_Converter;int;PyObject*|void*
_PyUnicode_XStrip;PyObject*;PyObject*|int|PyObject*
_PyWeakref_ClearRef;void;PyWeakReference*
_PyWeakref_GetWeakrefCount;Py_ssize_t;PyWeakReference*
_Py_AtExit;int;PyInterpreterState*|atexit_datacallbackfunc|void*
_Py_BreakPoint;void;void
_Py_BuildValue_SizeT;PyObject*;const char*|...
_Py_CheckFunctionResult;PyObject*;PyThreadState*|PyObject*|PyObject*|const char*
Expand All @@ -1210,8 +1267,10 @@ _Py_IncRef;void;PyObject*
_Py_InitializeMain;PyStatus;void
_Py_IsCoreInitialized;int;void
_Py_IsFinalizing;int;void
_Py_IsInterpreterFinalizing;int;PyInterpreterState*
_Py_LegacyLocaleDetected;int;int
_Py_NewReference;void;PyObject*
_Py_NewReferenceNoTotal;void;PyObject*
_Py_RestoreSignals;void;void
_Py_SetLocaleFromEnv;char*;int
_Py_SetProgramFullPath;void;const wchar_t*
Expand Down
10 changes: 8 additions & 2 deletions graalpython/com.oracle.graal.python.cext/src/dictobject.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* Copyright (c) 2024, Oracle and/or its affiliates.
/* Copyright (c) 2024, 2025, Oracle and/or its affiliates.
* Copyright (C) 1996-2024 Python Software Foundation
*
* Licensed under the PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
Expand Down Expand Up @@ -5555,10 +5555,12 @@ _PyObject_IsInstanceDictEmpty(PyObject *obj)
}
return ((PyDictObject *)dict)->ma_used == 0;
}
#endif // GraalPy change

void
_PyObject_FreeInstanceAttributes(PyObject *self)
{
#if 0 // GraalPy change
PyTypeObject *tp = Py_TYPE(self);
assert(Py_TYPE(self)->tp_flags & Py_TPFLAGS_MANAGED_DICT);
PyDictOrValues dorv = *_PyObject_DictOrValuesPointer(self);
Expand All @@ -5571,11 +5573,13 @@ _PyObject_FreeInstanceAttributes(PyObject *self)
Py_XDECREF(values->values[i]);
}
free_values(values);
#endif // GraalPy change
}

int
_PyObject_VisitManagedDict(PyObject *obj, visitproc visit, void *arg)
{
#if 0 // GraalPy change
PyTypeObject *tp = Py_TYPE(obj);
if((tp->tp_flags & Py_TPFLAGS_MANAGED_DICT) == 0) {
return 0;
Expand All @@ -5593,12 +5597,14 @@ _PyObject_VisitManagedDict(PyObject *obj, visitproc visit, void *arg)
PyObject *dict = _PyDictOrValues_GetDict(dorv);
Py_VISIT(dict);
}
#endif // GraalPy change
return 0;
}

void
_PyObject_ClearManagedDict(PyObject *obj)
{
#if 0 // GraalPy change
PyTypeObject *tp = Py_TYPE(obj);
if((tp->tp_flags & Py_TPFLAGS_MANAGED_DICT) == 0) {
return;
Expand All @@ -5620,8 +5626,8 @@ _PyObject_ClearManagedDict(PyObject *obj)
Py_DECREF(dict);
}
}
}
#endif // GraalPy change
}

PyObject *
PyObject_GenericGetDict(PyObject *obj, void *context)
Expand Down
Loading