@@ -53,13 +53,15 @@ PyObject* PyTruffle_GetArg(positional_argstack* p, PyObject* kwds, char** kwdnam
53
53
if (p -> argnum < l ) {
54
54
out = PyTuple_GetItem (p -> argv , p -> argnum );
55
55
}
56
- } else if (out == NULL && p -> prev == NULL && kwdnames != NULL ) { // only the bottom argstack can have keyword names
56
+ }
57
+ if (out == NULL && p -> prev == NULL && kwdnames != NULL ) { // only the bottom argstack can have keyword names
57
58
const char * kwdname = kwdnames [p -> argnum ];
58
59
if (kwdname != NULL ) {
59
- out = PyDict_GetItem (kwds , to_sulong (truffle_read_string (kwdname )));
60
+ PyObject * nameobj = to_sulong (truffle_read_string (kwdname ));
61
+ out = PyDict_GetItem (kwds , nameobj );
60
62
}
61
63
}
62
- p -> argnum ++ ;
64
+ ( p -> argnum ) ++ ;
63
65
return out ;
64
66
}
65
67
@@ -239,11 +241,15 @@ int PyTruffle_Arg_ParseTupleAndKeywords(PyObject *argv, PyObject *kwds, const ch
239
241
PyTruffle_WriteOut (output_idx , unsigned long , as_long (arg ));
240
242
break ;
241
243
case 'L' :
242
- PyErr_Format (PyExc_TypeError , "long long argument parsing not yet supported" );
243
- return 0 ;
244
+ arg = PyTruffle_GetArg (v , kwds , kwdnames , rest_keywords_only );
245
+ PyTruffle_SkipOptionalArg (output_idx , arg , rest_optional );
246
+ PyTruffle_WriteOut (output_idx , long long , as_long_long (arg ));
247
+ break ;
244
248
case 'K' :
245
- PyErr_Format (PyExc_TypeError , "long long argument parsing not yet supported" );
246
- return 0 ;
249
+ arg = PyTruffle_GetArg (v , kwds , kwdnames , rest_keywords_only );
250
+ PyTruffle_SkipOptionalArg (output_idx , arg , rest_optional );
251
+ PyTruffle_WriteOut (output_idx , unsigned long long, as_unsigned_long_long (arg ));
252
+ break ;
247
253
case 'n' :
248
254
arg = PyTruffle_GetArg (v , kwds , kwdnames , rest_keywords_only );
249
255
PyTruffle_SkipOptionalArg (output_idx , arg , rest_optional );
@@ -253,11 +259,11 @@ int PyTruffle_Arg_ParseTupleAndKeywords(PyObject *argv, PyObject *kwds, const ch
253
259
arg = PyTruffle_GetArg (v , kwds , kwdnames , rest_keywords_only );
254
260
PyTruffle_SkipOptionalArg (output_idx , arg , rest_optional );
255
261
if (!(PyBytes_Check (arg ) || PyByteArray_Check (arg ))) {
256
- PyErr_Format (PyExc_TypeError , "expted bytes or bytearray, got %R" , Py_TYPE (arg ));
262
+ PyErr_Format (PyExc_TypeError , "expected bytes or bytearray, got %R" , Py_TYPE (arg ));
257
263
return 0 ;
258
264
}
259
265
if (Py_SIZE (arg ) != 1 ) {
260
- PyErr_Format (PyExc_TypeError , "expted bytes or bytearray of length 1, was length %d" , Py_SIZE (arg ));
266
+ PyErr_Format (PyExc_TypeError , "expected bytes or bytearray of length 1, was length %d" , Py_SIZE (arg ));
261
267
return 0 ;
262
268
}
263
269
PyTruffle_WriteOut (output_idx , char , as_char (polyglot_invoke (to_java (arg ), "__getitem__" , 0 )));
@@ -266,11 +272,11 @@ int PyTruffle_Arg_ParseTupleAndKeywords(PyObject *argv, PyObject *kwds, const ch
266
272
arg = PyTruffle_GetArg (v , kwds , kwdnames , rest_keywords_only );
267
273
PyTruffle_SkipOptionalArg (output_idx , arg , rest_optional );
268
274
if (!PyUnicode_Check (arg )) {
269
- PyErr_Format (PyExc_TypeError , "expted bytes or bytearray, got %R" , Py_TYPE (arg ));
275
+ PyErr_Format (PyExc_TypeError , "expected bytes or bytearray, got %R" , Py_TYPE (arg ));
270
276
return 0 ;
271
277
}
272
278
if (Py_SIZE (arg ) != 1 ) {
273
- PyErr_Format (PyExc_TypeError , "expted str of length 1, was length %d" , Py_SIZE (arg ));
279
+ PyErr_Format (PyExc_TypeError , "expected str of length 1, was length %d" , Py_SIZE (arg ));
274
280
return 0 ;
275
281
}
276
282
PyTruffle_WriteOut (output_idx , int , as_int (polyglot_invoke (to_java (arg ), "__getitem__" , 0 )));
@@ -292,9 +298,9 @@ int PyTruffle_Arg_ParseTupleAndKeywords(PyObject *argv, PyObject *kwds, const ch
292
298
arg = PyTruffle_GetArg (v , kwds , kwdnames , rest_keywords_only );
293
299
if (format [format_idx + 1 ] == '!' ) {
294
300
format_idx ++ ;
301
+ PyTruffle_SkipOptionalArg (output_idx , arg , rest_optional );
295
302
PyTypeObject * typeobject = (PyTypeObject * )PyTruffle_ArgN (output_idx );
296
303
output_idx ++ ;
297
- PyTruffle_SkipOptionalArg (output_idx , arg , rest_optional );
298
304
if (!PyType_IsSubtype (Py_TYPE (arg ), typeobject )) {
299
305
PyErr_Format (PyExc_TypeError , "expected object of type %R, got %R" , typeobject , Py_TYPE (arg ));
300
306
return 0 ;
@@ -304,9 +310,9 @@ int PyTruffle_Arg_ParseTupleAndKeywords(PyObject *argv, PyObject *kwds, const ch
304
310
format_idx ++ ;
305
311
void * (* converter )(PyObject * ,void * ) = PyTruffle_ArgN (output_idx );
306
312
output_idx ++ ;
313
+ PyTruffle_SkipOptionalArg (output_idx , arg , rest_optional );
307
314
void * output = PyTruffle_ArgN (output_idx );
308
315
output_idx ++ ;
309
- PyTruffle_SkipOptionalArg (output_idx , arg , rest_optional );
310
316
int status = converter (arg , output );
311
317
if (!status ) {
312
318
if (!PyErr_Occurred ()) {
0 commit comments