diff --git a/graalpython/com.oracle.graal.python.cext/src/dictobject.c b/graalpython/com.oracle.graal.python.cext/src/dictobject.c index 14faebd390..b5ce7696fa 100644 --- a/graalpython/com.oracle.graal.python.cext/src/dictobject.c +++ b/graalpython/com.oracle.graal.python.cext/src/dictobject.c @@ -1766,6 +1766,7 @@ _PyDict_GetItemIdWithError(PyObject *dp, _Py_Identifier *key) return PyDict_GetItemWithError(dp, kv); } +#if 0 // GraalPy change PyObject * _PyDict_GetItemStringWithError(PyObject *v, const char *key) { @@ -1779,7 +1780,6 @@ _PyDict_GetItemStringWithError(PyObject *v, const char *key) return rv; } -#if 0 // GraalPy change /* Fast version of global value lookup (LOAD_GLOBAL). * Lookup in globals, then builtins. * @@ -3895,6 +3895,7 @@ PyTypeObject PyDict_Type = { /* For backward compatibility with old dictionary interface */ +#if 0 // GraalPy change PyObject * PyDict_GetItemString(PyObject *v, const char *key) { @@ -3908,6 +3909,7 @@ PyDict_GetItemString(PyObject *v, const char *key) Py_DECREF(kv); return rv; } +#endif // GraalPy change int _PyDict_SetItemId(PyObject *v, _Py_Identifier *key, PyObject *item) @@ -3919,6 +3921,7 @@ _PyDict_SetItemId(PyObject *v, _Py_Identifier *key, PyObject *item) return PyDict_SetItem(v, kv, item); } +#if 0 // GraalPy change int PyDict_SetItemString(PyObject *v, const char *key, PyObject *item) { @@ -3934,7 +3937,6 @@ PyDict_SetItemString(PyObject *v, const char *key, PyObject *item) return err; } -#if 0 // GraalPy change int _PyDict_DelItemId(PyObject *v, _Py_Identifier *key) { @@ -3943,7 +3945,6 @@ _PyDict_DelItemId(PyObject *v, _Py_Identifier *key) return -1; return PyDict_DelItem(v, kv); } -#endif // GraalPy change int PyDict_DelItemString(PyObject *v, const char *key) @@ -3958,7 +3959,6 @@ PyDict_DelItemString(PyObject *v, const char *key) return err; } -#if 0 // GraalPy change /* Dictionary iterator types */ typedef struct { diff --git a/graalpython/com.oracle.graal.python.cext/src/import.c b/graalpython/com.oracle.graal.python.cext/src/import.c index 3be392f3c4..2375671326 100644 --- a/graalpython/com.oracle.graal.python.cext/src/import.c +++ b/graalpython/com.oracle.graal.python.cext/src/import.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2024, 2025, Oracle and/or its affiliates. +/* Copyright (c) 2024, 2026, Oracle and/or its affiliates. * Copyright (C) 1996-2024 Python Software Foundation * * Licensed under the PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 @@ -3330,6 +3330,7 @@ _PyImport_GetModuleAttr(PyObject *modname, PyObject *attrname) return result; } +#if 0 // GraalPy change PyObject * _PyImport_GetModuleAttrString(const char *modname, const char *attrname) { @@ -3349,7 +3350,6 @@ _PyImport_GetModuleAttrString(const char *modname, const char *attrname) } -#if 0 // GraalPy change /**************/ /* the module */ /**************/ diff --git a/graalpython/com.oracle.graal.python.cext/src/object.c b/graalpython/com.oracle.graal.python.cext/src/object.c index 230a49414e..6fb8a7e8ae 100644 --- a/graalpython/com.oracle.graal.python.cext/src/object.c +++ b/graalpython/com.oracle.graal.python.cext/src/object.c @@ -993,6 +993,10 @@ PyObject_GetAttrString(PyObject *v, const char *name) { PyObject *w, *res; + // GraalPy change: avoid temp name object if receiver is managed + if (points_to_py_handle_space(v)) { + return GraalPyPrivate_Object_GetAttrString(v, name); + } if (Py_TYPE(v)->tp_getattr != NULL) return (*Py_TYPE(v)->tp_getattr)(v, (char*)name); w = PyUnicode_FromString(name); @@ -1034,12 +1038,13 @@ PyObject_SetAttrString(PyObject *v, const char *name, PyObject *w) PyObject *s; int res; + // GraalPy change: avoid temp name object if receiver is managed + if (points_to_py_handle_space(v)) { + return GraalPyPrivate_Object_SetAttrString(v, name, w); + } if (Py_TYPE(v)->tp_setattr != NULL) return (*Py_TYPE(v)->tp_setattr)(v, (char*)name, w); - // GraalPy change - // TODO(fa): CPython interns strings; verify if that makes sense for us as well - // s = PyUnicode_InternFromString(name); - s = PyUnicode_FromString(name); + s = PyUnicode_InternFromString(name); if (s == NULL) return -1; res = PyObject_SetAttr(v, s, w); diff --git a/graalpython/com.oracle.graal.python.cext/src/unicodeobject.c b/graalpython/com.oracle.graal.python.cext/src/unicodeobject.c index 182c71bb4b..c3e973c8f3 100644 --- a/graalpython/com.oracle.graal.python.cext/src/unicodeobject.c +++ b/graalpython/com.oracle.graal.python.cext/src/unicodeobject.c @@ -14718,6 +14718,7 @@ PyUnicode_InternImmortal(PyObject **p) _PyUnicode_InternImmortal(interp, p); } +#if 0 // GraalPy change PyObject * PyUnicode_InternFromString(const char *cp) { @@ -14730,7 +14731,6 @@ PyUnicode_InternFromString(const char *cp) return s; } -#if 0 // GraalPy change void _PyUnicode_ClearInterned(PyInterpreterState *interp) { diff --git a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextDictBuiltins.java b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextDictBuiltins.java index 4cbba37438..f667ab0eb7 100644 --- a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextDictBuiltins.java +++ b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextDictBuiltins.java @@ -44,6 +44,7 @@ import static com.oracle.graal.python.builtins.PythonBuiltinClassType.SystemError; import static com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiCallPath.Direct; import static com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiCallPath.Ignored; +import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.ConstCharPtrAsTruffleString; import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.Int; import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PY_HASH_T_PTR; import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PY_SSIZE_T_PTR; @@ -54,7 +55,7 @@ import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PyObjectTransfer; import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.Py_hash_t; import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.Void; -import static com.oracle.graal.python.nodes.ErrorMessages.BAD_ARG_TO_INTERNAL_FUNC_WAS_S_P; +import static com.oracle.graal.python.nodes.ErrorMessages.BAD_ARG_TO_INTERNAL_FUNC; import static com.oracle.graal.python.nodes.ErrorMessages.HASH_MISMATCH; import static com.oracle.graal.python.nodes.ErrorMessages.OBJ_P_HAS_NO_ATTR_S; import static com.oracle.graal.python.nodes.SpecialMethodNames.T_KEYS; @@ -109,12 +110,12 @@ import com.oracle.graal.python.builtins.objects.ints.PInt; import com.oracle.graal.python.builtins.objects.list.PList; import com.oracle.graal.python.builtins.objects.object.PythonObject; -import com.oracle.graal.python.builtins.objects.str.StringBuiltins; import com.oracle.graal.python.lib.PyDictDelItem; import com.oracle.graal.python.lib.PyDictSetDefault; import com.oracle.graal.python.lib.PyObjectGetAttr; import com.oracle.graal.python.lib.PyObjectHashNode; import com.oracle.graal.python.lib.PyUnicodeCheckNode; +import com.oracle.graal.python.nodes.PGuards; import com.oracle.graal.python.nodes.PRaiseNode; import com.oracle.graal.python.nodes.builtins.ListNodes.ConstructListNode; import com.oracle.graal.python.nodes.call.CallNode; @@ -125,6 +126,7 @@ import com.oracle.graal.python.runtime.object.PFactory; import com.oracle.graal.python.runtime.sequence.storage.SequenceStorage; import com.oracle.graal.python.util.PythonUtils; +import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary; import com.oracle.truffle.api.TruffleLogger; import com.oracle.truffle.api.dsl.Bind; import com.oracle.truffle.api.dsl.Cached; @@ -133,6 +135,7 @@ import com.oracle.truffle.api.dsl.Fallback; import com.oracle.truffle.api.dsl.GenerateCached; import com.oracle.truffle.api.dsl.GenerateInline; +import com.oracle.truffle.api.dsl.ImportStatic; import com.oracle.truffle.api.dsl.Specialization; import com.oracle.truffle.api.frame.Frame; import com.oracle.truffle.api.frame.VirtualFrame; @@ -141,6 +144,7 @@ import com.oracle.truffle.api.profiles.InlinedBranchProfile; import com.oracle.truffle.api.profiles.InlinedConditionProfile; import com.oracle.truffle.api.profiles.InlinedLoopConditionProfile; +import com.oracle.truffle.api.strings.TruffleString; public final class PythonCextDictBuiltins { private static final TruffleLogger LOGGER = CApiContext.getLogger(PythonCextDictBuiltins.class); @@ -306,12 +310,14 @@ Object fallback(Object dict) { } } - @CApiBuiltin(ret = PyObjectBorrowed, args = {PyObject, PyObject}, call = Direct) - public abstract static class PyDict_GetItem extends CApiBinaryBuiltinNode { + @GenerateInline + @GenerateCached(false) + @ImportStatic(PGuards.class) + abstract static class DictGetAndPromoteItem extends Node { + abstract Object execute(Node inliningTarget, Object dict, Object key); @Specialization - static Object getItem(PDict dict, Object key, - @Bind Node inliningTarget, + static Object doPDict(Node inliningTarget, PDict dict, Object key, @Bind PythonContext context, @Cached HashingStorageGetItem getItem, @Cached EnsurePythonObjectNode ensureNode, @@ -336,22 +342,42 @@ static Object getItem(PDict dict, Object key, } @Specialization(guards = "!isDict(obj)") - static Object getItem(Object obj, @SuppressWarnings("unused") Object key, - @Bind Node inliningTarget, - @Cached StringBuiltins.StrNewNode strNode) { - return PRaiseNode.raiseStatic(inliningTarget, SystemError, BAD_ARG_TO_INTERNAL_FUNC_WAS_S_P, strNode.executeWith(null, obj), obj); + @TruffleBoundary + static Object doOther(Node inliningTarget, @SuppressWarnings("unused") Object obj, @SuppressWarnings("unused") Object key) { + return PRaiseNode.raiseStatic(inliningTarget, SystemError, BAD_ARG_TO_INTERNAL_FUNC); } + } + + @CApiBuiltin(ret = PyObjectBorrowed, args = {PyObject, ConstCharPtrAsTruffleString}, call = Direct) + public abstract static class PyDict_GetItemString extends CApiBinaryBuiltinNode { - protected boolean isDict(Object obj) { - return obj instanceof PDict; + @Specialization + static Object doGeneric(Object dict, Object key, + @Bind Node inliningTarget, + @Cached DictGetAndPromoteItem getAndPromoteItem) { + return getAndPromoteItem.execute(inliningTarget, dict, key); } } @CApiBuiltin(ret = PyObjectBorrowed, args = {PyObject, PyObject}, call = Direct) - abstract static class PyDict_GetItemWithError extends CApiBinaryBuiltinNode { + public abstract static class PyDict_GetItem extends CApiBinaryBuiltinNode { + @Specialization - static Object getItem(PDict dict, Object key, + static Object doGeneric(Object dict, Object key, @Bind Node inliningTarget, + @Cached DictGetAndPromoteItem getAndPromoteItem) { + return getAndPromoteItem.execute(inliningTarget, dict, key); + } + } + + @GenerateInline + @GenerateCached(false) + @ImportStatic(PGuards.class) + abstract static class DictGetAndPromoteItemWithError extends Node { + abstract Object execute(Node inliningTarget, Object dict, Object key); + + @Specialization + static Object doPDict(Node inliningTarget, PDict dict, Object key, @Bind PythonContext context, @Cached HashingStorageGetItem getItem, @Cached EnsurePythonObjectNode ensureNode, @@ -370,26 +396,70 @@ static Object getItem(PDict dict, Object key, return res; } - @Fallback - Object fallback(Object dict, @SuppressWarnings("unused") Object key) { - throw raiseFallback(dict, PythonBuiltinClassType.PDict); + @Specialization(guards = "!isDict(obj)") + @TruffleBoundary + static Object doOther(Node inliningTarget, @SuppressWarnings("unused") Object obj, @SuppressWarnings("unused") Object key) { + return PRaiseNode.raiseStatic(inliningTarget, SystemError, BAD_ARG_TO_INTERNAL_FUNC); + } + } + + @CApiBuiltin(ret = PyObjectBorrowed, args = {PyObject, PyObject}, call = Direct) + abstract static class PyDict_GetItemWithError extends CApiBinaryBuiltinNode { + @Specialization + static Object doGeneric(Object dict, Object key, + @Bind Node inliningTarget, + @Cached DictGetAndPromoteItemWithError getAndPromoteItem) { + return getAndPromoteItem.execute(inliningTarget, dict, key); + } + } + + @CApiBuiltin(ret = PyObjectBorrowed, args = {PyObject, ConstCharPtrAsTruffleString}, call = Direct) + abstract static class _PyDict_GetItemStringWithError extends CApiBinaryBuiltinNode { + @Specialization + static Object doGeneric(Object dict, Object key, + @Bind Node inliningTarget, + @Cached DictGetAndPromoteItemWithError getAndPromoteItem) { + return getAndPromoteItem.execute(inliningTarget, dict, key); + } + } + + @CApiBuiltin(ret = Int, args = {PyObject, ConstCharPtrAsTruffleString, PyObject}, call = Direct) + @ImportStatic(PGuards.class) + abstract static class PyDict_SetItemString extends CApiTernaryBuiltinNode { + @Specialization + static int doPDict(PDict dict, TruffleString key, Object value, + @Bind Node inliningTarget, + @Cached SetItemNode setItemNode) { + setItemNode.execute(null, inliningTarget, dict, key, value); + return 0; + } + + @Specialization(guards = "!isDict(dict)") + @TruffleBoundary + @SuppressWarnings("unused") + static int doOther(Object dict, Object key, Object value, + @Bind Node inliningTarget) { + throw PRaiseNode.raiseStatic(inliningTarget, SystemError, BAD_ARG_TO_INTERNAL_FUNC); } } @CApiBuiltin(ret = Int, args = {PyObject, PyObject, PyObject}, call = Direct) + @ImportStatic(PGuards.class) abstract static class PyDict_SetItem extends CApiTernaryBuiltinNode { @Specialization - static int setItem(PDict dict, Object key, Object value, + static int doPDict(PDict dict, Object key, Object value, @Bind Node inliningTarget, @Cached SetItemNode setItemNode) { setItemNode.execute(null, inliningTarget, dict, key, value); return 0; } + @Specialization(guards = "!isDict(dict)") + @TruffleBoundary @SuppressWarnings("unused") - @Fallback - int fallback(Object dict, Object key, Object value) { - throw raiseFallback(dict, PythonBuiltinClassType.PDict); + static int doOther(Object dict, Object key, Object value, + @Bind Node inliningTarget) { + throw PRaiseNode.raiseStatic(inliningTarget, SystemError, BAD_ARG_TO_INTERNAL_FUNC); } } @@ -442,6 +512,26 @@ public Object fallback(Object dict, @SuppressWarnings("unused") Object key, @Sup } } + @CApiBuiltin(ret = Int, args = {PyObject, ConstCharPtrAsTruffleString}, call = Direct) + @ImportStatic(PGuards.class) + abstract static class PyDict_DelItemString extends CApiBinaryBuiltinNode { + @Specialization + static int doPDict(PDict dict, TruffleString key, + @Bind Node inliningTarget, + @Cached PyDictDelItem delItemNode) { + delItemNode.execute(null, inliningTarget, dict, key); + return 0; + } + + @Specialization(guards = "!isDict(dict)") + @TruffleBoundary + @SuppressWarnings("unused") + static int doOther(Object dict, Object key, + @Bind Node inliningTarget) { + throw PRaiseNode.raiseStatic(inliningTarget, SystemError, BAD_ARG_TO_INTERNAL_FUNC); + } + } + @CApiBuiltin(ret = Int, args = {PyObject, PyObject}, call = Direct) abstract static class PyDict_DelItem extends CApiBinaryBuiltinNode { @Specialization diff --git a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextImportBuiltins.java b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextImportBuiltins.java index 0276b38d07..d42f0961bf 100644 --- a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextImportBuiltins.java +++ b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextImportBuiltins.java @@ -58,12 +58,14 @@ import static com.oracle.graal.python.util.PythonUtils.tsLiteral; import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApi5BuiltinNode; +import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiBinaryBuiltinNode; import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiBuiltin; import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiNullaryBuiltinNode; import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiUnaryBuiltinNode; import com.oracle.graal.python.builtins.objects.PNone; import com.oracle.graal.python.builtins.objects.dict.PDict; import com.oracle.graal.python.builtins.objects.function.PKeyword; +import com.oracle.graal.python.builtins.objects.module.PythonModule; import com.oracle.graal.python.lib.PyObjectCallMethodObjArgs; import com.oracle.graal.python.lib.PyObjectGetAttr; import com.oracle.graal.python.lib.PyObjectGetItem; @@ -158,4 +160,15 @@ private static void waitForInitialization(Object name, PythonContext context) { PyObjectCallMethodObjArgs.executeUncached(context.getImportlib(), T__LOCK_UNLOCK_MODULE, name); } } + + @CApiBuiltin(ret = PyObjectTransfer, args = {ConstCharPtrAsTruffleString, ConstCharPtrAsTruffleString}, call = Direct) + abstract static class _PyImport_GetModuleAttrString extends CApiBinaryBuiltinNode { + @Specialization + static Object doTruffleString(TruffleString modname, TruffleString attrname, + @Bind Node inliningTarget, + @Cached PyObjectGetAttr getAttr) { + PythonModule mod = AbstractImportNode.importModuleBoundary(modname); + return getAttr.execute(inliningTarget, mod, attrname); + } + } } diff --git a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextObjectBuiltins.java b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextObjectBuiltins.java index b7541a0397..c8e90d56ea 100644 --- a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextObjectBuiltins.java +++ b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextObjectBuiltins.java @@ -109,6 +109,7 @@ import com.oracle.graal.python.lib.PyObjectDelItem; import com.oracle.graal.python.lib.PyObjectDir; import com.oracle.graal.python.lib.PyObjectFormat; +import com.oracle.graal.python.lib.PyObjectGetAttr; import com.oracle.graal.python.lib.PyObjectGetAttrO; import com.oracle.graal.python.lib.PyObjectGetIter; import com.oracle.graal.python.lib.PyObjectHashNode; @@ -117,6 +118,7 @@ import com.oracle.graal.python.lib.PyObjectIsTrueNode; import com.oracle.graal.python.lib.PyObjectLookupAttrO; import com.oracle.graal.python.lib.PyObjectReprAsObjectNode; +import com.oracle.graal.python.lib.PyObjectSetAttr; import com.oracle.graal.python.lib.PyObjectSetItem; import com.oracle.graal.python.lib.PyObjectStrAsObjectNode; import com.oracle.graal.python.lib.PyTupleCheckNode; @@ -719,4 +721,25 @@ static int isTrue(Object a, Object b, return isNode.execute(a, b) ? 1 : 0; } } + + @CApiBuiltin(ret = PyObjectTransfer, args = {PyObject, ConstCharPtrAsTruffleString}, call = Ignored) + abstract static class GraalPyPrivate_Object_GetAttrString extends CApiBinaryBuiltinNode { + @Specialization + static Object doGeneric(Object v, TruffleString name, + @Bind Node inliningTarget, + @Cached PyObjectGetAttr getAttr) { + return getAttr.execute(inliningTarget, v, name); + } + } + + @CApiBuiltin(ret = Int, args = {PyObject, ConstCharPtrAsTruffleString, PyObject}, call = Ignored) + abstract static class GraalPyPrivate_Object_SetAttrString extends CApiTernaryBuiltinNode { + @Specialization + static int doGeneric(Object v, TruffleString name, Object w, + @Bind Node inliningTarget, + @Cached PyObjectSetAttr setAttr) { + setAttr.execute(inliningTarget, v, name, w); + return 0; + } + } } diff --git a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextUnicodeBuiltins.java b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextUnicodeBuiltins.java index ca04c555ad..480f287046 100644 --- a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextUnicodeBuiltins.java +++ b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextUnicodeBuiltins.java @@ -1426,4 +1426,18 @@ static Object doUnicode(PString stringObject, return PNone.NO_VALUE; } } + + // intentionally a node because of the indirectly used TruffleString.FromZeroTerminatedNativePointerNode + @CApiBuiltin(ret = PyObjectTransfer, args = {ConstCharPtrAsTruffleString}, call = Direct) + abstract static class PyUnicode_InternFromString extends CApiUnaryBuiltinNode { + + @Specialization + @TruffleBoundary + static PString doString(TruffleString value, + @Bind PythonContext context) { + TruffleString internedValue = PythonUtils.internString(value); + PString candidate = PFactory.createString(context.getLanguage(), internedValue); + return context.getCApiContext().getPstringInterningCache().intern(candidate, s -> s); + } + } } diff --git a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/CApiFunction.java b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/CApiFunction.java index c05ec2e0c4..c59299393c 100644 --- a/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/CApiFunction.java +++ b/graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/CApiFunction.java @@ -247,11 +247,8 @@ public final class CApiFunction { @CApiBuiltin(name = "PyDescr_IsData", ret = Int, args = {PyObject}, call = CImpl) @CApiBuiltin(name = "PyDescr_NewClassMethod", ret = PyObject, args = {PyTypeObject, PyMethodDef}, call = CImpl) @CApiBuiltin(name = "PyDescr_NewGetSet", ret = PyObject, args = {PyTypeObject, PyGetSetDef}, call = CImpl) - @CApiBuiltin(name = "PyDict_DelItemString", ret = Int, args = {PyObject, ConstCharPtrAsTruffleString}, call = CImpl) - @CApiBuiltin(name = "PyDict_GetItemString", ret = PyObject, args = {PyObject, ConstCharPtrAsTruffleString}, call = CImpl) @CApiBuiltin(name = "PyDict_Next", ret = Int, args = {PyObject, PY_SSIZE_T_PTR, PyObjectPtr, PyObjectPtr}, call = CImpl) @CApiBuiltin(name = "PyDict_Size", ret = Py_ssize_t, args = {PyObject}, call = CImpl) - @CApiBuiltin(name = "PyDict_SetItemString", ret = Int, args = {PyObject, ConstCharPtrAsTruffleString, PyObject}, call = CImpl) @CApiBuiltin(name = "PyErr_BadArgument", ret = Int, args = {}, call = CImpl) @CApiBuiltin(name = "PyErr_BadInternalCall", ret = Void, args = {}, call = CImpl) @CApiBuiltin(name = "PyErr_CheckSignals", ret = Int, args = {}, call = CImpl) @@ -560,7 +557,6 @@ public final class CApiFunction { @CApiBuiltin(name = "PyUnicode_FromKindAndData", ret = PyObject, args = {Int, CONST_VOID_PTR, Py_ssize_t}, call = CImpl) @CApiBuiltin(name = "PyUnicode_FromStringAndSize", ret = PyObject, args = {ConstCharPtrAsTruffleString, Py_ssize_t}, call = CImpl) @CApiBuiltin(name = "PyUnicode_GetLength", ret = Py_ssize_t, args = {PyObject}, call = CImpl) - @CApiBuiltin(name = "PyUnicode_InternFromString", ret = PyObject, args = {ConstCharPtrAsTruffleString}, call = CImpl) @CApiBuiltin(name = "PyUnicode_InternInPlace", ret = Void, args = {PyObjectPtr}, call = CImpl) @CApiBuiltin(name = "PyUnicode_New", ret = PyObject, args = {Py_ssize_t, PY_UCS4}, call = CImpl) @CApiBuiltin(name = "PyVectorcall_Call", ret = PyObject, args = {PyObject, PyObject, PyObject}, call = CImpl) @@ -607,7 +603,6 @@ public final class CApiFunction { @CApiBuiltin(name = "_PyBytes_Resize", ret = Int, args = {PyObjectPtr, Py_ssize_t}, call = CImpl) @CApiBuiltin(name = "_PyDict_ContainsId", ret = Int, args = {PyObject, _PY_IDENTIFIER_PTR}, call = CImpl) @CApiBuiltin(name = "_PyDict_GetItemIdWithError", ret = PyObject, args = {PyObject, _PY_IDENTIFIER_PTR}, call = CImpl) - @CApiBuiltin(name = "_PyDict_GetItemStringWithError", ret = PyObject, args = {PyObject, ConstCharPtrAsTruffleString}, call = CImpl) @CApiBuiltin(name = "_PyDict_GetItem_KnownHash", ret = PyObject, args = {PyObject, PyObject, Py_hash_t}, call = CImpl) @CApiBuiltin(name = "_PyDict_MaybeUntrack", ret = Void, args = {PyObject}, call = CImpl) @CApiBuiltin(name = "_PyDict_NewPresized", ret = PyObject, args = {Py_ssize_t}, call = CImpl) @@ -1080,7 +1075,6 @@ public final class CApiFunction { @CApiBuiltin(name = "_PyImport_FixupBuiltin", ret = Int, args = {PyObject, ConstCharPtrAsTruffleString, PyObject}, call = NotImplemented) @CApiBuiltin(name = "_PyImport_FixupExtensionObject", ret = Int, args = {PyObject, PyObject, PyObject, PyObject}, call = NotImplemented) @CApiBuiltin(name = "_PyImport_GetModuleAttr", ret = PyObject, args = {PyObject, PyObject}, call = CImpl) - @CApiBuiltin(name = "_PyImport_GetModuleAttrString", ret = PyObject, args = {ConstCharPtr, ConstCharPtr}, call = CImpl) @CApiBuiltin(name = "_PyImport_GetModuleId", ret = PyObject, args = {_PY_IDENTIFIER_PTR}, call = CImpl) @CApiBuiltin(name = "_PyImport_IsInitialized", ret = Int, args = {PyInterpreterState}, call = NotImplemented) @CApiBuiltin(name = "_PyImport_SetModuleString", ret = Int, args = {ConstCharPtrAsTruffleString, PyObject}, call = NotImplemented)