@@ -205,7 +205,28 @@ void PyObject_GC_Del(void *tp) {
205
205
PyObject_Free (tp );
206
206
}
207
207
208
- #define IS_SINGLE_ARG (_fmt ) ((_fmt[0]) != '\0' && (_fmt[1]) == '\0')
208
+ inline int is_single_arg (const char * fmt ) {
209
+ if (fmt [0 ] == 0 ) {
210
+ return 0 ;
211
+ }
212
+ if (fmt [1 ] == 0 ) {
213
+ return 1 ;
214
+ }
215
+ if (fmt [2 ] != 0 ) {
216
+ return 0 ;
217
+ }
218
+ switch (fmt [1 ]) {
219
+ case '#' :
220
+ case '&' :
221
+ case ',' :
222
+ case ':' :
223
+ case ' ' :
224
+ case '\t' :
225
+ return 1 ;
226
+ default :
227
+ return 0 ;
228
+ }
229
+ }
209
230
210
231
PyObject * PyObject_Call (PyObject * callable , PyObject * args , PyObject * kwargs ) {
211
232
return Graal_PyTruffleObject_Call1 (callable , args , kwargs , 0 );
@@ -228,10 +249,10 @@ PyObject* PyObject_CallFunction(PyObject* callable, const char* fmt, ...) {
228
249
PyObject * args = Py_VaBuildValue (fmt , va );
229
250
va_end (va );
230
251
// A special case in CPython for backwards compatibility
231
- if (IS_SINGLE_ARG (fmt ) && PyTuple_Check (args )) {
252
+ if (is_single_arg (fmt ) && PyTuple_Check (args )) {
232
253
return Graal_PyTruffleObject_Call1 (callable , args , NULL , 0 );
233
254
}
234
- return Graal_PyTruffleObject_Call1 (callable , args , NULL , IS_SINGLE_ARG (fmt ));
255
+ return Graal_PyTruffleObject_Call1 (callable , args , NULL , is_single_arg (fmt ));
235
256
}
236
257
237
258
PyObject * _PyObject_CallFunction_SizeT (PyObject * callable , const char * fmt , ...) {
@@ -240,13 +261,13 @@ PyObject* _PyObject_CallFunction_SizeT(PyObject* callable, const char* fmt, ...)
240
261
}
241
262
va_list va ;
242
263
va_start (va , fmt );
243
- PyObject * args = Py_VaBuildValue (fmt , va );
264
+ PyObject * args = _Py_VaBuildValue_SizeT (fmt , va );
244
265
va_end (va );
245
266
// A special case in CPython for backwards compatibility
246
- if (IS_SINGLE_ARG (fmt ) && PyTuple_Check (args )) {
267
+ if (is_single_arg (fmt ) && PyTuple_Check (args )) {
247
268
return Graal_PyTruffleObject_Call1 (callable , args , NULL , 0 );
248
269
}
249
- return Graal_PyTruffleObject_Call1 (callable , args , NULL , IS_SINGLE_ARG (fmt ));
270
+ return Graal_PyTruffleObject_Call1 (callable , args , NULL , is_single_arg (fmt ));
250
271
}
251
272
252
273
PyObject * PyObject_CallMethod (PyObject * object , const char * method , const char * fmt , ...) {
@@ -258,7 +279,7 @@ PyObject* PyObject_CallMethod(PyObject* object, const char* method, const char*
258
279
va_start (va , fmt );
259
280
args = Py_VaBuildValue (fmt , va );
260
281
va_end (va );
261
- return Graal_PyTruffleObject_CallMethod1 (object , truffleString (method ), args , IS_SINGLE_ARG (fmt ));
282
+ return Graal_PyTruffleObject_CallMethod1 (object , truffleString (method ), args , is_single_arg (fmt ));
262
283
}
263
284
264
285
PyObject * _PyObject_CallMethod_SizeT (PyObject * object , const char * method , const char * fmt , ...) {
@@ -268,7 +289,7 @@ PyObject* _PyObject_CallMethod_SizeT(PyObject* object, const char* method, const
268
289
}
269
290
va_list va ;
270
291
va_start (va , fmt );
271
- args = Py_VaBuildValue (fmt , va );
292
+ args = _Py_VaBuildValue_SizeT (fmt , va );
272
293
va_end (va );
273
- return Graal_PyTruffleObject_CallMethod1 (object , truffleString (method ), args , IS_SINGLE_ARG (fmt ));
294
+ return Graal_PyTruffleObject_CallMethod1 (object , truffleString (method ), args , is_single_arg (fmt ));
274
295
}
0 commit comments