Skip to content

Commit 350d9a1

Browse files
committed
Use InitializeItemScalar in Py*_SET_ITEM even in managed case
t
1 parent 813ff3a commit 350d9a1

File tree

2 files changed

+9
-14
lines changed

2 files changed

+9
-14
lines changed

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

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,12 @@
4444
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.SystemError;
4545
import static com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins.CApiCallPath.Direct;
4646
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.Int;
47-
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.Void;
4847
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PyListObject;
4948
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PyObject;
5049
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PyObjectBorrowed;
5150
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.PyObjectTransfer;
5251
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.Py_ssize_t;
52+
import static com.oracle.graal.python.builtins.objects.cext.capi.transitions.ArgDescriptor.Void;
5353
import static com.oracle.graal.python.nodes.ErrorMessages.BAD_ARG_TO_INTERNAL_FUNC_S;
5454

5555
import java.util.Arrays;
@@ -66,7 +66,6 @@
6666
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
6767
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.GetItemScalarNode;
6868
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.ListGeneralizationNode;
69-
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.SetItemNode;
7069
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.SetItemScalarNode;
7170
import com.oracle.graal.python.builtins.objects.list.ListBuiltins;
7271
import com.oracle.graal.python.builtins.objects.list.ListBuiltins.ListExtendNode;
@@ -296,11 +295,13 @@ int fallback(Object list, @SuppressWarnings("unused") Object i, @SuppressWarning
296295
abstract static class _PyList_SET_ITEM extends CApiTernaryBuiltinNode {
297296
@Specialization
298297
int doManaged(PList list, long index, Object element,
299-
@Cached("createSetItem()") SequenceStorageNodes.SetItemNode setItemNode,
298+
@Cached ListGeneralizationNode generalizationNode,
299+
@Cached SequenceStorageNodes.InitializeItemScalarNode setItemNode,
300300
@Cached ConditionProfile generalizedProfile) {
301301
SequenceStorage sequenceStorage = list.getSequenceStorage();
302302
checkBounds(sequenceStorage, index);
303-
SequenceStorage newStorage = setItemNode.execute(null, sequenceStorage, (int) index, element);
303+
SequenceStorage newStorage = generalizationNode.execute(sequenceStorage, element);
304+
setItemNode.execute(newStorage, (int) index, element);
304305
if (generalizedProfile.profile(list.getSequenceStorage() != newStorage)) {
305306
list.setSequenceStorage(newStorage);
306307
}
@@ -329,10 +330,6 @@ private void checkBounds(SequenceStorage sequenceStorage, long index) {
329330
throw raise(IndexError, ErrorMessages.INDEX_OUT_OF_BOUNDS);
330331
}
331332
}
332-
333-
protected static SetItemNode createSetItem() {
334-
return SetItemNode.create(null, ListGeneralizationNode::create);
335-
}
336333
}
337334

338335
@CApiBuiltin(ret = Int, args = {PyObject}, call = Direct)

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,8 @@ protected static SetItemNode createSetItem() {
133133
abstract static class _PyTuple_SET_ITEM extends CApiTernaryBuiltinNode {
134134
@Specialization
135135
int doManaged(PTuple tuple, long index, Object element,
136-
@Cached("createSetItem()") SequenceStorageNodes.SetItemNode setItemNode,
136+
@Cached ListGeneralizationNode generalizationNode,
137+
@Cached SequenceStorageNodes.InitializeItemScalarNode setItemNode,
137138
@Cached ConditionProfile generalizedProfile) {
138139
// we cannot assume that there is nothing already in the tuple, because the API usage
139140
// is valid if the tuple has never been visible to Python code so far, and it is up to
@@ -142,7 +143,8 @@ int doManaged(PTuple tuple, long index, Object element,
142143
// times
143144
SequenceStorage sequenceStorage = tuple.getSequenceStorage();
144145
checkBounds(sequenceStorage, index);
145-
SequenceStorage newStorage = setItemNode.execute(null, sequenceStorage, (int) index, element);
146+
SequenceStorage newStorage = generalizationNode.execute(sequenceStorage, element);
147+
setItemNode.execute(newStorage, (int) index, element);
146148
if (generalizedProfile.profile(tuple.getSequenceStorage() != newStorage)) {
147149
tuple.setSequenceStorage(newStorage);
148150
}
@@ -171,10 +173,6 @@ private void checkBounds(SequenceStorage sequenceStorage, long index) {
171173
throw raise(IndexError, ErrorMessages.TUPLE_OUT_OF_BOUNDS);
172174
}
173175
}
174-
175-
protected static SetItemNode createSetItem() {
176-
return SetItemNode.create(null, ListGeneralizationNode::create);
177-
}
178176
}
179177

180178
@CApiBuiltin(ret = PyObjectBorrowed, args = {PyObject, Py_ssize_t}, call = Direct)

0 commit comments

Comments
 (0)