Skip to content

Commit b1407bf

Browse files
committed
implement PyTuple_SET_ITEM and don't decref existing elements in tuple_subtype_new
1 parent 88f3018 commit b1407bf

File tree

12 files changed

+199
-27
lines changed

12 files changed

+199
-27
lines changed

graalpython/com.oracle.graal.python.cext/include/cpython/tupleobject.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright (c) 2020, 2022, Oracle and/or its affiliates.
1+
/* Copyright (c) 2020, 2023, Oracle and/or its affiliates.
22
* Copyright (C) 1996-2020 Python Software Foundation
33
*
44
* Licensed under the PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
@@ -29,7 +29,7 @@ PyAPI_FUNC(void) _PyTuple_MaybeUntrack(PyObject *);
2929
#define PyTuple_GET_ITEM(op, i) PyTuple_GetItem(_PyObject_CAST(op), (i))
3030

3131
/* Macro, *only* to be used to fill in brand new tuples */
32-
// LS: Py_SetItem behaves differently wrt. the existing element...
33-
#define PyTuple_SET_ITEM(op, i, v) PyTuple_SetItem(_PyObject_CAST(op), (i), (v))
32+
PyAPI_FUNC(int) _PyTuple_SET_ITEM(PyObject *, Py_ssize_t, PyObject *);
33+
#define PyTuple_SET_ITEM(op, i, v) _PyTuple_SET_ITEM(_PyObject_CAST(op), (i), (v))
3434

3535
PyAPI_FUNC(void) _PyTuple_DebugMallocStats(FILE *out);

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -904,6 +904,10 @@ void PyTruffle_SetStorageItem(PyObject** ptr, int32_t index, PyObject* newitem)
904904
Py_XSETREF(ptr[index], newitem);
905905
}
906906

907+
void PyTruffle_InitializeStorageItem(PyObject** ptr, int32_t index, PyObject* newitem) {
908+
ptr[index] = newitem;
909+
}
910+
907911
PyAPI_FUNC(Py_ssize_t) PyTruffle_Object_Size(PyObject *op) {
908912
return ((PyVarObject*)op)->ob_size;
909913
}
@@ -2178,6 +2182,10 @@ PyAPI_FUNC(PyObject*) _PyTruffleObject_Call1(PyObject* a, PyObject* b, PyObject*
21782182
PyAPI_FUNC(PyObject*) _PyTruffleObject_CallMethod1(PyObject* a, const char* b, PyObject* c, int d) {
21792183
return Graal_PyTruffleObject_CallMethod1(a, truffleString(b), c, d);
21802184
}
2185+
#undef _PyTuple_SET_ITEM
2186+
PyAPI_FUNC(int) _PyTuple_SET_ITEM(PyObject* a, Py_ssize_t b, PyObject* c) {
2187+
return Graal_PyTuple_SET_ITEM(a, b, c);
2188+
}
21812189
#undef _PyType_Lookup
21822190
PyAPI_FUNC(PyObject*) _PyType_Lookup(PyTypeObject* a, PyObject* b) {
21832191
return Graal_PyType_Lookup(a, b);

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -597,6 +597,7 @@ typedef struct {
597597
BUILTIN(_PyTruffleObject_MakeTpCall, PyObject*, PyObject*, void*, int, void*, void*) \
598598
BUILTIN(_PyTruffleSet_NextEntry, PyObject*, PyObject*, Py_ssize_t) \
599599
BUILTIN(_PyTruffle_HashBytes, Py_hash_t, const char*) \
600+
BUILTIN(_PyTuple_SET_ITEM, int, PyObject*, Py_ssize_t, PyObject*) \
600601
BUILTIN(_PyType_Lookup, PyObject*, PyTypeObject*, PyObject*) \
601602
BUILTIN(_PyUnicode_AsASCIIString, PyObject*, PyObject*, const char*) \
602603
BUILTIN(_PyUnicode_AsLatin1String, PyObject*, PyObject*, const char*) \

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ PyObject * tuple_subtype_new(PyTypeObject *type, PyObject *iterable) {
8888
for (i = 0; i < n; i++) {
8989
item = PyTuple_GetItem(tmp, i);
9090
Py_INCREF(item);
91-
PyTuple_SetItem((PyObject*)newobj, i, item);
91+
newobj->ob_item[i] = item; // PyTuple_SETITEM
9292
}
9393
Py_DECREF(tmp);
9494
return (PyObject*) newobj;

graalpython/com.oracle.graal.python.jni/src/capi_forwards.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1503,6 +1503,7 @@ void unimplemented(const char* name) {
15031503
#undef _PyTuple_DebugMallocStats
15041504
#undef _PyTuple_MaybeUntrack
15051505
#undef _PyTuple_Resize
1506+
#undef _PyTuple_SET_ITEM
15061507
#undef _PyType_CalculateMetaclass
15071508
#undef _PyType_GetDocFromInternalDoc
15081509
#undef _PyType_GetModuleByDef
@@ -5568,6 +5569,10 @@ PyAPI_FUNC(void) _PyTuple_MaybeUntrack(PyObject* a) {
55685569
PyAPI_FUNC(int) _PyTuple_Resize(PyObject** a, Py_ssize_t b) {
55695570
unimplemented("_PyTuple_Resize"); exit(-1);
55705571
}
5572+
PyAPI_FUNC(int) _PyTuple_SET_ITEM(PyObject* a, Py_ssize_t b, PyObject* c) {
5573+
int result = (int) Graal_PyTuple_SET_ITEM(a, b, c);
5574+
return result;
5575+
}
55715576
PyAPI_FUNC(PyTypeObject*) _PyType_CalculateMetaclass(PyTypeObject* a, PyObject* b) {
55725577
unimplemented("_PyType_CalculateMetaclass"); exit(-1);
55735578
}

graalpython/com.oracle.graal.python.test/src/tests/cpyext/test_tuple.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,14 @@ def _reference_getitem(args):
5858
return t[idx]
5959

6060

61+
def _reference_setitem(args):
62+
t = args[0]
63+
idx = args[1]
64+
if idx < 0 or idx >= len(t):
65+
raise IndexError('tuple index out of range')
66+
return None
67+
68+
6169
class MyStr(str):
6270

6371
def __init__(self, s):
@@ -137,6 +145,58 @@ def compile_module(self, name):
137145
arguments=["PyObject* tuple", "Py_ssize_t index"],
138146
resulttype="PyObject*",
139147
)
148+
149+
test_PyTuple_SetItem = CPyExtFunction(
150+
_reference_setitem,
151+
lambda: (
152+
((1, 2, 3), 1, "a"),
153+
(TupleSubclass(1, 2, 3), 1, 5),
154+
((1, 2, 3), -1, []),
155+
((1, 2, 3), 3, str),
156+
),
157+
code="""PyObject* wrap_PyTuple_SetItem(PyObject* original, Py_ssize_t index, PyObject* value) {
158+
PyObject* tuple = PyTuple_New(PyTuple_Size(original));
159+
for (int i = 0; i < PyTuple_Size(original); i++) {
160+
PyTuple_SET_ITEM(tuple, i, Py_NewRef(PyTuple_GetItem(original, i)));
161+
}
162+
if (PyTuple_SetItem(tuple, index, value) == 0) {
163+
return Py_NewRef(Py_None);
164+
} else {
165+
return NULL;
166+
}
167+
}
168+
""",
169+
resultspec="O",
170+
argspec='OnO',
171+
arguments=["PyObject* tuple", "Py_ssize_t index", "PyObject* value"],
172+
callfunction="wrap_PyTuple_SetItem",
173+
cmpfunc=unhandled_error_compare
174+
)
175+
176+
test_PyTuple_SET_ITEM = CPyExtFunction(
177+
lambda args: (None, args[1], None),
178+
lambda: (
179+
(1, str),
180+
(1, 0),
181+
(1, "asdf"),
182+
),
183+
code="""PyObject* wrap_PyTuple_SET_ITEM(Py_ssize_t index, PyObject* value) {
184+
PyObject* tuple = PyTuple_New(3);
185+
for (int i = 0; i < PyTuple_Size(tuple); i++) {
186+
if (i != index) {
187+
PyTuple_SET_ITEM(tuple, i, Py_NewRef(Py_None));
188+
}
189+
}
190+
PyTuple_SET_ITEM(tuple, index, Py_NewRef(value));
191+
return tuple;
192+
}
193+
""",
194+
resultspec="O",
195+
argspec='nO',
196+
arguments=["Py_ssize_t index", "PyObject* value"],
197+
callfunction="wrap_PyTuple_SET_ITEM",
198+
cmpfunc=unhandled_error_compare
199+
)
140200

141201
# PyTuple_GetSlice
142202
test_PyTuple_GetSlice = CPyExtFunctionOutVars(

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextBuiltinRegistry.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -558,12 +558,13 @@ private PythonCextBuiltinRegistry() {
558558
public static final CApiBuiltinExecutable _PyTruffleObject_MakeTpCall = new CApiBuiltinExecutable("_PyTruffleObject_MakeTpCall", CApiCallPath.Ignored, ArgDescriptor.PyObjectTransfer, new ArgDescriptor[]{ArgDescriptor.PyObject, ArgDescriptor.Pointer, ArgDescriptor.Int, ArgDescriptor.Pointer, ArgDescriptor.Pointer}, 497);
559559
public static final CApiBuiltinExecutable _PyTruffleSet_NextEntry = new CApiBuiltinExecutable("_PyTruffleSet_NextEntry", CApiCallPath.Ignored, ArgDescriptor.PyObjectTransfer, new ArgDescriptor[]{ArgDescriptor.PyObject, ArgDescriptor.Py_ssize_t}, 498);
560560
public static final CApiBuiltinExecutable _PyTruffle_HashBytes = new CApiBuiltinExecutable("_PyTruffle_HashBytes", CApiCallPath.Ignored, ArgDescriptor.Py_hash_t, new ArgDescriptor[]{ArgDescriptor.ConstCharPtrAsTruffleString}, 499);
561-
public static final CApiBuiltinExecutable _PyType_Lookup = new CApiBuiltinExecutable("_PyType_Lookup", CApiCallPath.Direct, ArgDescriptor.PyObjectBorrowed, new ArgDescriptor[]{ArgDescriptor.PyTypeObject, ArgDescriptor.PyObject}, 500);
562-
public static final CApiBuiltinExecutable _PyUnicode_AsASCIIString = new CApiBuiltinExecutable("_PyUnicode_AsASCIIString", CApiCallPath.Direct, ArgDescriptor.PyObjectTransfer, new ArgDescriptor[]{ArgDescriptor.PyObject, ArgDescriptor.ConstCharPtrAsTruffleString}, 501);
563-
public static final CApiBuiltinExecutable _PyUnicode_AsLatin1String = new CApiBuiltinExecutable("_PyUnicode_AsLatin1String", CApiCallPath.Direct, ArgDescriptor.PyObjectTransfer, new ArgDescriptor[]{ArgDescriptor.PyObject, ArgDescriptor.ConstCharPtrAsTruffleString}, 502);
564-
public static final CApiBuiltinExecutable _PyUnicode_AsUTF8String = new CApiBuiltinExecutable("_PyUnicode_AsUTF8String", CApiCallPath.Direct, ArgDescriptor.PyObjectTransfer, new ArgDescriptor[]{ArgDescriptor.PyObject, ArgDescriptor.ConstCharPtrAsTruffleString}, 503);
565-
public static final CApiBuiltinExecutable _PyUnicode_EqualToASCIIString = new CApiBuiltinExecutable("_PyUnicode_EqualToASCIIString", CApiCallPath.Direct, ArgDescriptor.Int, new ArgDescriptor[]{ArgDescriptor.PyObject, ArgDescriptor.ConstCharPtrAsTruffleString}, 504);
566-
public static final CApiBuiltinExecutable _Py_HashDouble = new CApiBuiltinExecutable("_Py_HashDouble", CApiCallPath.Direct, ArgDescriptor.Py_hash_t, new ArgDescriptor[]{ArgDescriptor.PyObject, ArgDescriptor.Double}, 505);
561+
public static final CApiBuiltinExecutable _PyTuple_SET_ITEM = new CApiBuiltinExecutable("_PyTuple_SET_ITEM", CApiCallPath.Direct, ArgDescriptor.Int, new ArgDescriptor[]{ArgDescriptor.PyObject, ArgDescriptor.Py_ssize_t, ArgDescriptor.PyObjectTransfer}, 500);
562+
public static final CApiBuiltinExecutable _PyType_Lookup = new CApiBuiltinExecutable("_PyType_Lookup", CApiCallPath.Direct, ArgDescriptor.PyObjectBorrowed, new ArgDescriptor[]{ArgDescriptor.PyTypeObject, ArgDescriptor.PyObject}, 501);
563+
public static final CApiBuiltinExecutable _PyUnicode_AsASCIIString = new CApiBuiltinExecutable("_PyUnicode_AsASCIIString", CApiCallPath.Direct, ArgDescriptor.PyObjectTransfer, new ArgDescriptor[]{ArgDescriptor.PyObject, ArgDescriptor.ConstCharPtrAsTruffleString}, 502);
564+
public static final CApiBuiltinExecutable _PyUnicode_AsLatin1String = new CApiBuiltinExecutable("_PyUnicode_AsLatin1String", CApiCallPath.Direct, ArgDescriptor.PyObjectTransfer, new ArgDescriptor[]{ArgDescriptor.PyObject, ArgDescriptor.ConstCharPtrAsTruffleString}, 503);
565+
public static final CApiBuiltinExecutable _PyUnicode_AsUTF8String = new CApiBuiltinExecutable("_PyUnicode_AsUTF8String", CApiCallPath.Direct, ArgDescriptor.PyObjectTransfer, new ArgDescriptor[]{ArgDescriptor.PyObject, ArgDescriptor.ConstCharPtrAsTruffleString}, 504);
566+
public static final CApiBuiltinExecutable _PyUnicode_EqualToASCIIString = new CApiBuiltinExecutable("_PyUnicode_EqualToASCIIString", CApiCallPath.Direct, ArgDescriptor.Int, new ArgDescriptor[]{ArgDescriptor.PyObject, ArgDescriptor.ConstCharPtrAsTruffleString}, 505);
567+
public static final CApiBuiltinExecutable _Py_HashDouble = new CApiBuiltinExecutable("_Py_HashDouble", CApiCallPath.Direct, ArgDescriptor.Py_hash_t, new ArgDescriptor[]{ArgDescriptor.PyObject, ArgDescriptor.Double}, 506);
567568

568569
public static final CApiBuiltinExecutable[] builtins = {
569570
PyByteArray_Resize,
@@ -1066,6 +1067,7 @@ private PythonCextBuiltinRegistry() {
10661067
_PyTruffleObject_MakeTpCall,
10671068
_PyTruffleSet_NextEntry,
10681069
_PyTruffle_HashBytes,
1070+
_PyTuple_SET_ITEM,
10691071
_PyType_Lookup,
10701072
_PyUnicode_AsASCIIString,
10711073
_PyUnicode_AsLatin1String,
@@ -2077,16 +2079,18 @@ static CApiBuiltinNode createBuiltinNode(int id) {
20772079
case 499:
20782080
return com.oracle.graal.python.builtins.modules.cext.PythonCextHashBuiltinsFactory._PyTruffle_HashBytesNodeGen.create();
20792081
case 500:
2080-
return com.oracle.graal.python.builtins.modules.cext.PythonCextTypeBuiltinsFactory._PyType_LookupNodeGen.create();
2082+
return com.oracle.graal.python.builtins.modules.cext.PythonCextTupleBuiltinsFactory._PyTuple_SET_ITEMNodeGen.create();
20812083
case 501:
2082-
return com.oracle.graal.python.builtins.modules.cext.PythonCextUnicodeBuiltinsFactory._PyUnicode_AsASCIIStringNodeGen.create();
2084+
return com.oracle.graal.python.builtins.modules.cext.PythonCextTypeBuiltinsFactory._PyType_LookupNodeGen.create();
20832085
case 502:
2084-
return com.oracle.graal.python.builtins.modules.cext.PythonCextUnicodeBuiltinsFactory._PyUnicode_AsLatin1StringNodeGen.create();
2086+
return com.oracle.graal.python.builtins.modules.cext.PythonCextUnicodeBuiltinsFactory._PyUnicode_AsASCIIStringNodeGen.create();
20852087
case 503:
2086-
return com.oracle.graal.python.builtins.modules.cext.PythonCextUnicodeBuiltinsFactory._PyUnicode_AsUTF8StringNodeGen.create();
2088+
return com.oracle.graal.python.builtins.modules.cext.PythonCextUnicodeBuiltinsFactory._PyUnicode_AsLatin1StringNodeGen.create();
20872089
case 504:
2088-
return com.oracle.graal.python.builtins.modules.cext.PythonCextUnicodeBuiltinsFactory._PyUnicode_EqualToASCIIStringNodeGen.create();
2090+
return com.oracle.graal.python.builtins.modules.cext.PythonCextUnicodeBuiltinsFactory._PyUnicode_AsUTF8StringNodeGen.create();
20892091
case 505:
2092+
return com.oracle.graal.python.builtins.modules.cext.PythonCextUnicodeBuiltinsFactory._PyUnicode_EqualToASCIIStringNodeGen.create();
2093+
case 506:
20902094
return com.oracle.graal.python.builtins.modules.cext.PythonCextHashBuiltinsFactory._Py_HashDoubleNodeGen.create();
20912095
}
20922096
return null;

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextTupleBuiltins.java

Lines changed: 56 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,14 @@
6262
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.ListGeneralizationNode;
6363
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.SetItemNode;
6464
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.SetItemScalarNode;
65+
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodesFactory.GetItemNodeGen;
66+
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodesFactory.GetItemScalarNodeGen;
6567
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
6668
import com.oracle.graal.python.lib.PySliceNew;
6769
import com.oracle.graal.python.lib.PyTupleSizeNode;
6870
import com.oracle.graal.python.nodes.ErrorMessages;
6971
import com.oracle.graal.python.nodes.builtins.TupleNodes.GetNativeTupleStorage;
72+
import com.oracle.graal.python.runtime.sequence.storage.NativeSequenceStorage;
7073
import com.oracle.graal.python.runtime.sequence.storage.SequenceStorage;
7174
import com.oracle.truffle.api.dsl.Cached;
7275
import com.oracle.truffle.api.dsl.Cached.Shared;
@@ -89,9 +92,55 @@ PTuple doGeneric(long size) {
8992
abstract static class PyTuple_SetItem extends CApiTernaryBuiltinNode {
9093
@Specialization
9194
int doManaged(PTuple tuple, long index, Object element,
92-
@Shared("setItem") @Cached("createSetItem()") SequenceStorageNodes.SetItemNode setItemNode,
95+
@Cached("createSetItem()") SequenceStorageNodes.SetItemNode setItemNode,
9396
@Cached ConditionProfile generalizedProfile) {
94-
SequenceStorage newStorage = setItem(tuple.getSequenceStorage(), index, element, setItemNode);
97+
SequenceStorage sequenceStorage = tuple.getSequenceStorage();
98+
checkBounds(sequenceStorage, index);
99+
SequenceStorage newStorage = setItemNode.execute(null, sequenceStorage, (int) index, element);
100+
if (generalizedProfile.profile(tuple.getSequenceStorage() != newStorage)) {
101+
tuple.setSequenceStorage(newStorage);
102+
}
103+
return 0;
104+
}
105+
106+
@Specialization
107+
int doNative(PythonAbstractNativeObject tuple, long index, Object element,
108+
@Cached GetNativeTupleStorage asNativeStorage,
109+
@Cached SequenceStorageNodes.SetNativeItemScalarNode setItemNode) {
110+
NativeSequenceStorage sequenceStorage = asNativeStorage.execute(tuple);
111+
checkBounds(sequenceStorage, index);
112+
setItemNode.execute(sequenceStorage, (int) index, element);
113+
return 0;
114+
}
115+
116+
@Fallback
117+
@SuppressWarnings("unused")
118+
Object fallback(Object tuple, Object index, Object element) {
119+
throw raiseFallback(tuple, PythonBuiltinClassType.PTuple);
120+
}
121+
122+
private void checkBounds(SequenceStorage sequenceStorage, long index) {
123+
// we must do a bounds-check but we must not normalize the index
124+
if (index < 0 || index >= sequenceStorage.length()) {
125+
throw raise(IndexError, ErrorMessages.TUPLE_OUT_OF_BOUNDS);
126+
}
127+
}
128+
129+
protected static SetItemNode createSetItem() {
130+
return SetItemNode.create(null, ListGeneralizationNode::create);
131+
}
132+
}
133+
134+
@CApiBuiltin(ret = Int, args = {PyObject, Py_ssize_t, PyObjectTransfer}, call = Direct)
135+
abstract static class _PyTuple_SET_ITEM extends CApiTernaryBuiltinNode {
136+
@Specialization
137+
int doManaged(PTuple tuple, long index, Object element,
138+
@Cached("createSetItem()") SequenceStorageNodes.SetItemNode setItemNode,
139+
@Cached ConditionProfile generalizedProfile) {
140+
assert GetItemScalarNodeGen.getUncached().execute(tuple.getSequenceStorage(), (int) index) == null;
141+
SequenceStorage sequenceStorage = tuple.getSequenceStorage();
142+
checkBounds(sequenceStorage, index);
143+
SequenceStorage newStorage = setItemNode.execute(null, sequenceStorage, (int) index, element);
95144
if (generalizedProfile.profile(tuple.getSequenceStorage() != newStorage)) {
96145
tuple.setSequenceStorage(newStorage);
97146
}
@@ -101,8 +150,10 @@ int doManaged(PTuple tuple, long index, Object element,
101150
@Specialization
102151
int doNative(PythonAbstractNativeObject tuple, long index, Object element,
103152
@Cached GetNativeTupleStorage asNativeStorage,
104-
@Shared("setItem") @Cached("createSetItem()") SequenceStorageNodes.SetItemNode setItemNode) {
105-
setItem(asNativeStorage.execute(tuple), index, element, setItemNode);
153+
@Cached SequenceStorageNodes.InitializeNativeItemScalarNode setItemNode) {
154+
NativeSequenceStorage sequenceStorage = asNativeStorage.execute(tuple);
155+
checkBounds(sequenceStorage, index);
156+
setItemNode.execute(sequenceStorage, (int) index, element);
106157
return 0;
107158
}
108159

@@ -112,12 +163,11 @@ Object fallback(Object tuple, Object index, Object element) {
112163
throw raiseFallback(tuple, PythonBuiltinClassType.PTuple);
113164
}
114165

115-
private SequenceStorage setItem(SequenceStorage sequenceStorage, long index, Object element, SetItemNode setItemNode) {
166+
private void checkBounds(SequenceStorage sequenceStorage, long index) {
116167
// we must do a bounds-check but we must not normalize the index
117168
if (index < 0 || index >= sequenceStorage.length()) {
118169
throw raise(IndexError, ErrorMessages.TUPLE_OUT_OF_BOUNDS);
119170
}
120-
return setItemNode.execute(null, sequenceStorage, (int) index, element);
121171
}
122172

123173
protected static SetItemNode createSetItem() {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -543,7 +543,7 @@ public static boolean assertBuiltins(Object capiLibrary) {
543543
"PyMethodDescrObject_GetMethod", "PyObject_GetDoc", "PyObject_SetDoc", "PySlice_Start", "PySlice_Step", "PySlice_Stop", "_PyASCIIObject_LENGTH", "_PyASCIIObject_STATE_ASCII",
544544
"_PyASCIIObject_STATE_COMPACT", "_PyASCIIObject_STATE_KIND", "_PyASCIIObject_STATE_READY", "_PyASCIIObject_WSTR", "_PyByteArray_Start", "_PyEval_SetCoroutineOriginTrackingDepth",
545545
"_PyFrame_SetLineNumber", "_PyMemoryView_GetBuffer", "_PySequence_Fast_ITEMS", "_PySequence_ITEM", "_PyUnicodeObject_DATA", "_PyUnicode_get_wstr_length", "_Py_REFCNT",
546-
"_Py_SET_REFCNT", "_Py_SET_SIZE", "_Py_SET_TYPE", "_Py_SIZE", "_Py_TYPE"};
546+
"_Py_SET_REFCNT", "_Py_SET_SIZE", "_Py_SET_TYPE", "_Py_SIZE", "_Py_TYPE", "_PyTuple_SET_ITEM"};
547547

548548
/**
549549
* Check the list of implemented and unimplemented builtins against the list of CPython exported

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
@@ -156,6 +156,7 @@ public enum NativeCAPISymbol implements NativeCExtSymbol {
156156
FUN_PY_TRUFFLE_PRIMITIVE_ARRAY_FREE("PyTruffle_PrimitiveArrayFree"),
157157
FUN_PY_TRUFFLE_OBJECT_ARRAY_FREE("PyTruffle_ObjectArrayFree"),
158158
FUN_PY_TRUFFLE_SET_STORAGE_ITEM("PyTruffle_SetStorageItem"),
159+
FUN_PY_TRUFFLE_INITIALIZE_STORAGE_ITEM("PyTruffle_InitializeStorageItem"),
159160
FUN_PY_TRUFFLE_NATIVE_TUPLE_ITEMS("PyTruffle_NativeTupleItems"),
160161
FUN_PY_OBJECT_GENERIC_GET_DICT("_PyObject_GenericGetDict"),
161162
FUN_PY_OBJECT_NEW("PyTruffle_Object_New"),

0 commit comments

Comments
 (0)