17db96d56Sopenharmony_ci/*[clinic input]
27db96d56Sopenharmony_cipreserve
37db96d56Sopenharmony_ci[clinic start generated code]*/
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ciPyDoc_STRVAR(_pickle_Pickler_clear_memo__doc__,
67db96d56Sopenharmony_ci"clear_memo($self, /)\n"
77db96d56Sopenharmony_ci"--\n"
87db96d56Sopenharmony_ci"\n"
97db96d56Sopenharmony_ci"Clears the pickler\'s \"memo\".\n"
107db96d56Sopenharmony_ci"\n"
117db96d56Sopenharmony_ci"The memo is the data structure that remembers which objects the\n"
127db96d56Sopenharmony_ci"pickler has already seen, so that shared or recursive objects are\n"
137db96d56Sopenharmony_ci"pickled by reference and not by value.  This method is useful when\n"
147db96d56Sopenharmony_ci"re-using picklers.");
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ci#define _PICKLE_PICKLER_CLEAR_MEMO_METHODDEF    \
177db96d56Sopenharmony_ci    {"clear_memo", (PyCFunction)_pickle_Pickler_clear_memo, METH_NOARGS, _pickle_Pickler_clear_memo__doc__},
187db96d56Sopenharmony_ci
197db96d56Sopenharmony_cistatic PyObject *
207db96d56Sopenharmony_ci_pickle_Pickler_clear_memo_impl(PicklerObject *self);
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_cistatic PyObject *
237db96d56Sopenharmony_ci_pickle_Pickler_clear_memo(PicklerObject *self, PyObject *Py_UNUSED(ignored))
247db96d56Sopenharmony_ci{
257db96d56Sopenharmony_ci    return _pickle_Pickler_clear_memo_impl(self);
267db96d56Sopenharmony_ci}
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ciPyDoc_STRVAR(_pickle_Pickler_dump__doc__,
297db96d56Sopenharmony_ci"dump($self, obj, /)\n"
307db96d56Sopenharmony_ci"--\n"
317db96d56Sopenharmony_ci"\n"
327db96d56Sopenharmony_ci"Write a pickled representation of the given object to the open file.");
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_ci#define _PICKLE_PICKLER_DUMP_METHODDEF    \
357db96d56Sopenharmony_ci    {"dump", (PyCFunction)_pickle_Pickler_dump, METH_O, _pickle_Pickler_dump__doc__},
367db96d56Sopenharmony_ci
377db96d56Sopenharmony_ciPyDoc_STRVAR(_pickle_Pickler___sizeof____doc__,
387db96d56Sopenharmony_ci"__sizeof__($self, /)\n"
397db96d56Sopenharmony_ci"--\n"
407db96d56Sopenharmony_ci"\n"
417db96d56Sopenharmony_ci"Returns size in memory, in bytes.");
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_ci#define _PICKLE_PICKLER___SIZEOF___METHODDEF    \
447db96d56Sopenharmony_ci    {"__sizeof__", (PyCFunction)_pickle_Pickler___sizeof__, METH_NOARGS, _pickle_Pickler___sizeof____doc__},
457db96d56Sopenharmony_ci
467db96d56Sopenharmony_cistatic Py_ssize_t
477db96d56Sopenharmony_ci_pickle_Pickler___sizeof___impl(PicklerObject *self);
487db96d56Sopenharmony_ci
497db96d56Sopenharmony_cistatic PyObject *
507db96d56Sopenharmony_ci_pickle_Pickler___sizeof__(PicklerObject *self, PyObject *Py_UNUSED(ignored))
517db96d56Sopenharmony_ci{
527db96d56Sopenharmony_ci    PyObject *return_value = NULL;
537db96d56Sopenharmony_ci    Py_ssize_t _return_value;
547db96d56Sopenharmony_ci
557db96d56Sopenharmony_ci    _return_value = _pickle_Pickler___sizeof___impl(self);
567db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
577db96d56Sopenharmony_ci        goto exit;
587db96d56Sopenharmony_ci    }
597db96d56Sopenharmony_ci    return_value = PyLong_FromSsize_t(_return_value);
607db96d56Sopenharmony_ci
617db96d56Sopenharmony_ciexit:
627db96d56Sopenharmony_ci    return return_value;
637db96d56Sopenharmony_ci}
647db96d56Sopenharmony_ci
657db96d56Sopenharmony_ciPyDoc_STRVAR(_pickle_Pickler___init____doc__,
667db96d56Sopenharmony_ci"Pickler(file, protocol=None, fix_imports=True, buffer_callback=None)\n"
677db96d56Sopenharmony_ci"--\n"
687db96d56Sopenharmony_ci"\n"
697db96d56Sopenharmony_ci"This takes a binary file for writing a pickle data stream.\n"
707db96d56Sopenharmony_ci"\n"
717db96d56Sopenharmony_ci"The optional *protocol* argument tells the pickler to use the given\n"
727db96d56Sopenharmony_ci"protocol; supported protocols are 0, 1, 2, 3, 4 and 5.  The default\n"
737db96d56Sopenharmony_ci"protocol is 4. It was introduced in Python 3.4, and is incompatible\n"
747db96d56Sopenharmony_ci"with previous versions.\n"
757db96d56Sopenharmony_ci"\n"
767db96d56Sopenharmony_ci"Specifying a negative protocol version selects the highest protocol\n"
777db96d56Sopenharmony_ci"version supported.  The higher the protocol used, the more recent the\n"
787db96d56Sopenharmony_ci"version of Python needed to read the pickle produced.\n"
797db96d56Sopenharmony_ci"\n"
807db96d56Sopenharmony_ci"The *file* argument must have a write() method that accepts a single\n"
817db96d56Sopenharmony_ci"bytes argument. It can thus be a file object opened for binary\n"
827db96d56Sopenharmony_ci"writing, an io.BytesIO instance, or any other custom object that meets\n"
837db96d56Sopenharmony_ci"this interface.\n"
847db96d56Sopenharmony_ci"\n"
857db96d56Sopenharmony_ci"If *fix_imports* is True and protocol is less than 3, pickle will try\n"
867db96d56Sopenharmony_ci"to map the new Python 3 names to the old module names used in Python\n"
877db96d56Sopenharmony_ci"2, so that the pickle data stream is readable with Python 2.\n"
887db96d56Sopenharmony_ci"\n"
897db96d56Sopenharmony_ci"If *buffer_callback* is None (the default), buffer views are\n"
907db96d56Sopenharmony_ci"serialized into *file* as part of the pickle stream.\n"
917db96d56Sopenharmony_ci"\n"
927db96d56Sopenharmony_ci"If *buffer_callback* is not None, then it can be called any number\n"
937db96d56Sopenharmony_ci"of times with a buffer view.  If the callback returns a false value\n"
947db96d56Sopenharmony_ci"(such as None), the given buffer is out-of-band; otherwise the\n"
957db96d56Sopenharmony_ci"buffer is serialized in-band, i.e. inside the pickle stream.\n"
967db96d56Sopenharmony_ci"\n"
977db96d56Sopenharmony_ci"It is an error if *buffer_callback* is not None and *protocol*\n"
987db96d56Sopenharmony_ci"is None or smaller than 5.");
997db96d56Sopenharmony_ci
1007db96d56Sopenharmony_cistatic int
1017db96d56Sopenharmony_ci_pickle_Pickler___init___impl(PicklerObject *self, PyObject *file,
1027db96d56Sopenharmony_ci                              PyObject *protocol, int fix_imports,
1037db96d56Sopenharmony_ci                              PyObject *buffer_callback);
1047db96d56Sopenharmony_ci
1057db96d56Sopenharmony_cistatic int
1067db96d56Sopenharmony_ci_pickle_Pickler___init__(PyObject *self, PyObject *args, PyObject *kwargs)
1077db96d56Sopenharmony_ci{
1087db96d56Sopenharmony_ci    int return_value = -1;
1097db96d56Sopenharmony_ci    static const char * const _keywords[] = {"file", "protocol", "fix_imports", "buffer_callback", NULL};
1107db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "Pickler", 0};
1117db96d56Sopenharmony_ci    PyObject *argsbuf[4];
1127db96d56Sopenharmony_ci    PyObject * const *fastargs;
1137db96d56Sopenharmony_ci    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
1147db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 1;
1157db96d56Sopenharmony_ci    PyObject *file;
1167db96d56Sopenharmony_ci    PyObject *protocol = Py_None;
1177db96d56Sopenharmony_ci    int fix_imports = 1;
1187db96d56Sopenharmony_ci    PyObject *buffer_callback = Py_None;
1197db96d56Sopenharmony_ci
1207db96d56Sopenharmony_ci    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 1, 4, 0, argsbuf);
1217db96d56Sopenharmony_ci    if (!fastargs) {
1227db96d56Sopenharmony_ci        goto exit;
1237db96d56Sopenharmony_ci    }
1247db96d56Sopenharmony_ci    file = fastargs[0];
1257db96d56Sopenharmony_ci    if (!noptargs) {
1267db96d56Sopenharmony_ci        goto skip_optional_pos;
1277db96d56Sopenharmony_ci    }
1287db96d56Sopenharmony_ci    if (fastargs[1]) {
1297db96d56Sopenharmony_ci        protocol = fastargs[1];
1307db96d56Sopenharmony_ci        if (!--noptargs) {
1317db96d56Sopenharmony_ci            goto skip_optional_pos;
1327db96d56Sopenharmony_ci        }
1337db96d56Sopenharmony_ci    }
1347db96d56Sopenharmony_ci    if (fastargs[2]) {
1357db96d56Sopenharmony_ci        fix_imports = PyObject_IsTrue(fastargs[2]);
1367db96d56Sopenharmony_ci        if (fix_imports < 0) {
1377db96d56Sopenharmony_ci            goto exit;
1387db96d56Sopenharmony_ci        }
1397db96d56Sopenharmony_ci        if (!--noptargs) {
1407db96d56Sopenharmony_ci            goto skip_optional_pos;
1417db96d56Sopenharmony_ci        }
1427db96d56Sopenharmony_ci    }
1437db96d56Sopenharmony_ci    buffer_callback = fastargs[3];
1447db96d56Sopenharmony_ciskip_optional_pos:
1457db96d56Sopenharmony_ci    return_value = _pickle_Pickler___init___impl((PicklerObject *)self, file, protocol, fix_imports, buffer_callback);
1467db96d56Sopenharmony_ci
1477db96d56Sopenharmony_ciexit:
1487db96d56Sopenharmony_ci    return return_value;
1497db96d56Sopenharmony_ci}
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_ciPyDoc_STRVAR(_pickle_PicklerMemoProxy_clear__doc__,
1527db96d56Sopenharmony_ci"clear($self, /)\n"
1537db96d56Sopenharmony_ci"--\n"
1547db96d56Sopenharmony_ci"\n"
1557db96d56Sopenharmony_ci"Remove all items from memo.");
1567db96d56Sopenharmony_ci
1577db96d56Sopenharmony_ci#define _PICKLE_PICKLERMEMOPROXY_CLEAR_METHODDEF    \
1587db96d56Sopenharmony_ci    {"clear", (PyCFunction)_pickle_PicklerMemoProxy_clear, METH_NOARGS, _pickle_PicklerMemoProxy_clear__doc__},
1597db96d56Sopenharmony_ci
1607db96d56Sopenharmony_cistatic PyObject *
1617db96d56Sopenharmony_ci_pickle_PicklerMemoProxy_clear_impl(PicklerMemoProxyObject *self);
1627db96d56Sopenharmony_ci
1637db96d56Sopenharmony_cistatic PyObject *
1647db96d56Sopenharmony_ci_pickle_PicklerMemoProxy_clear(PicklerMemoProxyObject *self, PyObject *Py_UNUSED(ignored))
1657db96d56Sopenharmony_ci{
1667db96d56Sopenharmony_ci    return _pickle_PicklerMemoProxy_clear_impl(self);
1677db96d56Sopenharmony_ci}
1687db96d56Sopenharmony_ci
1697db96d56Sopenharmony_ciPyDoc_STRVAR(_pickle_PicklerMemoProxy_copy__doc__,
1707db96d56Sopenharmony_ci"copy($self, /)\n"
1717db96d56Sopenharmony_ci"--\n"
1727db96d56Sopenharmony_ci"\n"
1737db96d56Sopenharmony_ci"Copy the memo to a new object.");
1747db96d56Sopenharmony_ci
1757db96d56Sopenharmony_ci#define _PICKLE_PICKLERMEMOPROXY_COPY_METHODDEF    \
1767db96d56Sopenharmony_ci    {"copy", (PyCFunction)_pickle_PicklerMemoProxy_copy, METH_NOARGS, _pickle_PicklerMemoProxy_copy__doc__},
1777db96d56Sopenharmony_ci
1787db96d56Sopenharmony_cistatic PyObject *
1797db96d56Sopenharmony_ci_pickle_PicklerMemoProxy_copy_impl(PicklerMemoProxyObject *self);
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_cistatic PyObject *
1827db96d56Sopenharmony_ci_pickle_PicklerMemoProxy_copy(PicklerMemoProxyObject *self, PyObject *Py_UNUSED(ignored))
1837db96d56Sopenharmony_ci{
1847db96d56Sopenharmony_ci    return _pickle_PicklerMemoProxy_copy_impl(self);
1857db96d56Sopenharmony_ci}
1867db96d56Sopenharmony_ci
1877db96d56Sopenharmony_ciPyDoc_STRVAR(_pickle_PicklerMemoProxy___reduce____doc__,
1887db96d56Sopenharmony_ci"__reduce__($self, /)\n"
1897db96d56Sopenharmony_ci"--\n"
1907db96d56Sopenharmony_ci"\n"
1917db96d56Sopenharmony_ci"Implement pickle support.");
1927db96d56Sopenharmony_ci
1937db96d56Sopenharmony_ci#define _PICKLE_PICKLERMEMOPROXY___REDUCE___METHODDEF    \
1947db96d56Sopenharmony_ci    {"__reduce__", (PyCFunction)_pickle_PicklerMemoProxy___reduce__, METH_NOARGS, _pickle_PicklerMemoProxy___reduce____doc__},
1957db96d56Sopenharmony_ci
1967db96d56Sopenharmony_cistatic PyObject *
1977db96d56Sopenharmony_ci_pickle_PicklerMemoProxy___reduce___impl(PicklerMemoProxyObject *self);
1987db96d56Sopenharmony_ci
1997db96d56Sopenharmony_cistatic PyObject *
2007db96d56Sopenharmony_ci_pickle_PicklerMemoProxy___reduce__(PicklerMemoProxyObject *self, PyObject *Py_UNUSED(ignored))
2017db96d56Sopenharmony_ci{
2027db96d56Sopenharmony_ci    return _pickle_PicklerMemoProxy___reduce___impl(self);
2037db96d56Sopenharmony_ci}
2047db96d56Sopenharmony_ci
2057db96d56Sopenharmony_ciPyDoc_STRVAR(_pickle_Unpickler_load__doc__,
2067db96d56Sopenharmony_ci"load($self, /)\n"
2077db96d56Sopenharmony_ci"--\n"
2087db96d56Sopenharmony_ci"\n"
2097db96d56Sopenharmony_ci"Load a pickle.\n"
2107db96d56Sopenharmony_ci"\n"
2117db96d56Sopenharmony_ci"Read a pickled object representation from the open file object given\n"
2127db96d56Sopenharmony_ci"in the constructor, and return the reconstituted object hierarchy\n"
2137db96d56Sopenharmony_ci"specified therein.");
2147db96d56Sopenharmony_ci
2157db96d56Sopenharmony_ci#define _PICKLE_UNPICKLER_LOAD_METHODDEF    \
2167db96d56Sopenharmony_ci    {"load", (PyCFunction)_pickle_Unpickler_load, METH_NOARGS, _pickle_Unpickler_load__doc__},
2177db96d56Sopenharmony_ci
2187db96d56Sopenharmony_cistatic PyObject *
2197db96d56Sopenharmony_ci_pickle_Unpickler_load_impl(UnpicklerObject *self);
2207db96d56Sopenharmony_ci
2217db96d56Sopenharmony_cistatic PyObject *
2227db96d56Sopenharmony_ci_pickle_Unpickler_load(UnpicklerObject *self, PyObject *Py_UNUSED(ignored))
2237db96d56Sopenharmony_ci{
2247db96d56Sopenharmony_ci    return _pickle_Unpickler_load_impl(self);
2257db96d56Sopenharmony_ci}
2267db96d56Sopenharmony_ci
2277db96d56Sopenharmony_ciPyDoc_STRVAR(_pickle_Unpickler_find_class__doc__,
2287db96d56Sopenharmony_ci"find_class($self, module_name, global_name, /)\n"
2297db96d56Sopenharmony_ci"--\n"
2307db96d56Sopenharmony_ci"\n"
2317db96d56Sopenharmony_ci"Return an object from a specified module.\n"
2327db96d56Sopenharmony_ci"\n"
2337db96d56Sopenharmony_ci"If necessary, the module will be imported. Subclasses may override\n"
2347db96d56Sopenharmony_ci"this method (e.g. to restrict unpickling of arbitrary classes and\n"
2357db96d56Sopenharmony_ci"functions).\n"
2367db96d56Sopenharmony_ci"\n"
2377db96d56Sopenharmony_ci"This method is called whenever a class or a function object is\n"
2387db96d56Sopenharmony_ci"needed.  Both arguments passed are str objects.");
2397db96d56Sopenharmony_ci
2407db96d56Sopenharmony_ci#define _PICKLE_UNPICKLER_FIND_CLASS_METHODDEF    \
2417db96d56Sopenharmony_ci    {"find_class", _PyCFunction_CAST(_pickle_Unpickler_find_class), METH_FASTCALL, _pickle_Unpickler_find_class__doc__},
2427db96d56Sopenharmony_ci
2437db96d56Sopenharmony_cistatic PyObject *
2447db96d56Sopenharmony_ci_pickle_Unpickler_find_class_impl(UnpicklerObject *self,
2457db96d56Sopenharmony_ci                                  PyObject *module_name,
2467db96d56Sopenharmony_ci                                  PyObject *global_name);
2477db96d56Sopenharmony_ci
2487db96d56Sopenharmony_cistatic PyObject *
2497db96d56Sopenharmony_ci_pickle_Unpickler_find_class(UnpicklerObject *self, PyObject *const *args, Py_ssize_t nargs)
2507db96d56Sopenharmony_ci{
2517db96d56Sopenharmony_ci    PyObject *return_value = NULL;
2527db96d56Sopenharmony_ci    PyObject *module_name;
2537db96d56Sopenharmony_ci    PyObject *global_name;
2547db96d56Sopenharmony_ci
2557db96d56Sopenharmony_ci    if (!_PyArg_CheckPositional("find_class", nargs, 2, 2)) {
2567db96d56Sopenharmony_ci        goto exit;
2577db96d56Sopenharmony_ci    }
2587db96d56Sopenharmony_ci    module_name = args[0];
2597db96d56Sopenharmony_ci    global_name = args[1];
2607db96d56Sopenharmony_ci    return_value = _pickle_Unpickler_find_class_impl(self, module_name, global_name);
2617db96d56Sopenharmony_ci
2627db96d56Sopenharmony_ciexit:
2637db96d56Sopenharmony_ci    return return_value;
2647db96d56Sopenharmony_ci}
2657db96d56Sopenharmony_ci
2667db96d56Sopenharmony_ciPyDoc_STRVAR(_pickle_Unpickler___sizeof____doc__,
2677db96d56Sopenharmony_ci"__sizeof__($self, /)\n"
2687db96d56Sopenharmony_ci"--\n"
2697db96d56Sopenharmony_ci"\n"
2707db96d56Sopenharmony_ci"Returns size in memory, in bytes.");
2717db96d56Sopenharmony_ci
2727db96d56Sopenharmony_ci#define _PICKLE_UNPICKLER___SIZEOF___METHODDEF    \
2737db96d56Sopenharmony_ci    {"__sizeof__", (PyCFunction)_pickle_Unpickler___sizeof__, METH_NOARGS, _pickle_Unpickler___sizeof____doc__},
2747db96d56Sopenharmony_ci
2757db96d56Sopenharmony_cistatic Py_ssize_t
2767db96d56Sopenharmony_ci_pickle_Unpickler___sizeof___impl(UnpicklerObject *self);
2777db96d56Sopenharmony_ci
2787db96d56Sopenharmony_cistatic PyObject *
2797db96d56Sopenharmony_ci_pickle_Unpickler___sizeof__(UnpicklerObject *self, PyObject *Py_UNUSED(ignored))
2807db96d56Sopenharmony_ci{
2817db96d56Sopenharmony_ci    PyObject *return_value = NULL;
2827db96d56Sopenharmony_ci    Py_ssize_t _return_value;
2837db96d56Sopenharmony_ci
2847db96d56Sopenharmony_ci    _return_value = _pickle_Unpickler___sizeof___impl(self);
2857db96d56Sopenharmony_ci    if ((_return_value == -1) && PyErr_Occurred()) {
2867db96d56Sopenharmony_ci        goto exit;
2877db96d56Sopenharmony_ci    }
2887db96d56Sopenharmony_ci    return_value = PyLong_FromSsize_t(_return_value);
2897db96d56Sopenharmony_ci
2907db96d56Sopenharmony_ciexit:
2917db96d56Sopenharmony_ci    return return_value;
2927db96d56Sopenharmony_ci}
2937db96d56Sopenharmony_ci
2947db96d56Sopenharmony_ciPyDoc_STRVAR(_pickle_Unpickler___init____doc__,
2957db96d56Sopenharmony_ci"Unpickler(file, *, fix_imports=True, encoding=\'ASCII\', errors=\'strict\',\n"
2967db96d56Sopenharmony_ci"          buffers=())\n"
2977db96d56Sopenharmony_ci"--\n"
2987db96d56Sopenharmony_ci"\n"
2997db96d56Sopenharmony_ci"This takes a binary file for reading a pickle data stream.\n"
3007db96d56Sopenharmony_ci"\n"
3017db96d56Sopenharmony_ci"The protocol version of the pickle is detected automatically, so no\n"
3027db96d56Sopenharmony_ci"protocol argument is needed.  Bytes past the pickled object\'s\n"
3037db96d56Sopenharmony_ci"representation are ignored.\n"
3047db96d56Sopenharmony_ci"\n"
3057db96d56Sopenharmony_ci"The argument *file* must have two methods, a read() method that takes\n"
3067db96d56Sopenharmony_ci"an integer argument, and a readline() method that requires no\n"
3077db96d56Sopenharmony_ci"arguments.  Both methods should return bytes.  Thus *file* can be a\n"
3087db96d56Sopenharmony_ci"binary file object opened for reading, an io.BytesIO object, or any\n"
3097db96d56Sopenharmony_ci"other custom object that meets this interface.\n"
3107db96d56Sopenharmony_ci"\n"
3117db96d56Sopenharmony_ci"Optional keyword arguments are *fix_imports*, *encoding* and *errors*,\n"
3127db96d56Sopenharmony_ci"which are used to control compatibility support for pickle stream\n"
3137db96d56Sopenharmony_ci"generated by Python 2.  If *fix_imports* is True, pickle will try to\n"
3147db96d56Sopenharmony_ci"map the old Python 2 names to the new names used in Python 3.  The\n"
3157db96d56Sopenharmony_ci"*encoding* and *errors* tell pickle how to decode 8-bit string\n"
3167db96d56Sopenharmony_ci"instances pickled by Python 2; these default to \'ASCII\' and \'strict\',\n"
3177db96d56Sopenharmony_ci"respectively.  The *encoding* can be \'bytes\' to read these 8-bit\n"
3187db96d56Sopenharmony_ci"string instances as bytes objects.");
3197db96d56Sopenharmony_ci
3207db96d56Sopenharmony_cistatic int
3217db96d56Sopenharmony_ci_pickle_Unpickler___init___impl(UnpicklerObject *self, PyObject *file,
3227db96d56Sopenharmony_ci                                int fix_imports, const char *encoding,
3237db96d56Sopenharmony_ci                                const char *errors, PyObject *buffers);
3247db96d56Sopenharmony_ci
3257db96d56Sopenharmony_cistatic int
3267db96d56Sopenharmony_ci_pickle_Unpickler___init__(PyObject *self, PyObject *args, PyObject *kwargs)
3277db96d56Sopenharmony_ci{
3287db96d56Sopenharmony_ci    int return_value = -1;
3297db96d56Sopenharmony_ci    static const char * const _keywords[] = {"file", "fix_imports", "encoding", "errors", "buffers", NULL};
3307db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "Unpickler", 0};
3317db96d56Sopenharmony_ci    PyObject *argsbuf[5];
3327db96d56Sopenharmony_ci    PyObject * const *fastargs;
3337db96d56Sopenharmony_ci    Py_ssize_t nargs = PyTuple_GET_SIZE(args);
3347db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 1;
3357db96d56Sopenharmony_ci    PyObject *file;
3367db96d56Sopenharmony_ci    int fix_imports = 1;
3377db96d56Sopenharmony_ci    const char *encoding = "ASCII";
3387db96d56Sopenharmony_ci    const char *errors = "strict";
3397db96d56Sopenharmony_ci    PyObject *buffers = NULL;
3407db96d56Sopenharmony_ci
3417db96d56Sopenharmony_ci    fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, 1, 1, 0, argsbuf);
3427db96d56Sopenharmony_ci    if (!fastargs) {
3437db96d56Sopenharmony_ci        goto exit;
3447db96d56Sopenharmony_ci    }
3457db96d56Sopenharmony_ci    file = fastargs[0];
3467db96d56Sopenharmony_ci    if (!noptargs) {
3477db96d56Sopenharmony_ci        goto skip_optional_kwonly;
3487db96d56Sopenharmony_ci    }
3497db96d56Sopenharmony_ci    if (fastargs[1]) {
3507db96d56Sopenharmony_ci        fix_imports = PyObject_IsTrue(fastargs[1]);
3517db96d56Sopenharmony_ci        if (fix_imports < 0) {
3527db96d56Sopenharmony_ci            goto exit;
3537db96d56Sopenharmony_ci        }
3547db96d56Sopenharmony_ci        if (!--noptargs) {
3557db96d56Sopenharmony_ci            goto skip_optional_kwonly;
3567db96d56Sopenharmony_ci        }
3577db96d56Sopenharmony_ci    }
3587db96d56Sopenharmony_ci    if (fastargs[2]) {
3597db96d56Sopenharmony_ci        if (!PyUnicode_Check(fastargs[2])) {
3607db96d56Sopenharmony_ci            _PyArg_BadArgument("Unpickler", "argument 'encoding'", "str", fastargs[2]);
3617db96d56Sopenharmony_ci            goto exit;
3627db96d56Sopenharmony_ci        }
3637db96d56Sopenharmony_ci        Py_ssize_t encoding_length;
3647db96d56Sopenharmony_ci        encoding = PyUnicode_AsUTF8AndSize(fastargs[2], &encoding_length);
3657db96d56Sopenharmony_ci        if (encoding == NULL) {
3667db96d56Sopenharmony_ci            goto exit;
3677db96d56Sopenharmony_ci        }
3687db96d56Sopenharmony_ci        if (strlen(encoding) != (size_t)encoding_length) {
3697db96d56Sopenharmony_ci            PyErr_SetString(PyExc_ValueError, "embedded null character");
3707db96d56Sopenharmony_ci            goto exit;
3717db96d56Sopenharmony_ci        }
3727db96d56Sopenharmony_ci        if (!--noptargs) {
3737db96d56Sopenharmony_ci            goto skip_optional_kwonly;
3747db96d56Sopenharmony_ci        }
3757db96d56Sopenharmony_ci    }
3767db96d56Sopenharmony_ci    if (fastargs[3]) {
3777db96d56Sopenharmony_ci        if (!PyUnicode_Check(fastargs[3])) {
3787db96d56Sopenharmony_ci            _PyArg_BadArgument("Unpickler", "argument 'errors'", "str", fastargs[3]);
3797db96d56Sopenharmony_ci            goto exit;
3807db96d56Sopenharmony_ci        }
3817db96d56Sopenharmony_ci        Py_ssize_t errors_length;
3827db96d56Sopenharmony_ci        errors = PyUnicode_AsUTF8AndSize(fastargs[3], &errors_length);
3837db96d56Sopenharmony_ci        if (errors == NULL) {
3847db96d56Sopenharmony_ci            goto exit;
3857db96d56Sopenharmony_ci        }
3867db96d56Sopenharmony_ci        if (strlen(errors) != (size_t)errors_length) {
3877db96d56Sopenharmony_ci            PyErr_SetString(PyExc_ValueError, "embedded null character");
3887db96d56Sopenharmony_ci            goto exit;
3897db96d56Sopenharmony_ci        }
3907db96d56Sopenharmony_ci        if (!--noptargs) {
3917db96d56Sopenharmony_ci            goto skip_optional_kwonly;
3927db96d56Sopenharmony_ci        }
3937db96d56Sopenharmony_ci    }
3947db96d56Sopenharmony_ci    buffers = fastargs[4];
3957db96d56Sopenharmony_ciskip_optional_kwonly:
3967db96d56Sopenharmony_ci    return_value = _pickle_Unpickler___init___impl((UnpicklerObject *)self, file, fix_imports, encoding, errors, buffers);
3977db96d56Sopenharmony_ci
3987db96d56Sopenharmony_ciexit:
3997db96d56Sopenharmony_ci    return return_value;
4007db96d56Sopenharmony_ci}
4017db96d56Sopenharmony_ci
4027db96d56Sopenharmony_ciPyDoc_STRVAR(_pickle_UnpicklerMemoProxy_clear__doc__,
4037db96d56Sopenharmony_ci"clear($self, /)\n"
4047db96d56Sopenharmony_ci"--\n"
4057db96d56Sopenharmony_ci"\n"
4067db96d56Sopenharmony_ci"Remove all items from memo.");
4077db96d56Sopenharmony_ci
4087db96d56Sopenharmony_ci#define _PICKLE_UNPICKLERMEMOPROXY_CLEAR_METHODDEF    \
4097db96d56Sopenharmony_ci    {"clear", (PyCFunction)_pickle_UnpicklerMemoProxy_clear, METH_NOARGS, _pickle_UnpicklerMemoProxy_clear__doc__},
4107db96d56Sopenharmony_ci
4117db96d56Sopenharmony_cistatic PyObject *
4127db96d56Sopenharmony_ci_pickle_UnpicklerMemoProxy_clear_impl(UnpicklerMemoProxyObject *self);
4137db96d56Sopenharmony_ci
4147db96d56Sopenharmony_cistatic PyObject *
4157db96d56Sopenharmony_ci_pickle_UnpicklerMemoProxy_clear(UnpicklerMemoProxyObject *self, PyObject *Py_UNUSED(ignored))
4167db96d56Sopenharmony_ci{
4177db96d56Sopenharmony_ci    return _pickle_UnpicklerMemoProxy_clear_impl(self);
4187db96d56Sopenharmony_ci}
4197db96d56Sopenharmony_ci
4207db96d56Sopenharmony_ciPyDoc_STRVAR(_pickle_UnpicklerMemoProxy_copy__doc__,
4217db96d56Sopenharmony_ci"copy($self, /)\n"
4227db96d56Sopenharmony_ci"--\n"
4237db96d56Sopenharmony_ci"\n"
4247db96d56Sopenharmony_ci"Copy the memo to a new object.");
4257db96d56Sopenharmony_ci
4267db96d56Sopenharmony_ci#define _PICKLE_UNPICKLERMEMOPROXY_COPY_METHODDEF    \
4277db96d56Sopenharmony_ci    {"copy", (PyCFunction)_pickle_UnpicklerMemoProxy_copy, METH_NOARGS, _pickle_UnpicklerMemoProxy_copy__doc__},
4287db96d56Sopenharmony_ci
4297db96d56Sopenharmony_cistatic PyObject *
4307db96d56Sopenharmony_ci_pickle_UnpicklerMemoProxy_copy_impl(UnpicklerMemoProxyObject *self);
4317db96d56Sopenharmony_ci
4327db96d56Sopenharmony_cistatic PyObject *
4337db96d56Sopenharmony_ci_pickle_UnpicklerMemoProxy_copy(UnpicklerMemoProxyObject *self, PyObject *Py_UNUSED(ignored))
4347db96d56Sopenharmony_ci{
4357db96d56Sopenharmony_ci    return _pickle_UnpicklerMemoProxy_copy_impl(self);
4367db96d56Sopenharmony_ci}
4377db96d56Sopenharmony_ci
4387db96d56Sopenharmony_ciPyDoc_STRVAR(_pickle_UnpicklerMemoProxy___reduce____doc__,
4397db96d56Sopenharmony_ci"__reduce__($self, /)\n"
4407db96d56Sopenharmony_ci"--\n"
4417db96d56Sopenharmony_ci"\n"
4427db96d56Sopenharmony_ci"Implement pickling support.");
4437db96d56Sopenharmony_ci
4447db96d56Sopenharmony_ci#define _PICKLE_UNPICKLERMEMOPROXY___REDUCE___METHODDEF    \
4457db96d56Sopenharmony_ci    {"__reduce__", (PyCFunction)_pickle_UnpicklerMemoProxy___reduce__, METH_NOARGS, _pickle_UnpicklerMemoProxy___reduce____doc__},
4467db96d56Sopenharmony_ci
4477db96d56Sopenharmony_cistatic PyObject *
4487db96d56Sopenharmony_ci_pickle_UnpicklerMemoProxy___reduce___impl(UnpicklerMemoProxyObject *self);
4497db96d56Sopenharmony_ci
4507db96d56Sopenharmony_cistatic PyObject *
4517db96d56Sopenharmony_ci_pickle_UnpicklerMemoProxy___reduce__(UnpicklerMemoProxyObject *self, PyObject *Py_UNUSED(ignored))
4527db96d56Sopenharmony_ci{
4537db96d56Sopenharmony_ci    return _pickle_UnpicklerMemoProxy___reduce___impl(self);
4547db96d56Sopenharmony_ci}
4557db96d56Sopenharmony_ci
4567db96d56Sopenharmony_ciPyDoc_STRVAR(_pickle_dump__doc__,
4577db96d56Sopenharmony_ci"dump($module, /, obj, file, protocol=None, *, fix_imports=True,\n"
4587db96d56Sopenharmony_ci"     buffer_callback=None)\n"
4597db96d56Sopenharmony_ci"--\n"
4607db96d56Sopenharmony_ci"\n"
4617db96d56Sopenharmony_ci"Write a pickled representation of obj to the open file object file.\n"
4627db96d56Sopenharmony_ci"\n"
4637db96d56Sopenharmony_ci"This is equivalent to ``Pickler(file, protocol).dump(obj)``, but may\n"
4647db96d56Sopenharmony_ci"be more efficient.\n"
4657db96d56Sopenharmony_ci"\n"
4667db96d56Sopenharmony_ci"The optional *protocol* argument tells the pickler to use the given\n"
4677db96d56Sopenharmony_ci"protocol; supported protocols are 0, 1, 2, 3, 4 and 5.  The default\n"
4687db96d56Sopenharmony_ci"protocol is 4. It was introduced in Python 3.4, and is incompatible\n"
4697db96d56Sopenharmony_ci"with previous versions.\n"
4707db96d56Sopenharmony_ci"\n"
4717db96d56Sopenharmony_ci"Specifying a negative protocol version selects the highest protocol\n"
4727db96d56Sopenharmony_ci"version supported.  The higher the protocol used, the more recent the\n"
4737db96d56Sopenharmony_ci"version of Python needed to read the pickle produced.\n"
4747db96d56Sopenharmony_ci"\n"
4757db96d56Sopenharmony_ci"The *file* argument must have a write() method that accepts a single\n"
4767db96d56Sopenharmony_ci"bytes argument.  It can thus be a file object opened for binary\n"
4777db96d56Sopenharmony_ci"writing, an io.BytesIO instance, or any other custom object that meets\n"
4787db96d56Sopenharmony_ci"this interface.\n"
4797db96d56Sopenharmony_ci"\n"
4807db96d56Sopenharmony_ci"If *fix_imports* is True and protocol is less than 3, pickle will try\n"
4817db96d56Sopenharmony_ci"to map the new Python 3 names to the old module names used in Python\n"
4827db96d56Sopenharmony_ci"2, so that the pickle data stream is readable with Python 2.\n"
4837db96d56Sopenharmony_ci"\n"
4847db96d56Sopenharmony_ci"If *buffer_callback* is None (the default), buffer views are serialized\n"
4857db96d56Sopenharmony_ci"into *file* as part of the pickle stream.  It is an error if\n"
4867db96d56Sopenharmony_ci"*buffer_callback* is not None and *protocol* is None or smaller than 5.");
4877db96d56Sopenharmony_ci
4887db96d56Sopenharmony_ci#define _PICKLE_DUMP_METHODDEF    \
4897db96d56Sopenharmony_ci    {"dump", _PyCFunction_CAST(_pickle_dump), METH_FASTCALL|METH_KEYWORDS, _pickle_dump__doc__},
4907db96d56Sopenharmony_ci
4917db96d56Sopenharmony_cistatic PyObject *
4927db96d56Sopenharmony_ci_pickle_dump_impl(PyObject *module, PyObject *obj, PyObject *file,
4937db96d56Sopenharmony_ci                  PyObject *protocol, int fix_imports,
4947db96d56Sopenharmony_ci                  PyObject *buffer_callback);
4957db96d56Sopenharmony_ci
4967db96d56Sopenharmony_cistatic PyObject *
4977db96d56Sopenharmony_ci_pickle_dump(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
4987db96d56Sopenharmony_ci{
4997db96d56Sopenharmony_ci    PyObject *return_value = NULL;
5007db96d56Sopenharmony_ci    static const char * const _keywords[] = {"obj", "file", "protocol", "fix_imports", "buffer_callback", NULL};
5017db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "dump", 0};
5027db96d56Sopenharmony_ci    PyObject *argsbuf[5];
5037db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 2;
5047db96d56Sopenharmony_ci    PyObject *obj;
5057db96d56Sopenharmony_ci    PyObject *file;
5067db96d56Sopenharmony_ci    PyObject *protocol = Py_None;
5077db96d56Sopenharmony_ci    int fix_imports = 1;
5087db96d56Sopenharmony_ci    PyObject *buffer_callback = Py_None;
5097db96d56Sopenharmony_ci
5107db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 3, 0, argsbuf);
5117db96d56Sopenharmony_ci    if (!args) {
5127db96d56Sopenharmony_ci        goto exit;
5137db96d56Sopenharmony_ci    }
5147db96d56Sopenharmony_ci    obj = args[0];
5157db96d56Sopenharmony_ci    file = args[1];
5167db96d56Sopenharmony_ci    if (!noptargs) {
5177db96d56Sopenharmony_ci        goto skip_optional_pos;
5187db96d56Sopenharmony_ci    }
5197db96d56Sopenharmony_ci    if (args[2]) {
5207db96d56Sopenharmony_ci        protocol = args[2];
5217db96d56Sopenharmony_ci        if (!--noptargs) {
5227db96d56Sopenharmony_ci            goto skip_optional_pos;
5237db96d56Sopenharmony_ci        }
5247db96d56Sopenharmony_ci    }
5257db96d56Sopenharmony_ciskip_optional_pos:
5267db96d56Sopenharmony_ci    if (!noptargs) {
5277db96d56Sopenharmony_ci        goto skip_optional_kwonly;
5287db96d56Sopenharmony_ci    }
5297db96d56Sopenharmony_ci    if (args[3]) {
5307db96d56Sopenharmony_ci        fix_imports = PyObject_IsTrue(args[3]);
5317db96d56Sopenharmony_ci        if (fix_imports < 0) {
5327db96d56Sopenharmony_ci            goto exit;
5337db96d56Sopenharmony_ci        }
5347db96d56Sopenharmony_ci        if (!--noptargs) {
5357db96d56Sopenharmony_ci            goto skip_optional_kwonly;
5367db96d56Sopenharmony_ci        }
5377db96d56Sopenharmony_ci    }
5387db96d56Sopenharmony_ci    buffer_callback = args[4];
5397db96d56Sopenharmony_ciskip_optional_kwonly:
5407db96d56Sopenharmony_ci    return_value = _pickle_dump_impl(module, obj, file, protocol, fix_imports, buffer_callback);
5417db96d56Sopenharmony_ci
5427db96d56Sopenharmony_ciexit:
5437db96d56Sopenharmony_ci    return return_value;
5447db96d56Sopenharmony_ci}
5457db96d56Sopenharmony_ci
5467db96d56Sopenharmony_ciPyDoc_STRVAR(_pickle_dumps__doc__,
5477db96d56Sopenharmony_ci"dumps($module, /, obj, protocol=None, *, fix_imports=True,\n"
5487db96d56Sopenharmony_ci"      buffer_callback=None)\n"
5497db96d56Sopenharmony_ci"--\n"
5507db96d56Sopenharmony_ci"\n"
5517db96d56Sopenharmony_ci"Return the pickled representation of the object as a bytes object.\n"
5527db96d56Sopenharmony_ci"\n"
5537db96d56Sopenharmony_ci"The optional *protocol* argument tells the pickler to use the given\n"
5547db96d56Sopenharmony_ci"protocol; supported protocols are 0, 1, 2, 3, 4 and 5.  The default\n"
5557db96d56Sopenharmony_ci"protocol is 4. It was introduced in Python 3.4, and is incompatible\n"
5567db96d56Sopenharmony_ci"with previous versions.\n"
5577db96d56Sopenharmony_ci"\n"
5587db96d56Sopenharmony_ci"Specifying a negative protocol version selects the highest protocol\n"
5597db96d56Sopenharmony_ci"version supported.  The higher the protocol used, the more recent the\n"
5607db96d56Sopenharmony_ci"version of Python needed to read the pickle produced.\n"
5617db96d56Sopenharmony_ci"\n"
5627db96d56Sopenharmony_ci"If *fix_imports* is True and *protocol* is less than 3, pickle will\n"
5637db96d56Sopenharmony_ci"try to map the new Python 3 names to the old module names used in\n"
5647db96d56Sopenharmony_ci"Python 2, so that the pickle data stream is readable with Python 2.\n"
5657db96d56Sopenharmony_ci"\n"
5667db96d56Sopenharmony_ci"If *buffer_callback* is None (the default), buffer views are serialized\n"
5677db96d56Sopenharmony_ci"into *file* as part of the pickle stream.  It is an error if\n"
5687db96d56Sopenharmony_ci"*buffer_callback* is not None and *protocol* is None or smaller than 5.");
5697db96d56Sopenharmony_ci
5707db96d56Sopenharmony_ci#define _PICKLE_DUMPS_METHODDEF    \
5717db96d56Sopenharmony_ci    {"dumps", _PyCFunction_CAST(_pickle_dumps), METH_FASTCALL|METH_KEYWORDS, _pickle_dumps__doc__},
5727db96d56Sopenharmony_ci
5737db96d56Sopenharmony_cistatic PyObject *
5747db96d56Sopenharmony_ci_pickle_dumps_impl(PyObject *module, PyObject *obj, PyObject *protocol,
5757db96d56Sopenharmony_ci                   int fix_imports, PyObject *buffer_callback);
5767db96d56Sopenharmony_ci
5777db96d56Sopenharmony_cistatic PyObject *
5787db96d56Sopenharmony_ci_pickle_dumps(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
5797db96d56Sopenharmony_ci{
5807db96d56Sopenharmony_ci    PyObject *return_value = NULL;
5817db96d56Sopenharmony_ci    static const char * const _keywords[] = {"obj", "protocol", "fix_imports", "buffer_callback", NULL};
5827db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "dumps", 0};
5837db96d56Sopenharmony_ci    PyObject *argsbuf[4];
5847db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
5857db96d56Sopenharmony_ci    PyObject *obj;
5867db96d56Sopenharmony_ci    PyObject *protocol = Py_None;
5877db96d56Sopenharmony_ci    int fix_imports = 1;
5887db96d56Sopenharmony_ci    PyObject *buffer_callback = Py_None;
5897db96d56Sopenharmony_ci
5907db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 2, 0, argsbuf);
5917db96d56Sopenharmony_ci    if (!args) {
5927db96d56Sopenharmony_ci        goto exit;
5937db96d56Sopenharmony_ci    }
5947db96d56Sopenharmony_ci    obj = args[0];
5957db96d56Sopenharmony_ci    if (!noptargs) {
5967db96d56Sopenharmony_ci        goto skip_optional_pos;
5977db96d56Sopenharmony_ci    }
5987db96d56Sopenharmony_ci    if (args[1]) {
5997db96d56Sopenharmony_ci        protocol = args[1];
6007db96d56Sopenharmony_ci        if (!--noptargs) {
6017db96d56Sopenharmony_ci            goto skip_optional_pos;
6027db96d56Sopenharmony_ci        }
6037db96d56Sopenharmony_ci    }
6047db96d56Sopenharmony_ciskip_optional_pos:
6057db96d56Sopenharmony_ci    if (!noptargs) {
6067db96d56Sopenharmony_ci        goto skip_optional_kwonly;
6077db96d56Sopenharmony_ci    }
6087db96d56Sopenharmony_ci    if (args[2]) {
6097db96d56Sopenharmony_ci        fix_imports = PyObject_IsTrue(args[2]);
6107db96d56Sopenharmony_ci        if (fix_imports < 0) {
6117db96d56Sopenharmony_ci            goto exit;
6127db96d56Sopenharmony_ci        }
6137db96d56Sopenharmony_ci        if (!--noptargs) {
6147db96d56Sopenharmony_ci            goto skip_optional_kwonly;
6157db96d56Sopenharmony_ci        }
6167db96d56Sopenharmony_ci    }
6177db96d56Sopenharmony_ci    buffer_callback = args[3];
6187db96d56Sopenharmony_ciskip_optional_kwonly:
6197db96d56Sopenharmony_ci    return_value = _pickle_dumps_impl(module, obj, protocol, fix_imports, buffer_callback);
6207db96d56Sopenharmony_ci
6217db96d56Sopenharmony_ciexit:
6227db96d56Sopenharmony_ci    return return_value;
6237db96d56Sopenharmony_ci}
6247db96d56Sopenharmony_ci
6257db96d56Sopenharmony_ciPyDoc_STRVAR(_pickle_load__doc__,
6267db96d56Sopenharmony_ci"load($module, /, file, *, fix_imports=True, encoding=\'ASCII\',\n"
6277db96d56Sopenharmony_ci"     errors=\'strict\', buffers=())\n"
6287db96d56Sopenharmony_ci"--\n"
6297db96d56Sopenharmony_ci"\n"
6307db96d56Sopenharmony_ci"Read and return an object from the pickle data stored in a file.\n"
6317db96d56Sopenharmony_ci"\n"
6327db96d56Sopenharmony_ci"This is equivalent to ``Unpickler(file).load()``, but may be more\n"
6337db96d56Sopenharmony_ci"efficient.\n"
6347db96d56Sopenharmony_ci"\n"
6357db96d56Sopenharmony_ci"The protocol version of the pickle is detected automatically, so no\n"
6367db96d56Sopenharmony_ci"protocol argument is needed.  Bytes past the pickled object\'s\n"
6377db96d56Sopenharmony_ci"representation are ignored.\n"
6387db96d56Sopenharmony_ci"\n"
6397db96d56Sopenharmony_ci"The argument *file* must have two methods, a read() method that takes\n"
6407db96d56Sopenharmony_ci"an integer argument, and a readline() method that requires no\n"
6417db96d56Sopenharmony_ci"arguments.  Both methods should return bytes.  Thus *file* can be a\n"
6427db96d56Sopenharmony_ci"binary file object opened for reading, an io.BytesIO object, or any\n"
6437db96d56Sopenharmony_ci"other custom object that meets this interface.\n"
6447db96d56Sopenharmony_ci"\n"
6457db96d56Sopenharmony_ci"Optional keyword arguments are *fix_imports*, *encoding* and *errors*,\n"
6467db96d56Sopenharmony_ci"which are used to control compatibility support for pickle stream\n"
6477db96d56Sopenharmony_ci"generated by Python 2.  If *fix_imports* is True, pickle will try to\n"
6487db96d56Sopenharmony_ci"map the old Python 2 names to the new names used in Python 3.  The\n"
6497db96d56Sopenharmony_ci"*encoding* and *errors* tell pickle how to decode 8-bit string\n"
6507db96d56Sopenharmony_ci"instances pickled by Python 2; these default to \'ASCII\' and \'strict\',\n"
6517db96d56Sopenharmony_ci"respectively.  The *encoding* can be \'bytes\' to read these 8-bit\n"
6527db96d56Sopenharmony_ci"string instances as bytes objects.");
6537db96d56Sopenharmony_ci
6547db96d56Sopenharmony_ci#define _PICKLE_LOAD_METHODDEF    \
6557db96d56Sopenharmony_ci    {"load", _PyCFunction_CAST(_pickle_load), METH_FASTCALL|METH_KEYWORDS, _pickle_load__doc__},
6567db96d56Sopenharmony_ci
6577db96d56Sopenharmony_cistatic PyObject *
6587db96d56Sopenharmony_ci_pickle_load_impl(PyObject *module, PyObject *file, int fix_imports,
6597db96d56Sopenharmony_ci                  const char *encoding, const char *errors,
6607db96d56Sopenharmony_ci                  PyObject *buffers);
6617db96d56Sopenharmony_ci
6627db96d56Sopenharmony_cistatic PyObject *
6637db96d56Sopenharmony_ci_pickle_load(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
6647db96d56Sopenharmony_ci{
6657db96d56Sopenharmony_ci    PyObject *return_value = NULL;
6667db96d56Sopenharmony_ci    static const char * const _keywords[] = {"file", "fix_imports", "encoding", "errors", "buffers", NULL};
6677db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "load", 0};
6687db96d56Sopenharmony_ci    PyObject *argsbuf[5];
6697db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
6707db96d56Sopenharmony_ci    PyObject *file;
6717db96d56Sopenharmony_ci    int fix_imports = 1;
6727db96d56Sopenharmony_ci    const char *encoding = "ASCII";
6737db96d56Sopenharmony_ci    const char *errors = "strict";
6747db96d56Sopenharmony_ci    PyObject *buffers = NULL;
6757db96d56Sopenharmony_ci
6767db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
6777db96d56Sopenharmony_ci    if (!args) {
6787db96d56Sopenharmony_ci        goto exit;
6797db96d56Sopenharmony_ci    }
6807db96d56Sopenharmony_ci    file = args[0];
6817db96d56Sopenharmony_ci    if (!noptargs) {
6827db96d56Sopenharmony_ci        goto skip_optional_kwonly;
6837db96d56Sopenharmony_ci    }
6847db96d56Sopenharmony_ci    if (args[1]) {
6857db96d56Sopenharmony_ci        fix_imports = PyObject_IsTrue(args[1]);
6867db96d56Sopenharmony_ci        if (fix_imports < 0) {
6877db96d56Sopenharmony_ci            goto exit;
6887db96d56Sopenharmony_ci        }
6897db96d56Sopenharmony_ci        if (!--noptargs) {
6907db96d56Sopenharmony_ci            goto skip_optional_kwonly;
6917db96d56Sopenharmony_ci        }
6927db96d56Sopenharmony_ci    }
6937db96d56Sopenharmony_ci    if (args[2]) {
6947db96d56Sopenharmony_ci        if (!PyUnicode_Check(args[2])) {
6957db96d56Sopenharmony_ci            _PyArg_BadArgument("load", "argument 'encoding'", "str", args[2]);
6967db96d56Sopenharmony_ci            goto exit;
6977db96d56Sopenharmony_ci        }
6987db96d56Sopenharmony_ci        Py_ssize_t encoding_length;
6997db96d56Sopenharmony_ci        encoding = PyUnicode_AsUTF8AndSize(args[2], &encoding_length);
7007db96d56Sopenharmony_ci        if (encoding == NULL) {
7017db96d56Sopenharmony_ci            goto exit;
7027db96d56Sopenharmony_ci        }
7037db96d56Sopenharmony_ci        if (strlen(encoding) != (size_t)encoding_length) {
7047db96d56Sopenharmony_ci            PyErr_SetString(PyExc_ValueError, "embedded null character");
7057db96d56Sopenharmony_ci            goto exit;
7067db96d56Sopenharmony_ci        }
7077db96d56Sopenharmony_ci        if (!--noptargs) {
7087db96d56Sopenharmony_ci            goto skip_optional_kwonly;
7097db96d56Sopenharmony_ci        }
7107db96d56Sopenharmony_ci    }
7117db96d56Sopenharmony_ci    if (args[3]) {
7127db96d56Sopenharmony_ci        if (!PyUnicode_Check(args[3])) {
7137db96d56Sopenharmony_ci            _PyArg_BadArgument("load", "argument 'errors'", "str", args[3]);
7147db96d56Sopenharmony_ci            goto exit;
7157db96d56Sopenharmony_ci        }
7167db96d56Sopenharmony_ci        Py_ssize_t errors_length;
7177db96d56Sopenharmony_ci        errors = PyUnicode_AsUTF8AndSize(args[3], &errors_length);
7187db96d56Sopenharmony_ci        if (errors == NULL) {
7197db96d56Sopenharmony_ci            goto exit;
7207db96d56Sopenharmony_ci        }
7217db96d56Sopenharmony_ci        if (strlen(errors) != (size_t)errors_length) {
7227db96d56Sopenharmony_ci            PyErr_SetString(PyExc_ValueError, "embedded null character");
7237db96d56Sopenharmony_ci            goto exit;
7247db96d56Sopenharmony_ci        }
7257db96d56Sopenharmony_ci        if (!--noptargs) {
7267db96d56Sopenharmony_ci            goto skip_optional_kwonly;
7277db96d56Sopenharmony_ci        }
7287db96d56Sopenharmony_ci    }
7297db96d56Sopenharmony_ci    buffers = args[4];
7307db96d56Sopenharmony_ciskip_optional_kwonly:
7317db96d56Sopenharmony_ci    return_value = _pickle_load_impl(module, file, fix_imports, encoding, errors, buffers);
7327db96d56Sopenharmony_ci
7337db96d56Sopenharmony_ciexit:
7347db96d56Sopenharmony_ci    return return_value;
7357db96d56Sopenharmony_ci}
7367db96d56Sopenharmony_ci
7377db96d56Sopenharmony_ciPyDoc_STRVAR(_pickle_loads__doc__,
7387db96d56Sopenharmony_ci"loads($module, data, /, *, fix_imports=True, encoding=\'ASCII\',\n"
7397db96d56Sopenharmony_ci"      errors=\'strict\', buffers=())\n"
7407db96d56Sopenharmony_ci"--\n"
7417db96d56Sopenharmony_ci"\n"
7427db96d56Sopenharmony_ci"Read and return an object from the given pickle data.\n"
7437db96d56Sopenharmony_ci"\n"
7447db96d56Sopenharmony_ci"The protocol version of the pickle is detected automatically, so no\n"
7457db96d56Sopenharmony_ci"protocol argument is needed.  Bytes past the pickled object\'s\n"
7467db96d56Sopenharmony_ci"representation are ignored.\n"
7477db96d56Sopenharmony_ci"\n"
7487db96d56Sopenharmony_ci"Optional keyword arguments are *fix_imports*, *encoding* and *errors*,\n"
7497db96d56Sopenharmony_ci"which are used to control compatibility support for pickle stream\n"
7507db96d56Sopenharmony_ci"generated by Python 2.  If *fix_imports* is True, pickle will try to\n"
7517db96d56Sopenharmony_ci"map the old Python 2 names to the new names used in Python 3.  The\n"
7527db96d56Sopenharmony_ci"*encoding* and *errors* tell pickle how to decode 8-bit string\n"
7537db96d56Sopenharmony_ci"instances pickled by Python 2; these default to \'ASCII\' and \'strict\',\n"
7547db96d56Sopenharmony_ci"respectively.  The *encoding* can be \'bytes\' to read these 8-bit\n"
7557db96d56Sopenharmony_ci"string instances as bytes objects.");
7567db96d56Sopenharmony_ci
7577db96d56Sopenharmony_ci#define _PICKLE_LOADS_METHODDEF    \
7587db96d56Sopenharmony_ci    {"loads", _PyCFunction_CAST(_pickle_loads), METH_FASTCALL|METH_KEYWORDS, _pickle_loads__doc__},
7597db96d56Sopenharmony_ci
7607db96d56Sopenharmony_cistatic PyObject *
7617db96d56Sopenharmony_ci_pickle_loads_impl(PyObject *module, PyObject *data, int fix_imports,
7627db96d56Sopenharmony_ci                   const char *encoding, const char *errors,
7637db96d56Sopenharmony_ci                   PyObject *buffers);
7647db96d56Sopenharmony_ci
7657db96d56Sopenharmony_cistatic PyObject *
7667db96d56Sopenharmony_ci_pickle_loads(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
7677db96d56Sopenharmony_ci{
7687db96d56Sopenharmony_ci    PyObject *return_value = NULL;
7697db96d56Sopenharmony_ci    static const char * const _keywords[] = {"", "fix_imports", "encoding", "errors", "buffers", NULL};
7707db96d56Sopenharmony_ci    static _PyArg_Parser _parser = {NULL, _keywords, "loads", 0};
7717db96d56Sopenharmony_ci    PyObject *argsbuf[5];
7727db96d56Sopenharmony_ci    Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
7737db96d56Sopenharmony_ci    PyObject *data;
7747db96d56Sopenharmony_ci    int fix_imports = 1;
7757db96d56Sopenharmony_ci    const char *encoding = "ASCII";
7767db96d56Sopenharmony_ci    const char *errors = "strict";
7777db96d56Sopenharmony_ci    PyObject *buffers = NULL;
7787db96d56Sopenharmony_ci
7797db96d56Sopenharmony_ci    args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
7807db96d56Sopenharmony_ci    if (!args) {
7817db96d56Sopenharmony_ci        goto exit;
7827db96d56Sopenharmony_ci    }
7837db96d56Sopenharmony_ci    data = args[0];
7847db96d56Sopenharmony_ci    if (!noptargs) {
7857db96d56Sopenharmony_ci        goto skip_optional_kwonly;
7867db96d56Sopenharmony_ci    }
7877db96d56Sopenharmony_ci    if (args[1]) {
7887db96d56Sopenharmony_ci        fix_imports = PyObject_IsTrue(args[1]);
7897db96d56Sopenharmony_ci        if (fix_imports < 0) {
7907db96d56Sopenharmony_ci            goto exit;
7917db96d56Sopenharmony_ci        }
7927db96d56Sopenharmony_ci        if (!--noptargs) {
7937db96d56Sopenharmony_ci            goto skip_optional_kwonly;
7947db96d56Sopenharmony_ci        }
7957db96d56Sopenharmony_ci    }
7967db96d56Sopenharmony_ci    if (args[2]) {
7977db96d56Sopenharmony_ci        if (!PyUnicode_Check(args[2])) {
7987db96d56Sopenharmony_ci            _PyArg_BadArgument("loads", "argument 'encoding'", "str", args[2]);
7997db96d56Sopenharmony_ci            goto exit;
8007db96d56Sopenharmony_ci        }
8017db96d56Sopenharmony_ci        Py_ssize_t encoding_length;
8027db96d56Sopenharmony_ci        encoding = PyUnicode_AsUTF8AndSize(args[2], &encoding_length);
8037db96d56Sopenharmony_ci        if (encoding == NULL) {
8047db96d56Sopenharmony_ci            goto exit;
8057db96d56Sopenharmony_ci        }
8067db96d56Sopenharmony_ci        if (strlen(encoding) != (size_t)encoding_length) {
8077db96d56Sopenharmony_ci            PyErr_SetString(PyExc_ValueError, "embedded null character");
8087db96d56Sopenharmony_ci            goto exit;
8097db96d56Sopenharmony_ci        }
8107db96d56Sopenharmony_ci        if (!--noptargs) {
8117db96d56Sopenharmony_ci            goto skip_optional_kwonly;
8127db96d56Sopenharmony_ci        }
8137db96d56Sopenharmony_ci    }
8147db96d56Sopenharmony_ci    if (args[3]) {
8157db96d56Sopenharmony_ci        if (!PyUnicode_Check(args[3])) {
8167db96d56Sopenharmony_ci            _PyArg_BadArgument("loads", "argument 'errors'", "str", args[3]);
8177db96d56Sopenharmony_ci            goto exit;
8187db96d56Sopenharmony_ci        }
8197db96d56Sopenharmony_ci        Py_ssize_t errors_length;
8207db96d56Sopenharmony_ci        errors = PyUnicode_AsUTF8AndSize(args[3], &errors_length);
8217db96d56Sopenharmony_ci        if (errors == NULL) {
8227db96d56Sopenharmony_ci            goto exit;
8237db96d56Sopenharmony_ci        }
8247db96d56Sopenharmony_ci        if (strlen(errors) != (size_t)errors_length) {
8257db96d56Sopenharmony_ci            PyErr_SetString(PyExc_ValueError, "embedded null character");
8267db96d56Sopenharmony_ci            goto exit;
8277db96d56Sopenharmony_ci        }
8287db96d56Sopenharmony_ci        if (!--noptargs) {
8297db96d56Sopenharmony_ci            goto skip_optional_kwonly;
8307db96d56Sopenharmony_ci        }
8317db96d56Sopenharmony_ci    }
8327db96d56Sopenharmony_ci    buffers = args[4];
8337db96d56Sopenharmony_ciskip_optional_kwonly:
8347db96d56Sopenharmony_ci    return_value = _pickle_loads_impl(module, data, fix_imports, encoding, errors, buffers);
8357db96d56Sopenharmony_ci
8367db96d56Sopenharmony_ciexit:
8377db96d56Sopenharmony_ci    return return_value;
8387db96d56Sopenharmony_ci}
8397db96d56Sopenharmony_ci/*[clinic end generated code: output=1bb1ead3c828e108 input=a9049054013a1b77]*/
840