Skip to content

Commit 3c1ff0f

Browse files
timfelfangerer
authored andcommitted
update CallWithPolyglotArgs macro to use va_list always
1 parent c25750c commit 3c1ff0f

File tree

7 files changed

+16
-42
lines changed

7 files changed

+16
-42
lines changed

graalpython/com.oracle.graal.python.cext/src/_warnings.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,12 +70,12 @@ int PyErr_WarnEx(PyObject *category, const char *text, Py_ssize_t stack_level) {
7070
}
7171

7272
NO_INLINE int PyErr_WarnFormat(PyObject *category, Py_ssize_t stack_level, const char *format, ...) {
73-
CallWithPolyglotArgs(PyObject* result, format, 3, PyTruffle_Unicode_FromFormat, format);
73+
CallWithPolyglotArgs(PyObject* result, format, PyTruffle_Unicode_FromFormat, format);
7474
return warn_unicode(category, result, stack_level, Py_None);
7575
}
7676

7777
int PyErr_ResourceWarning(PyObject *source, Py_ssize_t stack_level, const char *format, ...) {
78-
CallWithPolyglotArgs(PyObject* result, format, 3, PyTruffle_Unicode_FromFormat, format);
78+
CallWithPolyglotArgs(PyObject* result, format, PyTruffle_Unicode_FromFormat, format);
7979
return warn_unicode(PyExc_ResourceWarning, result, stack_level, source);
8080
}
8181

graalpython/com.oracle.graal.python.cext/src/capi.h

Lines changed: 4 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -379,8 +379,8 @@ extern PyObject* wrapped_null;
379379
/* internal functions to avoid unnecessary managed <-> native conversions */
380380

381381
/* STR */
382-
__attribute__((always_inline)) PyObject* PyTruffle_Unicode_FromFormat(const char *fmt, va_list va, void **args, int argc);
383-
__attribute__((always_inline)) PyObject* PyTruffle_Tuple_Pack(int dummy, va_list va, void **args, int argc);
382+
__attribute__((always_inline)) PyObject* PyTruffle_Unicode_FromFormat(const char *fmt, va_list va);
383+
__attribute__((always_inline)) PyObject* PyTruffle_Tuple_Pack(int dummy, va_list va);
384384

385385
/* BYTES, BYTEARRAY */
386386
int bytes_buffer_getbuffer(PyBytesObject *self, Py_buffer *view, int flags);
@@ -392,37 +392,11 @@ int bytes_copy2mem(char* target, char* source, size_t nbytes);
392392
/* MEMORYVIEW, BUFFERDECORATOR */
393393
int bufferdecorator_getbuffer(PyBufferDecorator *self, Py_buffer *view, int flags);
394394

395-
#if 1
396-
/*
397-
* (tfel): On native Sulong, using va_list will force all arguments to native
398-
* memory, which hinders escape analysis and PE in a big way. To avoid this,
399-
* when we have function called with var args (rather than already with a
400-
* va_list), we allocate a managed array of void*, fill it with the arguments,
401-
* and pass that one on. In the target functions, we use the macros below to
402-
* access the variable arguments part depending on whether it is a va_list or a
403-
* managed void* array. The assumption is that once everything is compiled
404-
* together, the managed array with arguments will be escape analyzed away.
405-
*/
406-
#define CallWithPolyglotArgs(result, last, off, function, ...) \
407-
va_list __va_list; \
408-
int __poly_argc = polyglot_get_arg_count(); \
409-
int __poly_args_s = sizeof(void*) * (__poly_argc - off); \
410-
void **__poly_args = truffle_managed_malloc(__poly_args_s); \
411-
for (int i = off; i < __poly_argc; i++) { \
412-
__poly_args[i - off] = polyglot_get_arg(i); \
413-
} \
414-
result = function(__VA_ARGS__, __va_list, __poly_args, __poly_argc)
415-
#else
416-
/*
417-
* (tfel): Just skip the optimization with using a managed malloc and use
418-
* va_list always.
419-
*/
420-
#define CallWithPolyglotArgs(result, last, off, function, ...) \
395+
#define CallWithPolyglotArgs(result, last, function, ...) \
421396
va_list __poly_args; \
422397
va_start(__poly_args, last); \
423-
result = function(__VA_ARGS__, __poly_args, NULL, 0); \
398+
result = function(__VA_ARGS__, __poly_args); \
424399
va_end(__poly_args)
425-
#endif
426400

427401
typedef PyObject* PyObjectPtr;
428402
POLYGLOT_DECLARE_TYPE(PyObjectPtr);

graalpython/com.oracle.graal.python.cext/src/errors.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,7 @@ int PyErr_ExceptionMatches(PyObject *exc) {
161161

162162
NO_INLINE
163163
PyObject* PyErr_Format(PyObject* exception, const char* fmt, ...) {
164-
CallWithPolyglotArgs(PyObject* formatted_msg, fmt, 2, PyTruffle_Unicode_FromFormat, fmt);
164+
CallWithPolyglotArgs(PyObject* formatted_msg, fmt, PyTruffle_Unicode_FromFormat, fmt);
165165
UPCALL_CEXT_VOID(_jls_PyErr_CreateAndSetException, native_to_java(exception), native_to_java(formatted_msg));
166166
return NULL;
167167
}

graalpython/com.oracle.graal.python.cext/src/modsupport.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -273,7 +273,7 @@ typedef struct _build_stack {
273273
struct _build_stack* prev;
274274
} build_stack;
275275

276-
MUST_INLINE static PyObject* _PyTruffle_BuildValue(const char* format, va_list va, void** poly_args, int argc) {
276+
MUST_INLINE static PyObject* _PyTruffle_BuildValue(const char* format, va_list va) {
277277
PyObject* (*converter)(void*) = NULL;
278278
int offset = 0;
279279
char argchar[2] = {'\0'};
@@ -482,18 +482,18 @@ PyObject* Py_VaBuildValue(const char *format, va_list va) {
482482
}
483483

484484
PyObject* _Py_VaBuildValue_SizeT(const char *format, va_list va) {
485-
return _PyTruffle_BuildValue(format, va, NULL, 0);
485+
return _PyTruffle_BuildValue(format, va);
486486
}
487487

488488
NO_INLINE
489489
PyObject* Py_BuildValue(const char *format, ...) {
490-
CallWithPolyglotArgs(PyObject* result, format, 1, _PyTruffle_BuildValue, format);
490+
CallWithPolyglotArgs(PyObject* result, format, _PyTruffle_BuildValue, format);
491491
return result;
492492
}
493493

494494
NO_INLINE
495495
PyObject* _Py_BuildValue_SizeT(const char *format, ...) {
496-
CallWithPolyglotArgs(PyObject* result, format, 1, _PyTruffle_BuildValue, format);
496+
CallWithPolyglotArgs(PyObject* result, format, _PyTruffle_BuildValue, format);
497497
return result;
498498
}
499499

graalpython/com.oracle.graal.python.cext/src/object.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ PyObject* PyObject_CallMethod(PyObject* object, const char* method, const char*
255255
NO_INLINE
256256
PyObject* PyObject_CallMethodObjArgs(PyObject *callable, PyObject *name, ...) {
257257
PyObject* args;
258-
CallWithPolyglotArgs(args, name, 2, PyTruffle_Tuple_Pack, 0);
258+
CallWithPolyglotArgs(args, name, PyTruffle_Tuple_Pack, 0);
259259
return UPCALL_CEXT_O(_jls_PyObject_CallMethod, native_to_java(callable), native_to_java(name), native_to_java(args));
260260
}
261261

graalpython/com.oracle.graal.python.cext/src/tupleobject.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ PyObject* PyTuple_Pack(Py_ssize_t n, ...) {
9090
}
9191

9292
MUST_INLINE
93-
PyObject* PyTruffle_Tuple_Pack(int dummy, va_list vlist, void **argv, int argc) {
93+
PyObject* PyTruffle_Tuple_Pack(int dummy, va_list vlist) {
9494
PyObject *result = PyTuple_New(argc);
9595
for (int i = 0; i < argc; i++) {
9696
PyObject *o = (PyObject*) argv[i];

graalpython/com.oracle.graal.python.cext/src/unicodeobject.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -230,7 +230,7 @@ PyObject * PyUnicode_FromStringAndSize(const char *u, Py_ssize_t size) {
230230

231231
#define AS_I64(__arg__) (polyglot_fits_in_i64((__arg__)) ? polyglot_as_i64((__arg__)) : (int64_t)(__arg__))
232232

233-
MUST_INLINE PyObject* PyTruffle_Unicode_FromFormat(const char *fmt, va_list va, void **args, int argc) {
233+
MUST_INLINE PyObject* PyTruffle_Unicode_FromFormat(const char *fmt, va_list va) {
234234
size_t fmt_size = strlen(fmt) + 1;
235235
char* fmtcpy = strdup(fmt);
236236
char* c = fmtcpy;
@@ -320,12 +320,12 @@ MUST_INLINE PyObject* PyTruffle_Unicode_FromFormat(const char *fmt, va_list va,
320320
}
321321

322322
PyObject* PyUnicode_FromFormatV(const char* format, va_list va) {
323-
return PyTruffle_Unicode_FromFormat(format, va, NULL, 0);
323+
return PyTruffle_Unicode_FromFormat(format, va);
324324
}
325325

326326
NO_INLINE
327327
PyObject* PyUnicode_FromFormat(const char* format, ...) {
328-
CallWithPolyglotArgs(PyObject* result, format, 1, PyTruffle_Unicode_FromFormat, format);
328+
CallWithPolyglotArgs(PyObject* result, format, PyTruffle_Unicode_FromFormat, format);
329329
return result;
330330
}
331331

0 commit comments

Comments
 (0)