| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -47,7 +47,16 @@ PyAPI_FUNC(int) PyArg_UnpackTuple(PyObject *, const char *, Py_ssize_t, Py_ssize | |||
| 47 | 47 | PyAPI_FUNC(PyObject *) Py_BuildValue(const char *, ...); | |
| 48 | 48 | PyAPI_FUNC(PyObject *) _Py_BuildValue_SizeT(const char *, ...); | |
| 49 | 49 | #endif | |
| 50 | + | ||
| 50 | 51 | #ifndef Py_LIMITED_API | |
| 52 | + PyAPI_FUNC(int) _PyArg_UnpackStack( | ||
| 53 | + PyObject **args, | ||
| 54 | + Py_ssize_t nargs, | ||
| 55 | + const char *name, | ||
| 56 | + Py_ssize_t min, | ||
| 57 | + Py_ssize_t max, | ||
| 58 | + ...); | ||
| 59 | + | ||
| 51 | 60 | PyAPI_FUNC(int) _PyArg_NoKeywords(const char *funcname, PyObject *kwargs); | |
| 52 | 61 | PyAPI_FUNC(int) _PyArg_NoStackKeywords(const char *funcname, PyObject *kwnames); | |
| 53 | 62 | PyAPI_FUNC(int) _PyArg_NoPositional(const char *funcname, PyObject *args); | |
@@ -56,6 +65,7 @@ PyAPI_FUNC(int) PyArg_VaParse(PyObject *, const char *, va_list); | |||
| 56 | 65 | PyAPI_FUNC(int) PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *, | |
| 57 | 66 | const char *, char **, va_list); | |
| 58 | 67 | #endif | |
| 68 | + | ||
| 59 | 69 | PyAPI_FUNC(PyObject *) Py_VaBuildValue(const char *, va_list); | |
| 60 | 70 | #ifndef Py_LIMITED_API | |
| 61 | 71 | PyAPI_FUNC(PyObject **) _Py_VaBuildStack( | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
@@ -2363,21 +2363,16 @@ skipitem(const char **p_format, va_list *p_va, int flags) | |||
| 2363 | 2363 | } | |
| 2364 | 2364 | ||
| 2365 | 2365 | ||
| 2366 | - int | ||
| 2367 | - PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, ...) | ||
| 2366 | + static int | ||
| 2367 | + PyArg_UnpackStack_impl(PyObject **args, Py_ssize_t l, const char *name, | ||
| 2368 | + Py_ssize_t min, Py_ssize_t max, va_list vargs) | ||
| 2368 | 2369 | { | |
| 2369 | - Py_ssize_t i, l; | ||
| 2370 | + Py_ssize_t i; | ||
| 2370 | 2371 | PyObject **o; | |
| 2371 | - va_list vargs; | ||
| 2372 | 2372 | ||
| 2373 | 2373 | assert(min >= 0); | |
| 2374 | 2374 | assert(min <= max); | |
| 2375 | - if (!PyTuple_Check(args)) { | ||
| 2376 | - PyErr_SetString(PyExc_SystemError, | ||
| 2377 | - "PyArg_UnpackTuple() argument list is not a tuple"); | ||
| 2378 | - return 0; | ||
| 2379 | - } | ||
| 2380 | - l = PyTuple_GET_SIZE(args); | ||
| 2375 | + | ||
| 2381 | 2376 | if (l < min) { | |
| 2382 | 2377 | if (name != NULL) | |
| 2383 | 2378 | PyErr_Format( | |
@@ -2392,8 +2387,11 @@ PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t m | |||
| 2392 | 2387 | (min == max ? "" : "at least "), min, l); | |
| 2393 | 2388 | return 0; | |
| 2394 | 2389 | } | |
| 2395 | - if (l == 0) | ||
| 2390 | + | ||
| 2391 | + if (l == 0) { | ||
| 2396 | 2392 | return 1; | |
| 2393 | + } | ||
| 2394 | + | ||
| 2397 | 2395 | if (l > max) { | |
| 2398 | 2396 | if (name != NULL) | |
| 2399 | 2397 | PyErr_Format( | |
@@ -2409,17 +2407,54 @@ PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t m | |||
| 2409 | 2407 | return 0; | |
| 2410 | 2408 | } | |
| 2411 | 2409 | ||
| 2410 | + for (i = 0; i < l; i++) { | ||
| 2411 | + o = va_arg(vargs, PyObject **); | ||
| 2412 | + *o = args[i]; | ||
| 2413 | + } | ||
| 2414 | + return 1; | ||
| 2415 | + } | ||
| 2416 | + | ||
| 2417 | + int | ||
| 2418 | + PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t max, ...) | ||
| 2419 | + { | ||
| 2420 | + PyObject **stack; | ||
| 2421 | + Py_ssize_t nargs; | ||
| 2422 | + int retval; | ||
| 2423 | + va_list vargs; | ||
| 2424 | + | ||
| 2425 | + if (!PyTuple_Check(args)) { | ||
| 2426 | + PyErr_SetString(PyExc_SystemError, | ||
| 2427 | + "PyArg_UnpackTuple() argument list is not a tuple"); | ||
| 2428 | + return 0; | ||
| 2429 | + } | ||
| 2430 | + stack = &PyTuple_GET_ITEM(args, 0); | ||
| 2431 | + nargs = PyTuple_GET_SIZE(args); | ||
| 2432 | + | ||
| 2412 | 2433 | #ifdef HAVE_STDARG_PROTOTYPES | |
| 2413 | 2434 | va_start(vargs, max); | |
| 2414 | 2435 | #else | |
| 2415 | 2436 | va_start(vargs); | |
| 2416 | 2437 | #endif | |
| 2417 | - for (i = 0; i < l; i++) { | ||
| 2418 | - o = va_arg(vargs, PyObject **); | ||
| 2419 | - *o = PyTuple_GET_ITEM(args, i); | ||
| 2420 | - } | ||
| 2438 | + retval = PyArg_UnpackStack_impl(stack, nargs, name, min, max, vargs); | ||
| 2421 | 2439 | va_end(vargs); | |
| 2422 | - return 1; | ||
| 2440 | + return retval; | ||
| 2441 | + } | ||
| 2442 | + | ||
| 2443 | + int | ||
| 2444 | + _PyArg_UnpackStack(PyObject **args, Py_ssize_t nargs, const char *name, | ||
| 2445 | + Py_ssize_t min, Py_ssize_t max, ...) | ||
| 2446 | + { | ||
| 2447 | + int retval; | ||
| 2448 | + va_list vargs; | ||
| 2449 | + | ||
| 2450 | + #ifdef HAVE_STDARG_PROTOTYPES | ||
| 2451 | + va_start(vargs, max); | ||
| 2452 | + #else | ||
| 2453 | + va_start(vargs); | ||
| 2454 | + #endif | ||
| 2455 | + retval = PyArg_UnpackStack_impl(args, nargs, name, min, max, vargs); | ||
| 2456 | + va_end(vargs); | ||
| 2457 | + return retval; | ||
| 2423 | 2458 | } | |
| 2424 | 2459 | ||
| 2425 | 2460 | ||
@@ -2431,8 +2466,9 @@ PyArg_UnpackTuple(PyObject *args, const char *name, Py_ssize_t min, Py_ssize_t m | |||
| 2431 | 2466 | int | |
| 2432 | 2467 | _PyArg_NoKeywords(const char *funcname, PyObject *kwargs) | |
| 2433 | 2468 | { | |
| 2434 | - if (kwargs == NULL) | ||
| 2469 | + if (kwargs == NULL) { | ||
| 2435 | 2470 | return 1; | |
| 2471 | + } | ||
| 2436 | 2472 | if (!PyDict_CheckExact(kwargs)) { | |
| 2437 | 2473 | PyErr_BadInternalCall(); | |
| 2438 | 2474 | return 0; | |
@@ -2450,8 +2486,9 @@ _PyArg_NoKeywords(const char *funcname, PyObject *kwargs) | |||
| 2450 | 2486 | int | |
| 2451 | 2487 | _PyArg_NoStackKeywords(const char *funcname, PyObject *kwnames) | |
| 2452 | 2488 | { | |
| 2453 | - if (kwnames == NULL) | ||
| 2489 | + if (kwnames == NULL) { | ||
| 2454 | 2490 | return 1; | |
| 2491 | + } | ||
| 2455 | 2492 | assert(PyTuple_CheckExact(kwnames)); | |
| 2456 | 2493 | if (PyTuple_GET_SIZE(kwnames) == 0) { | |
| 2457 | 2494 | return 1; | |
| Back | FazBrowse Home | New Git URL |
0 commit comments