Skip to content

Commit 7492c04

Browse files
committed
Remove some usages of 'PTuple.getArray'.
1 parent 610b2f2 commit 7492c04

File tree

4 files changed

+17
-44
lines changed

4 files changed

+17
-44
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/TruffleCextBuiltins.java

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,8 @@
7878
import com.oracle.graal.python.builtins.objects.code.PCode;
7979
import com.oracle.graal.python.builtins.objects.common.HashingStorageNodes;
8080
import com.oracle.graal.python.builtins.objects.common.PHashingCollection;
81+
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
82+
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.NormalizeIndexNode;
8183
import com.oracle.graal.python.builtins.objects.complex.PComplex;
8284
import com.oracle.graal.python.builtins.objects.dict.PDict;
8385
import com.oracle.graal.python.builtins.objects.exception.PBaseException;
@@ -326,27 +328,14 @@ abstract static class AsDouble extends PythonBuiltinNode {
326328
@GenerateNodeFactory
327329
abstract static class PyTuple_SetItem extends NativeBuiltin {
328330
@Specialization
329-
int doI(PTuple tuple, int position, Object element) {
330-
Object[] store = tuple.getArray();
331-
if (position < 0 || position >= store.length) {
332-
return raiseNative(-1, PythonErrorType.IndexError, "tuple assignment index out of range");
333-
}
334-
store[position] = element;
331+
int doI(PTuple tuple, Object position, Object element,
332+
@Cached("create()") SequenceStorageNodes.SetItemNode setItemNode) {
333+
setItemNode.execute(tuple.getSequenceStorage(), position, element);
335334
return 0;
336335
}
337336

338-
@Specialization(rewriteOn = ArithmeticException.class)
339-
int doL(PTuple tuple, long position, Object element) {
340-
return doI(tuple, PInt.intValueExact(position), element);
341-
}
342-
343-
@Specialization
344-
int doLOvf(PTuple tuple, long position, Object element) {
345-
try {
346-
return doI(tuple, PInt.intValueExact(position), element);
347-
} catch (ArithmeticException e) {
348-
return raiseNative(-1, PythonErrorType.IndexError, "cannot fit 'int' into an index-sized integer");
349-
}
337+
protected static SequenceStorageNodes.SetItemNode createSetItem() {
338+
return SequenceStorageNodes.SetItemNode.create(NormalizeIndexNode.forTupleAssign());
350339
}
351340
}
352341

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

Lines changed: 2 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -236,30 +236,9 @@ abstract static class WriteArrayItemNode extends Node {
236236
public abstract Object execute(Object arrayObject, Object idx, Object value);
237237

238238
@Specialization
239-
Object doTuple(PTuple tuple, long idx, Object value) {
240-
Object[] store = tuple.getArray();
241-
// TODO(fa) do proper index conversion
242-
store[(int) idx] = getToJavaNode().execute(value);
243-
return value;
244-
}
245-
246-
@Specialization
247-
Object doList(PList list, long idx, Object value,
248-
@Cached("createListSetItem()") ListBuiltins.SetItemNode setItemNode) {
249-
return setItemNode.execute(list, idx, getToJavaNode().execute(value));
250-
}
251-
252-
@Specialization
253-
Object doBytes(PBytes tuple, long idx, byte value,
254-
@Cached("create()") SequenceStorageNodes.SetItemNode setItemNode) {
255-
setItemNode.executeLong(tuple.getSequenceStorage(), idx, value);
256-
return value;
257-
}
258-
259-
@Specialization
260-
Object doByteArray(PByteArray tuple, long idx, byte value,
239+
Object doTuple(PSequence s, long idx, Object value,
261240
@Cached("create()") SequenceStorageNodes.SetItemNode setItemNode) {
262-
setItemNode.executeLong(tuple.getSequenceStorage(), idx, value);
241+
setItemNode.execute(s.getSequenceStorage(), idx, getToJavaNode().execute(value));
263242
return value;
264243
}
265244

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/common/SequenceStorageNodes.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -471,9 +471,9 @@ public SetItemNode(NormalizeIndexNode normalizeIndexNode) {
471471

472472
public abstract void execute(SequenceStorage s, Object key, Object value);
473473

474-
public abstract void executeInt(SequenceStorage s, int key, Object value);
474+
public abstract void execute(SequenceStorage s, int key, Object value);
475475

476-
public abstract void executeLong(SequenceStorage s, long key, Object value);
476+
public abstract void execute(SequenceStorage s, long key, Object value);
477477

478478
@Specialization
479479
protected void doScalarInt(SequenceStorage storage, int idx, Object value) {
@@ -1221,6 +1221,7 @@ public abstract static class NormalizeIndexNode extends PBaseNode {
12211221
public static final String INDEX_OUT_OF_BOUNDS = "index out of range";
12221222
public static final String RANGE_OUT_OF_BOUNDS = "range index out of range";
12231223
public static final String TUPLE_OUT_OF_BOUNDS = "tuple index out of range";
1224+
public static final String TUPLE_ASSIGN_OUT_OF_BOUNDS = "tuple assignment index out of range";
12241225
public static final String LIST_OUT_OF_BOUNDS = "list index out of range";
12251226
public static final String LIST_ASSIGN_OUT_OF_BOUNDS = "list assignment index out of range";
12261227
public static final String ARRAY_OUT_OF_BOUNDS = "array index out of range";
@@ -1327,6 +1328,10 @@ public static NormalizeIndexNode forTuple() {
13271328
return create(TUPLE_OUT_OF_BOUNDS);
13281329
}
13291330

1331+
public static NormalizeIndexNode forTupleAssign() {
1332+
return create(TUPLE_ASSIGN_OUT_OF_BOUNDS);
1333+
}
1334+
13301335
public static NormalizeIndexNode forArray() {
13311336
return create(ARRAY_OUT_OF_BOUNDS);
13321337
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/expression/CastToListNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ protected PythonClass getClass(Object value) {
8585
public Object[] getArray(VirtualFrame frame) {
8686
Object result = execute(frame);
8787
if (result instanceof PTuple) {
88-
return ((PTuple) result).getArray();
88+
return ((PTuple) result).getSequenceStorage().getInternalArray();
8989
} else if (result instanceof PList) {
9090
return ((PList) result).getSequenceStorage().getInternalArray();
9191
} else {

0 commit comments

Comments
 (0)