Skip to content

Commit c05b20c

Browse files
committed
Increase arity of 'PyUnicode_FromFormat'.
1 parent d781b9b commit c05b20c

File tree

4 files changed

+48
-16
lines changed

4 files changed

+48
-16
lines changed

graalpython/com.oracle.graal.python.cext/include/Python.h

Lines changed: 24 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -202,19 +202,30 @@ extern int PyTruffle_Arg_ParseTupleAndKeywords(PyObject *argv, PyObject *kwds, c
202202
#endif
203203
#define PyArg_Parse(ARGV, FORMAT, ...) PyArg_ParseTupleAndKeywords(ARGV, PyDict_New(), FORMAT, (char*[]) { NULL }, __VA_ARGS__)
204204

205-
extern PyObject* PyTruffle_Unicode_FromFormat(const char* fmt, int s, void* v0, void* v1, void* v2, void* v3, void* v4, void* v5, void* v6, void* v7, void* v8, void* v9);
206-
#define PyTruffle_Unicode_FromFormat_1(FORMAT, V1) PyTruffle_Unicode_FromFormat(FORMAT, 1, (void*)(V1), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
207-
#define PyTruffle_Unicode_FromFormat_2(FORMAT, V1, V2) PyTruffle_Unicode_FromFormat(FORMAT, 2, (void*)(V1), (void*)(V2), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
208-
#define PyTruffle_Unicode_FromFormat_3(FORMAT, V1, V2, V3) PyTruffle_Unicode_FromFormat(FORMAT, 3, (void*)(V1), (void*)(V2), (void*)(V3), NULL, NULL, NULL, NULL, NULL, NULL, NULL)
209-
#define PyTruffle_Unicode_FromFormat_4(FORMAT, V1, V2, V3, V4) PyTruffle_Unicode_FromFormat(FORMAT, 4, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), NULL, NULL, NULL, NULL, NULL, NULL)
210-
#define PyTruffle_Unicode_FromFormat_5(FORMAT, V1, V2, V3, V4, V5) PyTruffle_Unicode_FromFormat(FORMAT, 5, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), NULL, NULL, NULL, NULL, NULL)
211-
#define PyTruffle_Unicode_FromFormat_6(FORMAT, V1, V2, V3, V4, V5, V6) PyTruffle_Unicode_FromFormat(FORMAT, 6, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), (void*)(V6), NULL, NULL, NULL, NULL)
212-
#define PyTruffle_Unicode_FromFormat_7(FORMAT, V1, V2, V3, V4, V5, V6, V7) PyTruffle_Unicode_FromFormat(FORMAT, 7, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), (void*)(V6), (void*)(V7), NULL, NULL, NULL)
213-
#define PyTruffle_Unicode_FromFormat_8(FORMAT, V1, V2, V3, V4, V5, V6, V7, V8) PyTruffle_Unicode_FromFormat(FORMAT, 8, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), (void*)(V6), (void*)(V7), (void*)(V8), NULL, NULL)
214-
#define PyTruffle_Unicode_FromFormat_9(FORMAT, V1, V2, V3, V4, V5, V6, V7, V8, V9) PyTruffle_Unicode_FromFormat(FORMAT, 9, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), (void*)(V6), (void*)(V7), (void*)(V8), (void*)(V9), NULL)
215-
#define PyTruffle_Unicode_FromFormat_10(FORMAT, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10) PyTruffle_Unicode_FromFormat(FORMAT, 10, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), (void*)(V6), (void*)(V7), (void*)(V8), (void*)(V9), (void*)V10)
216-
#define ARG_PARSE_UNICODE_FORMAT_IMPL(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, NAME, ...) NAME
217-
#define PyUnicode_FromFormat(FORMAT, ...) ARG_PARSE_UNICODE_FORMAT_IMPL(__VA_ARGS__, PyTruffle_Unicode_FromFormat_10, PyTruffle_Unicode_FromFormat_9, PyTruffle_Unicode_FromFormat_8, PyTruffle_Unicode_FromFormat_7, PyTruffle_Unicode_FromFormat_6, PyTruffle_Unicode_FromFormat_5, PyTruffle_Unicode_FromFormat_4, PyTruffle_Unicode_FromFormat_3, PyTruffle_Unicode_FromFormat_2, PyTruffle_Unicode_FromFormat_1)(FORMAT, __VA_ARGS__)
205+
extern PyObject * PyTruffle_Unicode_FromFormat(const char *fmt, int s, void* v0, void* v1, void* v2, void* v3, void* v4, void* v5, void* v6, void* v7, void* v8, void* v9, void* v10, void* v11, void* v12, void* v13, void* v14, void* v15, void* v16, void* v17, void* v18, void* v19);
206+
#define PyTruffle_Unicode_FromFormat_0(F1) PyTruffle_Unicode_FromFormat(F1, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
207+
#define PyTruffle_Unicode_FromFormat_1(F1, V1) PyTruffle_Unicode_FromFormat(F1, 1, (void*)(V1), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
208+
#define PyTruffle_Unicode_FromFormat_2(F1, V1, V2) PyTruffle_Unicode_FromFormat(F1, 2, (void*)(V1), (void*)(V2), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
209+
#define PyTruffle_Unicode_FromFormat_3(F1, V1, V2, V3) PyTruffle_Unicode_FromFormat(F1, 3, (void*)(V1), (void*)(V2), (void*)(V3), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
210+
#define PyTruffle_Unicode_FromFormat_4(F1, V1, V2, V3, V4) PyTruffle_Unicode_FromFormat(F1, 4, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
211+
#define PyTruffle_Unicode_FromFormat_5(F1, V1, V2, V3, V4, V5) PyTruffle_Unicode_FromFormat(F1, 5, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
212+
#define PyTruffle_Unicode_FromFormat_6(F1, V1, V2, V3, V4, V5, V6) PyTruffle_Unicode_FromFormat(F1, 6, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), (void*)(V6), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
213+
#define PyTruffle_Unicode_FromFormat_7(F1, V1, V2, V3, V4, V5, V6, V7) PyTruffle_Unicode_FromFormat(F1, 7, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), (void*)(V6), (void*)(V7), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
214+
#define PyTruffle_Unicode_FromFormat_8(F1, V1, V2, V3, V4, V5, V6, V7, V8) PyTruffle_Unicode_FromFormat(F1, 8, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), (void*)(V6), (void*)(V7), (void*)(V8), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
215+
#define PyTruffle_Unicode_FromFormat_9(F1, V1, V2, V3, V4, V5, V6, V7, V8, V9) PyTruffle_Unicode_FromFormat(F1, 9, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), (void*)(V6), (void*)(V7), (void*)(V8), (void*)(V9), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
216+
#define PyTruffle_Unicode_FromFormat_10(F1, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10) PyTruffle_Unicode_FromFormat(F1, 10, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), (void*)(V6), (void*)(V7), (void*)(V8), (void*)(V9), (void*)(V10), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
217+
#define PyTruffle_Unicode_FromFormat_11(F1, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11) PyTruffle_Unicode_FromFormat(F1, 11, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), (void*)(V6), (void*)(V7), (void*)(V8), (void*)(V9), (void*)(V10), (void*)(V11), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
218+
#define PyTruffle_Unicode_FromFormat_12(F1, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12) PyTruffle_Unicode_FromFormat(F1, 12, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), (void*)(V6), (void*)(V7), (void*)(V8), (void*)(V9), (void*)(V10), (void*)(V11), (void*)(V12), NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
219+
#define PyTruffle_Unicode_FromFormat_13(F1, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13) PyTruffle_Unicode_FromFormat(F1, 13, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), (void*)(V6), (void*)(V7), (void*)(V8), (void*)(V9), (void*)(V10), (void*)(V11), (void*)(V12), (void*)(V13), NULL, NULL, NULL, NULL, NULL, NULL, NULL)
220+
#define PyTruffle_Unicode_FromFormat_14(F1, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14) PyTruffle_Unicode_FromFormat(F1, 14, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), (void*)(V6), (void*)(V7), (void*)(V8), (void*)(V9), (void*)(V10), (void*)(V11), (void*)(V12), (void*)(V13), (void*)(V14), NULL, NULL, NULL, NULL, NULL, NULL)
221+
#define PyTruffle_Unicode_FromFormat_15(F1, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15) PyTruffle_Unicode_FromFormat(F1, 15, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), (void*)(V6), (void*)(V7), (void*)(V8), (void*)(V9), (void*)(V10), (void*)(V11), (void*)(V12), (void*)(V13), (void*)(V14), (void*)(V15), NULL, NULL, NULL, NULL, NULL)
222+
#define PyTruffle_Unicode_FromFormat_16(F1, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16) PyTruffle_Unicode_FromFormat(F1, 16, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), (void*)(V6), (void*)(V7), (void*)(V8), (void*)(V9), (void*)(V10), (void*)(V11), (void*)(V12), (void*)(V13), (void*)(V14), (void*)(V15), (void*)(V16), NULL, NULL, NULL, NULL)
223+
#define PyTruffle_Unicode_FromFormat_17(F1, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17) PyTruffle_Unicode_FromFormat(F1, 17, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), (void*)(V6), (void*)(V7), (void*)(V8), (void*)(V9), (void*)(V10), (void*)(V11), (void*)(V12), (void*)(V13), (void*)(V14), (void*)(V15), (void*)(V16), (void*)(V17), NULL, NULL, NULL)
224+
#define PyTruffle_Unicode_FromFormat_18(F1, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18) PyTruffle_Unicode_FromFormat(F1, 18, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), (void*)(V6), (void*)(V7), (void*)(V8), (void*)(V9), (void*)(V10), (void*)(V11), (void*)(V12), (void*)(V13), (void*)(V14), (void*)(V15), (void*)(V16), (void*)(V17), (void*)(V18), NULL, NULL)
225+
#define PyTruffle_Unicode_FromFormat_19(F1, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19) PyTruffle_Unicode_FromFormat(F1, 19, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), (void*)(V6), (void*)(V7), (void*)(V8), (void*)(V9), (void*)(V10), (void*)(V11), (void*)(V12), (void*)(V13), (void*)(V14), (void*)(V15), (void*)(V16), (void*)(V17), (void*)(V18), (void*)(V19), NULL)
226+
#define PyTruffle_Unicode_FromFormat_20(F1, V1, V2, V3, V4, V5, V6, V7, V8, V9, V10, V11, V12, V13, V14, V15, V16, V17, V18, V19, V20) PyTruffle_Unicode_FromFormat(F1, 20, (void*)(V1), (void*)(V2), (void*)(V3), (void*)(V4), (void*)(V5), (void*)(V6), (void*)(V7), (void*)(V8), (void*)(V9), (void*)(V10), (void*)(V11), (void*)(V12), (void*)(V13), (void*)(V14), (void*)(V15), (void*)(V16), (void*)(V17), (void*)(V18), (void*)(V19), (void*)(V20))
227+
#define ARG_PARSE_PyUnicode_FromFormat_IMPL(DUMMY, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, NAME, ...) NAME
228+
#define PyUnicode_FromFormat(F1, ...) ARG_PARSE_PyUnicode_FromFormat_IMPL(NULL, ##__VA_ARGS__, PyTruffle_Unicode_FromFormat_20, PyTruffle_Unicode_FromFormat_19, PyTruffle_Unicode_FromFormat_18, PyTruffle_Unicode_FromFormat_17, PyTruffle_Unicode_FromFormat_16, PyTruffle_Unicode_FromFormat_15, PyTruffle_Unicode_FromFormat_14, PyTruffle_Unicode_FromFormat_13, PyTruffle_Unicode_FromFormat_12, PyTruffle_Unicode_FromFormat_11, PyTruffle_Unicode_FromFormat_10, PyTruffle_Unicode_FromFormat_9, PyTruffle_Unicode_FromFormat_8, PyTruffle_Unicode_FromFormat_7, PyTruffle_Unicode_FromFormat_6, PyTruffle_Unicode_FromFormat_5, PyTruffle_Unicode_FromFormat_4, PyTruffle_Unicode_FromFormat_3, PyTruffle_Unicode_FromFormat_2, PyTruffle_Unicode_FromFormat_1, PyTruffle_Unicode_FromFormat_0)(F1, ## __VA_ARGS__)
218229

219230
extern PyObject* PyTruffle_Err_Format(PyObject* exception, const char* fmt, int s, void* v0, void* v1, void* v2, void* v3, void* v4, void* v5, void* v6, void* v7, void* v8, void* v9);
220231
#define PyTruffle_Err_Format_0(EXC, FORMAT) PyTruffle_Err_Format(EXC, FORMAT, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)

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

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

151151
PyObject* PyTruffle_Err_Format(PyObject* exception, const char* fmt, int s, void* v0, void* v1, void* v2, void* v3, void* v4, void* v5, void* v6, void* v7, void* v8, void* v9) {
152-
PyObject *formatted_msg = PyTruffle_Unicode_FromFormat(fmt, s, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9);
152+
PyObject *formatted_msg = PyTruffle_Unicode_FromFormat(fmt, s, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
153153
truffle_invoke(PY_TRUFFLE_CEXT, "PyErr_CreateAndSetException", to_java(exception), to_java(formatted_msg));
154154
return NULL;
155155
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ PyObject * PyUnicode_FromStringAndSize(const char *u, Py_ssize_t size) {
6060
return to_sulong(truffle_invoke(PY_TRUFFLE_CEXT, "PyUnicode_FromString", truffle_read_n_string(u, size)));
6161
}
6262

63-
PyObject* PyTruffle_Unicode_FromFormat(const char* fmt, int s, void* v0, void* v1, void* v2, void* v3, void* v4, void* v5, void* v6, void* v7, void* v8, void* v9) {
63+
PyObject* PyTruffle_Unicode_FromFormat(const char* fmt, int s, void* v0, void* v1, void* v2, void* v3, void* v4, void* v5, void* v6, void* v7, void* v8, void* v9, void* v10, void* v11, void* v12, void* v13, void* v14, void* v15, void* v16, void* v17, void* v18, void* v19) {
6464
char** allocated_strings = calloc(sizeof(char*), s);
6565
# define ASSIGN(n, value) \
6666
switch(n) { \

graalpython/com.oracle.graal.python.test/src/tests/cpyext/test_unicode.py

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,14 +103,35 @@ def compile_module(self, name):
103103
cmpfunc=unhandled_error_compare
104104
)
105105

106-
test_PyUnicode_FromFormat = CPyExtFunction(
106+
test_PyUnicode_FromFormat0 = CPyExtFunction(
107+
lambda args: args[0] % tuple(args[1:]),
108+
lambda: (
109+
("hello, world!",),
110+
),
111+
code="""PyObject* wrap_PyUnicode_FromFormat0(char* fmt) {
112+
return PyUnicode_FromFormat(fmt);
113+
}
114+
""",
115+
resultspec="O",
116+
argspec='s',
117+
arguments=["char* fmt"],
118+
callfunction="wrap_PyUnicode_FromFormat0",
119+
cmpfunc=unhandled_error_compare
120+
)
121+
122+
test_PyUnicode_FromFormat3 = CPyExtFunction(
107123
lambda args: args[0] % tuple(args[1:]),
108124
lambda: (
109125
("word0: %s; word1: %s; int: %d", "hello", "world", 1234),
110126
),
127+
code="""PyObject* wrap_PyUnicode_FromFormat3(char* fmt, char* arg0, char* arg1, int n) {
128+
return PyUnicode_FromFormat(fmt, arg0, arg1, n);
129+
}
130+
""",
111131
resultspec="O",
112132
argspec='sssi',
113133
arguments=["char* fmt", "char* arg0", "char* arg1", "int n"],
134+
callfunction="wrap_PyUnicode_FromFormat3",
114135
cmpfunc=unhandled_error_compare
115136
)
116137

0 commit comments

Comments
 (0)