Skip to content

Commit 4cdf1f0

Browse files
committed
Fix: allow primitves when writing to array.
1 parent 08b84ae commit 4cdf1f0

File tree

1 file changed

+21
-11
lines changed

1 file changed

+21
-11
lines changed

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

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -109,26 +109,18 @@ private ReadArrayItemNode getReadArrayItemNode() {
109109
@Resolve(message = "WRITE")
110110
abstract static class WriteNode extends Node {
111111
@Child private WriteArrayItemNode writeArrayItemNode;
112-
@Child private CExtNodes.ToJavaNode toJavaNode;
113112

114113
public Object access(PySequenceArrayWrapper object, Object key, Object value) {
115114
if (writeArrayItemNode == null) {
116115
CompilerDirectives.transferToInterpreterAndInvalidate();
117116
writeArrayItemNode = insert(WriteArrayItemNode.create());
118117
}
119-
writeArrayItemNode.execute(object.getDelegate(), key, getToJavaNode().execute(value));
118+
writeArrayItemNode.execute(object.getDelegate(), key, value);
120119

121120
// A C expression assigning to an array returns the assigned value.
122121
return value;
123122
}
124123

125-
private CExtNodes.ToJavaNode getToJavaNode() {
126-
if (toJavaNode == null) {
127-
CompilerDirectives.transferToInterpreterAndInvalidate();
128-
toJavaNode = insert(CExtNodes.ToJavaNode.create());
129-
}
130-
return toJavaNode;
131-
}
132124
}
133125

134126
@ImportStatic(SpecialMethodNames.class)
@@ -222,24 +214,34 @@ public static ReadArrayItemNode create() {
222214
@ImportStatic(SpecialMethodNames.class)
223215
@TypeSystemReference(PythonTypes.class)
224216
abstract static class WriteArrayItemNode extends Node {
217+
@Child private CExtNodes.ToJavaNode toJavaNode;
225218

226219
public abstract Object execute(Object arrayObject, Object idx, Object value);
227220

228221
@Specialization
229222
Object doTuple(PTuple tuple, long idx, Object value) {
230223
Object[] store = tuple.getArray();
231-
store[(int) idx] = value;
224+
// TODO(fa) do proper index conversion
225+
store[(int) idx] = getToJavaNode().execute(value);
232226
return value;
233227
}
234228

235229
@Specialization
236230
Object doTuple(PList list, long idx, Object value,
237231
@Cached("createListSetItem()") ListBuiltins.SetItemNode setItemNode) {
238-
return setItemNode.execute(list, idx, value);
232+
return setItemNode.execute(list, idx, getToJavaNode().execute(value));
239233
}
240234

241235
@Specialization
242236
Object doTuple(PBytes tuple, long idx, byte value) {
237+
// TODO(fa) do proper index conversion
238+
tuple.getInternalByteArray()[(int) idx] = value;
239+
return value;
240+
}
241+
242+
@Specialization
243+
Object doTuple(PByteArray tuple, long idx, byte value) {
244+
// TODO(fa) do proper index conversion
243245
tuple.getInternalByteArray()[(int) idx] = value;
244246
return value;
245247
}
@@ -248,6 +250,14 @@ protected static ListBuiltins.SetItemNode createListSetItem() {
248250
return ListBuiltinsFactory.SetItemNodeFactory.create();
249251
}
250252

253+
private CExtNodes.ToJavaNode getToJavaNode() {
254+
if (toJavaNode == null) {
255+
CompilerDirectives.transferToInterpreterAndInvalidate();
256+
toJavaNode = insert(CExtNodes.ToJavaNode.create());
257+
}
258+
return toJavaNode;
259+
}
260+
251261
public static WriteArrayItemNode create() {
252262
return WriteArrayItemNodeGen.create();
253263
}

0 commit comments

Comments
 (0)