Skip to content
Snippets Groups Projects
Select Git revision
  • 107c21c5d56682320b38c01b5575c1604a429239
  • main default protected
  • 3.10
  • 3.11
  • revert-15688-bpo-38031-_io-FileIO-opener-crash
  • 3.8
  • 3.9
  • 3.7
  • enum-fix_auto
  • branch-v3.11.0
  • backport-c3648f4-3.11
  • gh-93963/remove-importlib-resources-abcs
  • refactor-wait_for
  • shared-testcase
  • v3.12.0a2
  • v3.12.0a1
  • v3.11.0
  • v3.8.15
  • v3.9.15
  • v3.10.8
  • v3.7.15
  • v3.11.0rc2
  • v3.8.14
  • v3.9.14
  • v3.7.14
  • v3.10.7
  • v3.11.0rc1
  • v3.10.6
  • v3.11.0b5
  • v3.11.0b4
  • v3.10.5
  • v3.11.0b3
  • v3.11.0b2
  • v3.9.13
34 results

getargs.c

Blame
  • getargs.c 88.62 KiB
    
    /* New getargs implementation */
    
    #include "Python.h"
    #include "pycore_tuple.h"         // _PyTuple_ITEMS()
    #include "pycore_pylifecycle.h"   // _PyArg_Fini
    
    #include <ctype.h>
    #include <float.h>
    
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    int PyArg_Parse(PyObject *, const char *, ...);
    int PyArg_ParseTuple(PyObject *, const char *, ...);
    int PyArg_VaParse(PyObject *, const char *, va_list);
    
    int PyArg_ParseTupleAndKeywords(PyObject *, PyObject *,
                                    const char *, char **, ...);
    int PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *,
                                    const char *, char **, va_list);
    
    int _PyArg_ParseTupleAndKeywordsFast(PyObject *, PyObject *,
                                                struct _PyArg_Parser *, ...);
    int _PyArg_VaParseTupleAndKeywordsFast(PyObject *, PyObject *,
                                                struct _PyArg_Parser *, va_list);
    
    #ifdef HAVE_DECLSPEC_DLL
    /* Export functions */
    PyAPI_FUNC(int) _PyArg_Parse_SizeT(PyObject *, const char *, ...);
    PyAPI_FUNC(int) _PyArg_ParseStack_SizeT(PyObject *const *args, Py_ssize_t nargs,
                                            const char *format, ...);
    PyAPI_FUNC(int) _PyArg_ParseStackAndKeywords_SizeT(PyObject *const *args, Py_ssize_t nargs,
                                            PyObject *kwnames,
                                            struct _PyArg_Parser *parser, ...);
    PyAPI_FUNC(int) _PyArg_ParseTuple_SizeT(PyObject *, const char *, ...);
    PyAPI_FUNC(int) _PyArg_ParseTupleAndKeywords_SizeT(PyObject *, PyObject *,
                                                      const char *, char **, ...);
    PyAPI_FUNC(PyObject *) _Py_BuildValue_SizeT(const char *, ...);
    PyAPI_FUNC(int) _PyArg_VaParse_SizeT(PyObject *, const char *, va_list);
    PyAPI_FUNC(int) _PyArg_VaParseTupleAndKeywords_SizeT(PyObject *, PyObject *,
                                                  const char *, char **, va_list);
    
    PyAPI_FUNC(int) _PyArg_ParseTupleAndKeywordsFast_SizeT(PyObject *, PyObject *,
                                                struct _PyArg_Parser *, ...);
    PyAPI_FUNC(int) _PyArg_VaParseTupleAndKeywordsFast_SizeT(PyObject *, PyObject *,
                                                struct _PyArg_Parser *, va_list);
    #endif
    
    #define FLAG_COMPAT 1
    #define FLAG_SIZE_T 2
    
    typedef int (*destr_t)(PyObject *, void *);
    
    
    /* Keep track of "objects" that have been allocated or initialized and
       which will need to be deallocated or cleaned up somehow if overall
       parsing fails.
    */
    typedef struct {
      void *item;
      destr_t destructor;
    } freelistentry_t;
    
    typedef struct {
      freelistentry_t *entries;
      int first_available;
      int entries_malloced;
    } freelist_t;