File: /Users/paulross/dev/Python-3.6.2/Include/modsupport.h

Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.

       1: 
       2: #ifndef Py_MODSUPPORT_H
       3: #define Py_MODSUPPORT_H
       4: #ifdef __cplusplus
       5: extern "C" {
       6: #endif
       7: 
       8: /* Module support interface */
       9: 
      10: #include <stdarg.h>
      11: 
      12: /* If PY_SSIZE_T_CLEAN is defined, each functions treats #-specifier
      13:    to mean Py_ssize_t */
      14: #ifdef PY_SSIZE_T_CLEAN
      15: #define PyArg_Parse                     _PyArg_Parse_SizeT
      16: #define PyArg_ParseTuple                _PyArg_ParseTuple_SizeT
      17: #define PyArg_ParseTupleAndKeywords     _PyArg_ParseTupleAndKeywords_SizeT
      18: #define PyArg_VaParse                   _PyArg_VaParse_SizeT
      19: #define PyArg_VaParseTupleAndKeywords   _PyArg_VaParseTupleAndKeywords_SizeT
      20: #define Py_BuildValue                   _Py_BuildValue_SizeT
      21: #define Py_VaBuildValue                 _Py_VaBuildValue_SizeT
      22: #else
      23: #ifndef Py_LIMITED_API
      24: PyAPI_FUNC(PyObject *) _Py_VaBuildValue_SizeT(const char *, va_list);
      25: #endif /* !Py_LIMITED_API */
      26: #endif
      27: 
      28: /* Due to a glitch in 3.2, the _SizeT versions weren't exported from the DLL. */
      29: #if !defined(PY_SSIZE_T_CLEAN) || !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03030000
      30: PyAPI_FUNC(int) PyArg_Parse(PyObject *, const char *, ...);
      31: PyAPI_FUNC(int) PyArg_ParseTuple(PyObject *, const char *, ...);
      32: PyAPI_FUNC(int) PyArg_ParseTupleAndKeywords(PyObject *, PyObject *,
      33:                                                   const char *, char **, ...);
      34: PyAPI_FUNC(int) PyArg_VaParse(PyObject *, const char *, va_list);
      35: PyAPI_FUNC(int) PyArg_VaParseTupleAndKeywords(PyObject *, PyObject *,
      36:                                                   const char *, char **, va_list);
      37: #endif
      38: PyAPI_FUNC(int) PyArg_ValidateKeywordArguments(PyObject *);
      39: PyAPI_FUNC(int) PyArg_UnpackTuple(PyObject *, const char *, Py_ssize_t, Py_ssize_t, ...);
      40: PyAPI_FUNC(PyObject *) Py_BuildValue(const char *, ...);
      41: PyAPI_FUNC(PyObject *) _Py_BuildValue_SizeT(const char *, ...);
      42: 
      43: #ifndef Py_LIMITED_API
      44: PyAPI_FUNC(int) _PyArg_NoKeywords(const char *funcname, PyObject *kw);
      45: PyAPI_FUNC(int) _PyArg_NoPositional(const char *funcname, PyObject *args);
      46: #endif
      47: PyAPI_FUNC(PyObject *) Py_VaBuildValue(const char *, va_list);
      48: 
      49: #ifndef Py_LIMITED_API
      50: typedef struct _PyArg_Parser {
      51:     const char *format;
      52:     const char * const *keywords;
      53:     const char *fname;
      54:     const char *custom_msg;
      55:     int pos;            /* number of positional-only arguments */
      56:     int min;            /* minimal number of arguments */
      57:     int max;            /* maximal number of positional arguments */
      58:     PyObject *kwtuple;  /* tuple of keyword parameter names */
      59:     struct _PyArg_Parser *next;
      60: } _PyArg_Parser;
      61: #ifdef PY_SSIZE_T_CLEAN
      62: #define _PyArg_ParseTupleAndKeywordsFast  _PyArg_ParseTupleAndKeywordsFast_SizeT
      63: #define _PyArg_ParseStack  _PyArg_ParseStack_SizeT
      64: #define _PyArg_VaParseTupleAndKeywordsFast  _PyArg_VaParseTupleAndKeywordsFast_SizeT
      65: #endif
      66: PyAPI_FUNC(int) _PyArg_ParseTupleAndKeywordsFast(PyObject *, PyObject *,
      67:                                                  struct _PyArg_Parser *, ...);
      68: PyAPI_FUNC(int) _PyArg_ParseStack(PyObject **args, Py_ssize_t nargs, PyObject *kwnames,
      69:                                   struct _PyArg_Parser *, ...);
      70: PyAPI_FUNC(int) _PyArg_VaParseTupleAndKeywordsFast(PyObject *, PyObject *,
      71:                                                    struct _PyArg_Parser *, va_list);
      72: void _PyArg_Fini(void);
      73: #endif
      74: 
      75: PyAPI_FUNC(int) PyModule_AddObject(PyObject *, const char *, PyObject *);
      76: PyAPI_FUNC(int) PyModule_AddIntConstant(PyObject *, const char *, long);
      77: PyAPI_FUNC(int) PyModule_AddStringConstant(PyObject *, const char *, const char *);
      78: #define PyModule_AddIntMacro(m, c) PyModule_AddIntConstant(m, #c, c)
      79: #define PyModule_AddStringMacro(m, c) PyModule_AddStringConstant(m, #c, c)
      80: 
      81: #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
      82: /* New in 3.5 */
      83: PyAPI_FUNC(int) PyModule_SetDocString(PyObject *, const char *);
      84: PyAPI_FUNC(int) PyModule_AddFunctions(PyObject *, PyMethodDef *);
      85: PyAPI_FUNC(int) PyModule_ExecDef(PyObject *module, PyModuleDef *def);
      86: #endif
      87: 
      88: #define Py_CLEANUP_SUPPORTED 0x20000
      89: 
      90: #define PYTHON_API_VERSION 1013
      91: #define PYTHON_API_STRING "1013"
      92: /* The API version is maintained (independently from the Python version)
      93:    so we can detect mismatches between the interpreter and dynamically
      94:    loaded modules.  These are diagnosed by an error message but
      95:    the module is still loaded (because the mismatch can only be tested
      96:    after loading the module).  The error message is intended to
      97:    explain the core dump a few seconds later.
      98: 
      99:    The symbol PYTHON_API_STRING defines the same value as a string
     100:    literal.  *** PLEASE MAKE SURE THE DEFINITIONS MATCH. ***
     101: 
     102:    Please add a line or two to the top of this log for each API
     103:    version change:
     104: 
     105:    22-Feb-2006  MvL     1013    PEP 353 - long indices for sequence lengths
     106: 
     107:    19-Aug-2002  GvR     1012    Changes to string object struct for
     108:                                 interning changes, saving 3 bytes.
     109: 
     110:    17-Jul-2001  GvR     1011    Descr-branch, just to be on the safe side
     111: 
     112:    25-Jan-2001  FLD     1010    Parameters added to PyCode_New() and
     113:                                 PyFrame_New(); Python 2.1a2
     114: 
     115:    14-Mar-2000  GvR     1009    Unicode API added
     116: 
     117:    3-Jan-1999   GvR     1007    Decided to change back!  (Don't reuse 1008!)
     118: 
     119:    3-Dec-1998   GvR     1008    Python 1.5.2b1
     120: 
     121:    18-Jan-1997  GvR     1007    string interning and other speedups
     122: 
     123:    11-Oct-1996  GvR     renamed Py_Ellipses to Py_Ellipsis :-(
     124: 
     125:    30-Jul-1996  GvR     Slice and ellipses syntax added
     126: 
     127:    23-Jul-1996  GvR     For 1.4 -- better safe than sorry this time :-)
     128: 
     129:    7-Nov-1995   GvR     Keyword arguments (should've been done at 1.3 :-( )
     130: 
     131:    10-Jan-1995  GvR     Renamed globals to new naming scheme
     132: 
     133:    9-Jan-1995   GvR     Initial version (incompatible with older API)
     134: */
     135: 
     136: /* The PYTHON_ABI_VERSION is introduced in PEP 384. For the lifetime of
     137:    Python 3, it will stay at the value of 3; changes to the limited API
     138:    must be performed in a strictly backwards-compatible manner. */
     139: #define PYTHON_ABI_VERSION 3
     140: #define PYTHON_ABI_STRING "3"
     141: 
     142: #ifdef Py_TRACE_REFS
     143:  /* When we are tracing reference counts, rename module creation functions so
     144:     modules compiled with incompatible settings will generate a
     145:     link-time error. */
     146:  #define PyModule_Create2 PyModule_Create2TraceRefs
     147:  #define PyModule_FromDefAndSpec2 PyModule_FromDefAndSpec2TraceRefs
     148: #endif
     149: 
     150: PyAPI_FUNC(PyObject *) PyModule_Create2(struct PyModuleDef*,
     151:                                      int apiver);
     152: 
     153: #ifdef Py_LIMITED_API
     154: #define PyModule_Create(module) \
     155:         PyModule_Create2(module, PYTHON_ABI_VERSION)
     156: #else
     157: #define PyModule_Create(module) \
     158:         PyModule_Create2(module, PYTHON_API_VERSION)
     159: #endif
     160: 
     161: #if !defined(Py_LIMITED_API) || Py_LIMITED_API+0 >= 0x03050000
     162: /* New in 3.5 */
     163: PyAPI_FUNC(PyObject *) PyModule_FromDefAndSpec2(PyModuleDef *def,
     164:                                                 PyObject *spec,
     165:                                                 int module_api_version);
     166: 
     167: #ifdef Py_LIMITED_API
     168: #define PyModule_FromDefAndSpec(module, spec) \
     169:     PyModule_FromDefAndSpec2(module, spec, PYTHON_ABI_VERSION)
     170: #else
     171: #define PyModule_FromDefAndSpec(module, spec) \
     172:     PyModule_FromDefAndSpec2(module, spec, PYTHON_API_VERSION)
     173: #endif /* Py_LIMITED_API */
     174: #endif /* New in 3.5 */
     175: 
     176: #ifndef Py_LIMITED_API
     177: PyAPI_DATA(char *) _Py_PackageContext;
     178: #endif
     179: 
     180: #ifdef __cplusplus
     181: }
     182: #endif
     183: #endif /* !Py_MODSUPPORT_H */
     184: