@@ -109,26 +109,18 @@ private ReadArrayItemNode getReadArrayItemNode() {
109
109
@ Resolve (message = "WRITE" )
110
110
abstract static class WriteNode extends Node {
111
111
@ Child private WriteArrayItemNode writeArrayItemNode ;
112
- @ Child private CExtNodes .ToJavaNode toJavaNode ;
113
112
114
113
public Object access (PySequenceArrayWrapper object , Object key , Object value ) {
115
114
if (writeArrayItemNode == null ) {
116
115
CompilerDirectives .transferToInterpreterAndInvalidate ();
117
116
writeArrayItemNode = insert (WriteArrayItemNode .create ());
118
117
}
119
- writeArrayItemNode .execute (object .getDelegate (), key , getToJavaNode (). execute ( value ) );
118
+ writeArrayItemNode .execute (object .getDelegate (), key , value );
120
119
121
120
// A C expression assigning to an array returns the assigned value.
122
121
return value ;
123
122
}
124
123
125
- private CExtNodes .ToJavaNode getToJavaNode () {
126
- if (toJavaNode == null ) {
127
- CompilerDirectives .transferToInterpreterAndInvalidate ();
128
- toJavaNode = insert (CExtNodes .ToJavaNode .create ());
129
- }
130
- return toJavaNode ;
131
- }
132
124
}
133
125
134
126
@ ImportStatic (SpecialMethodNames .class )
@@ -222,24 +214,34 @@ public static ReadArrayItemNode create() {
222
214
@ ImportStatic (SpecialMethodNames .class )
223
215
@ TypeSystemReference (PythonTypes .class )
224
216
abstract static class WriteArrayItemNode extends Node {
217
+ @ Child private CExtNodes .ToJavaNode toJavaNode ;
225
218
226
219
public abstract Object execute (Object arrayObject , Object idx , Object value );
227
220
228
221
@ Specialization
229
222
Object doTuple (PTuple tuple , long idx , Object value ) {
230
223
Object [] store = tuple .getArray ();
231
- store [(int ) idx ] = value ;
224
+ // TODO(fa) do proper index conversion
225
+ store [(int ) idx ] = getToJavaNode ().execute (value );
232
226
return value ;
233
227
}
234
228
235
229
@ Specialization
236
230
Object doTuple (PList list , long idx , Object value ,
237
231
@ Cached ("createListSetItem()" ) ListBuiltins .SetItemNode setItemNode ) {
238
- return setItemNode .execute (list , idx , value );
232
+ return setItemNode .execute (list , idx , getToJavaNode (). execute ( value ) );
239
233
}
240
234
241
235
@ Specialization
242
236
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
243
245
tuple .getInternalByteArray ()[(int ) idx ] = value ;
244
246
return value ;
245
247
}
@@ -248,6 +250,14 @@ protected static ListBuiltins.SetItemNode createListSetItem() {
248
250
return ListBuiltinsFactory .SetItemNodeFactory .create ();
249
251
}
250
252
253
+ private CExtNodes .ToJavaNode getToJavaNode () {
254
+ if (toJavaNode == null ) {
255
+ CompilerDirectives .transferToInterpreterAndInvalidate ();
256
+ toJavaNode = insert (CExtNodes .ToJavaNode .create ());
257
+ }
258
+ return toJavaNode ;
259
+ }
260
+
251
261
public static WriteArrayItemNode create () {
252
262
return WriteArrayItemNodeGen .create ();
253
263
}
0 commit comments