@@ -213,33 +213,33 @@ const char* PyTruffle_StringToCstr(void* jlString) {
213
213
return truffle_string_to_cstr (jlString );
214
214
}
215
215
216
- #define ReadMember (object , offset , T ) ((T*)(((char*)object) + offset))[0]
216
+ #define ReadMember (object , offset , T ) ((T*)(((char*)object) + PyLong_AsSsize_t( offset) ))[0]
217
217
218
- short ReadShortMember (PyObject * object , int offset ) {
218
+ short ReadShortMember (PyObject * object , PyObject * offset ) {
219
219
return ReadMember (object , offset , short );
220
220
}
221
221
222
- int ReadIntMember (PyObject * object , int offset ) {
222
+ int ReadIntMember (PyObject * object , PyObject * offset ) {
223
223
return ReadMember (object , offset , int );
224
224
}
225
225
226
- long ReadLongMember (PyObject * object , int offset ) {
226
+ long ReadLongMember (PyObject * object , PyObject * offset ) {
227
227
return ReadMember (object , offset , long );
228
228
}
229
229
230
- float ReadFloatMember (PyObject * object , int offset ) {
230
+ float ReadFloatMember (PyObject * object , PyObject * offset ) {
231
231
return ReadMember (object , offset , float );
232
232
}
233
233
234
- double ReadDoubleMember (PyObject * object , int offset ) {
234
+ double ReadDoubleMember (PyObject * object , PyObject * offset ) {
235
235
return ReadMember (object , offset , double );
236
236
}
237
237
238
- void * ReadStringMember (PyObject * object , int offset ) {
238
+ void * ReadStringMember (PyObject * object , PyObject * offset ) {
239
239
return truffle_read_string (ReadMember (object , offset , char * ));
240
240
}
241
241
242
- PyObject * ReadObjectMember (PyObject * object , int offset ) {
242
+ PyObject * ReadObjectMember (PyObject * object , PyObject * offset ) {
243
243
PyObject * member = ReadMember (object , offset , PyObject * );
244
244
if (member == NULL ) {
245
245
return Py_None ;
@@ -248,36 +248,36 @@ PyObject* ReadObjectMember(PyObject* object, int offset) {
248
248
}
249
249
}
250
250
251
- char ReadCharMember (PyObject * object , int offset ) {
251
+ char ReadCharMember (PyObject * object , PyObject * offset ) {
252
252
return ReadMember (object , offset , char );
253
253
}
254
254
255
- char ReadByteMember (PyObject * object , int offset ) {
255
+ char ReadByteMember (PyObject * object , PyObject * offset ) {
256
256
return ReadMember (object , offset , char );
257
257
}
258
258
259
- unsigned char ReadUByteMember (PyObject * object , int offset ) {
259
+ unsigned char ReadUByteMember (PyObject * object , PyObject * offset ) {
260
260
return ReadMember (object , offset , unsigned char );
261
261
}
262
262
263
- unsigned short ReadUShortMember (PyObject * object , int offset ) {
263
+ unsigned short ReadUShortMember (PyObject * object , PyObject * offset ) {
264
264
return ReadMember (object , offset , unsigned short );
265
265
}
266
266
267
- unsigned int ReadUIntMember (PyObject * object , int offset ) {
267
+ unsigned int ReadUIntMember (PyObject * object , PyObject * offset ) {
268
268
return ReadMember (object , offset , unsigned int );
269
269
}
270
270
271
- unsigned long ReadULongMember (PyObject * object , int offset ) {
271
+ unsigned long ReadULongMember (PyObject * object , PyObject * offset ) {
272
272
return ReadMember (object , offset , unsigned long );
273
273
}
274
274
275
- char ReadBoolMember (PyObject * object , int offset ) {
275
+ char ReadBoolMember (PyObject * object , PyObject * offset ) {
276
276
char flag = ReadMember (object , offset , char );
277
277
return flag ? Py_True : Py_False ;
278
278
}
279
279
280
- PyObject * ReadObjectExMember (PyObject * object , int offset ) {
280
+ PyObject * ReadObjectExMember (PyObject * object , PyObject * offset ) {
281
281
PyObject * member = ReadMember (object , offset , PyObject * );
282
282
if (member == NULL ) {
283
283
PyErr_SetString (PyExc_ValueError , "member must not be NULL" );
@@ -287,98 +287,100 @@ PyObject* ReadObjectExMember(PyObject* object, int offset) {
287
287
}
288
288
}
289
289
290
- long long ReadLongLongMember (PyObject * object , int offset ) {
290
+ long long ReadLongLongMember (PyObject * object , PyObject * offset ) {
291
291
return ReadMember (object , offset , long long );
292
292
}
293
293
294
- unsigned long long ReadULongLongMember (PyObject * object , int offset ) {
294
+ unsigned long long ReadULongLongMember (PyObject * object , PyObject * offset ) {
295
295
return ReadMember (object , offset , unsigned long long);
296
296
}
297
297
298
- Py_ssize_t ReadPySSizeT (PyObject * object , int offset ) {
298
+ Py_ssize_t ReadPySSizeT (PyObject * object , PyObject * offset ) {
299
299
return ReadMember (object , offset , Py_ssize_t );
300
300
}
301
301
302
302
#undef ReadMember
303
303
304
- #define WriteMember (object , offset , value , T ) *(T*)(((char*)object) + offset) = value;
304
+ #define WriteMember (object , offset , value , T ) do {\
305
+ *(T*)(((char*)object) + PyLong_AsSsize_t(offset)) = (T)(value); \
306
+ } while(0)
305
307
306
- void WriteShortMember (PyObject * object , int offset , short value ) {
307
- WriteMember (object , offset , value , short );
308
+ void WriteShortMember (PyObject * object , PyObject * offset , PyObject * value ) {
309
+ WriteMember (object , offset , PyLong_AsLong ( value ) , short );
308
310
}
309
311
310
- void WriteIntMember (PyObject * object , int offset , int value ) {
311
- WriteMember (object , offset , value , int );
312
+ void WriteIntMember (PyObject * object , PyObject * offset , PyObject * value ) {
313
+ WriteMember (object , offset , PyLong_AsLong ( value ) , int );
312
314
}
313
315
314
- void WriteLongMember (PyObject * object , int offset , long value ) {
315
- WriteMember (object , offset , value , long );
316
+ void WriteLongMember (PyObject * object , PyObject * offset , PyObject * value ) {
317
+ WriteMember (object , offset , PyLong_AsLong ( value ) , long );
316
318
}
317
319
318
- void WriteFloatMember (PyObject * object , int offset , float value ) {
319
- WriteMember (object , offset , value , float );
320
+ void WriteFloatMember (PyObject * object , PyObject * offset , PyObject * value ) {
321
+ WriteMember (object , offset , PyFloat_AsDouble ( value ) , float );
320
322
}
321
323
322
- void WriteDoubleMember (PyObject * object , int offset , double value ) {
323
- WriteMember (object , offset , value , double );
324
+ void WriteDoubleMember (PyObject * object , PyObject * offset , PyObject * value ) {
325
+ WriteMember (object , offset , PyFloat_AsDouble ( value ) , double );
324
326
}
325
327
326
- void WriteStringMember (PyObject * object , int offset , PyObject * value ) {
328
+ void WriteStringMember (PyObject * object , PyObject * offset , PyObject * value ) {
327
329
WriteMember (object , offset , as_char_pointer (value ), char * );
328
330
}
329
331
330
- void WriteObjectMember (PyObject * object , int offset , PyObject * value ) {
332
+ void WriteObjectMember (PyObject * object , PyObject * offset , PyObject * value ) {
331
333
WriteMember (object , offset , value , PyObject * );
332
334
}
333
335
334
- void WriteCharMember (PyObject * object , int offset , PyObject * value ) {
336
+ void WriteCharMember (PyObject * object , PyObject * offset , PyObject * value ) {
335
337
const char * ptr = as_char_pointer (value );
336
338
const char c = ptr [0 ];
337
339
truffle_free_cstr (ptr );
338
340
WriteMember (object , offset , c , char );
339
341
}
340
342
341
- void WriteByteMember (PyObject * object , int offset , PyObject * value ) {
343
+ void WriteByteMember (PyObject * object , PyObject * offset , PyObject * value ) {
342
344
WriteCharMember (object , offset , value );
343
345
}
344
346
345
- void WriteUByteMember (PyObject * object , int offset , PyObject * value ) {
347
+ void WriteUByteMember (PyObject * object , PyObject * offset , PyObject * value ) {
346
348
WriteCharMember (object , offset , value );
347
349
}
348
350
349
- void WriteUShortMember (PyObject * object , int offset , unsigned short value ) {
350
- WriteMember (object , offset , value , unsigned short );
351
+ void WriteUShortMember (PyObject * object , PyObject * offset , PyObject * value ) {
352
+ WriteMember (object , offset , PyLong_AsUnsignedLong ( value ) , unsigned short );
351
353
}
352
354
353
- void WriteUIntMember (PyObject * object , int offset , unsigned int value ) {
354
- WriteMember (object , offset , value , unsigned int );
355
+ void WriteUIntMember (PyObject * object , PyObject * offset , PyObject * value ) {
356
+ WriteMember (object , offset , PyLong_AsUnsignedLong ( value ) , unsigned int );
355
357
}
356
358
357
- void WriteULongMember (PyObject * object , int offset , unsigned long value ) {
358
- WriteMember (object , offset , value , unsigned long );
359
+ void WriteULongMember (PyObject * object , PyObject * offset , PyObject * value ) {
360
+ WriteMember (object , offset , PyLong_AsUnsignedLong ( value ) , unsigned long );
359
361
}
360
362
361
- void WriteBoolMember (PyObject * object , int offset , PyObject * value ) {
363
+ void WriteBoolMember (PyObject * object , PyObject * offset , PyObject * value ) {
362
364
WriteMember (object , offset , truffle_invoke (to_java (value ), "__bool__" ) == Py_True ? (char )1 : (char )0 , char );
363
365
}
364
366
365
- void WriteObjectExMember (PyObject * object , int offset , PyObject * value ) {
367
+ void WriteObjectExMember (PyObject * object , PyObject * offset , PyObject * value ) {
366
368
if (value == NULL ) {
367
369
PyErr_SetString (PyExc_ValueError , "member must not be NULL" );
368
370
} else {
369
371
WriteMember (object , offset , value , PyObject * );
370
372
}
371
373
}
372
374
373
- void WriteLongLongMember (PyObject * object , int offset , long long value ) {
375
+ void WriteLongLongMember (PyObject * object , PyObject * offset , PyObject * value ) {
374
376
WriteMember (object , offset , value , long long );
375
377
}
376
378
377
- void WriteULongLongMember (PyObject * object , int offset , unsigned long long value ) {
379
+ void WriteULongLongMember (PyObject * object , PyObject * offset , PyObject * value ) {
378
380
WriteMember (object , offset , value , unsigned long long);
379
381
}
380
382
381
- void WritePySSizeT (PyObject * object , int offset , Py_ssize_t value ) {
383
+ void WritePySSizeT (PyObject * object , PyObject * offset , PyObject * value ) {
382
384
WriteMember (object , offset , value , Py_ssize_t );
383
385
}
384
386
0 commit comments