mirror of https://github.com/python/cpython
695 lines
19 KiB
C
695 lines
19 KiB
C
/*[clinic input]
|
|
preserve
|
|
[clinic start generated code]*/
|
|
|
|
#if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
|
|
# include "pycore_runtime.h" // _Py_SINGLETON()
|
|
#endif
|
|
#include "pycore_abstract.h" // _PyNumber_Index()
|
|
#include "pycore_modsupport.h" // _PyArg_CheckPositional()
|
|
|
|
PyDoc_STRVAR(array_array_clear__doc__,
|
|
"clear($self, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Remove all items from the array.");
|
|
|
|
#define ARRAY_ARRAY_CLEAR_METHODDEF \
|
|
{"clear", (PyCFunction)array_array_clear, METH_NOARGS, array_array_clear__doc__},
|
|
|
|
static PyObject *
|
|
array_array_clear_impl(arrayobject *self);
|
|
|
|
static PyObject *
|
|
array_array_clear(arrayobject *self, PyObject *Py_UNUSED(ignored))
|
|
{
|
|
return array_array_clear_impl(self);
|
|
}
|
|
|
|
PyDoc_STRVAR(array_array___copy____doc__,
|
|
"__copy__($self, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Return a copy of the array.");
|
|
|
|
#define ARRAY_ARRAY___COPY___METHODDEF \
|
|
{"__copy__", (PyCFunction)array_array___copy__, METH_NOARGS, array_array___copy____doc__},
|
|
|
|
static PyObject *
|
|
array_array___copy___impl(arrayobject *self);
|
|
|
|
static PyObject *
|
|
array_array___copy__(arrayobject *self, PyObject *Py_UNUSED(ignored))
|
|
{
|
|
return array_array___copy___impl(self);
|
|
}
|
|
|
|
PyDoc_STRVAR(array_array___deepcopy____doc__,
|
|
"__deepcopy__($self, unused, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Return a copy of the array.");
|
|
|
|
#define ARRAY_ARRAY___DEEPCOPY___METHODDEF \
|
|
{"__deepcopy__", (PyCFunction)array_array___deepcopy__, METH_O, array_array___deepcopy____doc__},
|
|
|
|
PyDoc_STRVAR(array_array_count__doc__,
|
|
"count($self, v, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Return number of occurrences of v in the array.");
|
|
|
|
#define ARRAY_ARRAY_COUNT_METHODDEF \
|
|
{"count", (PyCFunction)array_array_count, METH_O, array_array_count__doc__},
|
|
|
|
PyDoc_STRVAR(array_array_index__doc__,
|
|
"index($self, v, start=0, stop=sys.maxsize, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Return index of first occurrence of v in the array.\n"
|
|
"\n"
|
|
"Raise ValueError if the value is not present.");
|
|
|
|
#define ARRAY_ARRAY_INDEX_METHODDEF \
|
|
{"index", _PyCFunction_CAST(array_array_index), METH_FASTCALL, array_array_index__doc__},
|
|
|
|
static PyObject *
|
|
array_array_index_impl(arrayobject *self, PyObject *v, Py_ssize_t start,
|
|
Py_ssize_t stop);
|
|
|
|
static PyObject *
|
|
array_array_index(arrayobject *self, PyObject *const *args, Py_ssize_t nargs)
|
|
{
|
|
PyObject *return_value = NULL;
|
|
PyObject *v;
|
|
Py_ssize_t start = 0;
|
|
Py_ssize_t stop = PY_SSIZE_T_MAX;
|
|
|
|
if (!_PyArg_CheckPositional("index", nargs, 1, 3)) {
|
|
goto exit;
|
|
}
|
|
v = args[0];
|
|
if (nargs < 2) {
|
|
goto skip_optional;
|
|
}
|
|
if (!_PyEval_SliceIndexNotNone(args[1], &start)) {
|
|
goto exit;
|
|
}
|
|
if (nargs < 3) {
|
|
goto skip_optional;
|
|
}
|
|
if (!_PyEval_SliceIndexNotNone(args[2], &stop)) {
|
|
goto exit;
|
|
}
|
|
skip_optional:
|
|
return_value = array_array_index_impl(self, v, start, stop);
|
|
|
|
exit:
|
|
return return_value;
|
|
}
|
|
|
|
PyDoc_STRVAR(array_array_remove__doc__,
|
|
"remove($self, v, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Remove the first occurrence of v in the array.");
|
|
|
|
#define ARRAY_ARRAY_REMOVE_METHODDEF \
|
|
{"remove", (PyCFunction)array_array_remove, METH_O, array_array_remove__doc__},
|
|
|
|
PyDoc_STRVAR(array_array_pop__doc__,
|
|
"pop($self, i=-1, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Return the i-th element and delete it from the array.\n"
|
|
"\n"
|
|
"i defaults to -1.");
|
|
|
|
#define ARRAY_ARRAY_POP_METHODDEF \
|
|
{"pop", _PyCFunction_CAST(array_array_pop), METH_FASTCALL, array_array_pop__doc__},
|
|
|
|
static PyObject *
|
|
array_array_pop_impl(arrayobject *self, Py_ssize_t i);
|
|
|
|
static PyObject *
|
|
array_array_pop(arrayobject *self, PyObject *const *args, Py_ssize_t nargs)
|
|
{
|
|
PyObject *return_value = NULL;
|
|
Py_ssize_t i = -1;
|
|
|
|
if (!_PyArg_CheckPositional("pop", nargs, 0, 1)) {
|
|
goto exit;
|
|
}
|
|
if (nargs < 1) {
|
|
goto skip_optional;
|
|
}
|
|
{
|
|
Py_ssize_t ival = -1;
|
|
PyObject *iobj = _PyNumber_Index(args[0]);
|
|
if (iobj != NULL) {
|
|
ival = PyLong_AsSsize_t(iobj);
|
|
Py_DECREF(iobj);
|
|
}
|
|
if (ival == -1 && PyErr_Occurred()) {
|
|
goto exit;
|
|
}
|
|
i = ival;
|
|
}
|
|
skip_optional:
|
|
return_value = array_array_pop_impl(self, i);
|
|
|
|
exit:
|
|
return return_value;
|
|
}
|
|
|
|
PyDoc_STRVAR(array_array_extend__doc__,
|
|
"extend($self, bb, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Append items to the end of the array.");
|
|
|
|
#define ARRAY_ARRAY_EXTEND_METHODDEF \
|
|
{"extend", _PyCFunction_CAST(array_array_extend), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, array_array_extend__doc__},
|
|
|
|
static PyObject *
|
|
array_array_extend_impl(arrayobject *self, PyTypeObject *cls, PyObject *bb);
|
|
|
|
static PyObject *
|
|
array_array_extend(arrayobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
|
{
|
|
PyObject *return_value = NULL;
|
|
#if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
|
|
# define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
|
|
#else
|
|
# define KWTUPLE NULL
|
|
#endif
|
|
|
|
static const char * const _keywords[] = {"", NULL};
|
|
static _PyArg_Parser _parser = {
|
|
.keywords = _keywords,
|
|
.fname = "extend",
|
|
.kwtuple = KWTUPLE,
|
|
};
|
|
#undef KWTUPLE
|
|
PyObject *argsbuf[1];
|
|
PyObject *bb;
|
|
|
|
args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
|
|
if (!args) {
|
|
goto exit;
|
|
}
|
|
bb = args[0];
|
|
return_value = array_array_extend_impl(self, cls, bb);
|
|
|
|
exit:
|
|
return return_value;
|
|
}
|
|
|
|
PyDoc_STRVAR(array_array_insert__doc__,
|
|
"insert($self, i, v, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Insert a new item v into the array before position i.");
|
|
|
|
#define ARRAY_ARRAY_INSERT_METHODDEF \
|
|
{"insert", _PyCFunction_CAST(array_array_insert), METH_FASTCALL, array_array_insert__doc__},
|
|
|
|
static PyObject *
|
|
array_array_insert_impl(arrayobject *self, Py_ssize_t i, PyObject *v);
|
|
|
|
static PyObject *
|
|
array_array_insert(arrayobject *self, PyObject *const *args, Py_ssize_t nargs)
|
|
{
|
|
PyObject *return_value = NULL;
|
|
Py_ssize_t i;
|
|
PyObject *v;
|
|
|
|
if (!_PyArg_CheckPositional("insert", nargs, 2, 2)) {
|
|
goto exit;
|
|
}
|
|
{
|
|
Py_ssize_t ival = -1;
|
|
PyObject *iobj = _PyNumber_Index(args[0]);
|
|
if (iobj != NULL) {
|
|
ival = PyLong_AsSsize_t(iobj);
|
|
Py_DECREF(iobj);
|
|
}
|
|
if (ival == -1 && PyErr_Occurred()) {
|
|
goto exit;
|
|
}
|
|
i = ival;
|
|
}
|
|
v = args[1];
|
|
return_value = array_array_insert_impl(self, i, v);
|
|
|
|
exit:
|
|
return return_value;
|
|
}
|
|
|
|
PyDoc_STRVAR(array_array_buffer_info__doc__,
|
|
"buffer_info($self, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Return a tuple (address, length) giving the current memory address and the length in items of the buffer used to hold array\'s contents.\n"
|
|
"\n"
|
|
"The length should be multiplied by the itemsize attribute to calculate\n"
|
|
"the buffer length in bytes.");
|
|
|
|
#define ARRAY_ARRAY_BUFFER_INFO_METHODDEF \
|
|
{"buffer_info", (PyCFunction)array_array_buffer_info, METH_NOARGS, array_array_buffer_info__doc__},
|
|
|
|
static PyObject *
|
|
array_array_buffer_info_impl(arrayobject *self);
|
|
|
|
static PyObject *
|
|
array_array_buffer_info(arrayobject *self, PyObject *Py_UNUSED(ignored))
|
|
{
|
|
return array_array_buffer_info_impl(self);
|
|
}
|
|
|
|
PyDoc_STRVAR(array_array_append__doc__,
|
|
"append($self, v, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Append new value v to the end of the array.");
|
|
|
|
#define ARRAY_ARRAY_APPEND_METHODDEF \
|
|
{"append", (PyCFunction)array_array_append, METH_O, array_array_append__doc__},
|
|
|
|
PyDoc_STRVAR(array_array_byteswap__doc__,
|
|
"byteswap($self, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Byteswap all items of the array.\n"
|
|
"\n"
|
|
"If the items in the array are not 1, 2, 4, or 8 bytes in size, RuntimeError is\n"
|
|
"raised.");
|
|
|
|
#define ARRAY_ARRAY_BYTESWAP_METHODDEF \
|
|
{"byteswap", (PyCFunction)array_array_byteswap, METH_NOARGS, array_array_byteswap__doc__},
|
|
|
|
static PyObject *
|
|
array_array_byteswap_impl(arrayobject *self);
|
|
|
|
static PyObject *
|
|
array_array_byteswap(arrayobject *self, PyObject *Py_UNUSED(ignored))
|
|
{
|
|
return array_array_byteswap_impl(self);
|
|
}
|
|
|
|
PyDoc_STRVAR(array_array_reverse__doc__,
|
|
"reverse($self, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Reverse the order of the items in the array.");
|
|
|
|
#define ARRAY_ARRAY_REVERSE_METHODDEF \
|
|
{"reverse", (PyCFunction)array_array_reverse, METH_NOARGS, array_array_reverse__doc__},
|
|
|
|
static PyObject *
|
|
array_array_reverse_impl(arrayobject *self);
|
|
|
|
static PyObject *
|
|
array_array_reverse(arrayobject *self, PyObject *Py_UNUSED(ignored))
|
|
{
|
|
return array_array_reverse_impl(self);
|
|
}
|
|
|
|
PyDoc_STRVAR(array_array_fromfile__doc__,
|
|
"fromfile($self, f, n, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Read n objects from the file object f and append them to the end of the array.");
|
|
|
|
#define ARRAY_ARRAY_FROMFILE_METHODDEF \
|
|
{"fromfile", _PyCFunction_CAST(array_array_fromfile), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, array_array_fromfile__doc__},
|
|
|
|
static PyObject *
|
|
array_array_fromfile_impl(arrayobject *self, PyTypeObject *cls, PyObject *f,
|
|
Py_ssize_t n);
|
|
|
|
static PyObject *
|
|
array_array_fromfile(arrayobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
|
{
|
|
PyObject *return_value = NULL;
|
|
#if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
|
|
# define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
|
|
#else
|
|
# define KWTUPLE NULL
|
|
#endif
|
|
|
|
static const char * const _keywords[] = {"", "", NULL};
|
|
static _PyArg_Parser _parser = {
|
|
.keywords = _keywords,
|
|
.fname = "fromfile",
|
|
.kwtuple = KWTUPLE,
|
|
};
|
|
#undef KWTUPLE
|
|
PyObject *argsbuf[2];
|
|
PyObject *f;
|
|
Py_ssize_t n;
|
|
|
|
args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 2, 2, 0, argsbuf);
|
|
if (!args) {
|
|
goto exit;
|
|
}
|
|
f = args[0];
|
|
{
|
|
Py_ssize_t ival = -1;
|
|
PyObject *iobj = _PyNumber_Index(args[1]);
|
|
if (iobj != NULL) {
|
|
ival = PyLong_AsSsize_t(iobj);
|
|
Py_DECREF(iobj);
|
|
}
|
|
if (ival == -1 && PyErr_Occurred()) {
|
|
goto exit;
|
|
}
|
|
n = ival;
|
|
}
|
|
return_value = array_array_fromfile_impl(self, cls, f, n);
|
|
|
|
exit:
|
|
return return_value;
|
|
}
|
|
|
|
PyDoc_STRVAR(array_array_tofile__doc__,
|
|
"tofile($self, f, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Write all items (as machine values) to the file object f.");
|
|
|
|
#define ARRAY_ARRAY_TOFILE_METHODDEF \
|
|
{"tofile", _PyCFunction_CAST(array_array_tofile), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, array_array_tofile__doc__},
|
|
|
|
static PyObject *
|
|
array_array_tofile_impl(arrayobject *self, PyTypeObject *cls, PyObject *f);
|
|
|
|
static PyObject *
|
|
array_array_tofile(arrayobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
|
{
|
|
PyObject *return_value = NULL;
|
|
#if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
|
|
# define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
|
|
#else
|
|
# define KWTUPLE NULL
|
|
#endif
|
|
|
|
static const char * const _keywords[] = {"", NULL};
|
|
static _PyArg_Parser _parser = {
|
|
.keywords = _keywords,
|
|
.fname = "tofile",
|
|
.kwtuple = KWTUPLE,
|
|
};
|
|
#undef KWTUPLE
|
|
PyObject *argsbuf[1];
|
|
PyObject *f;
|
|
|
|
args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
|
|
if (!args) {
|
|
goto exit;
|
|
}
|
|
f = args[0];
|
|
return_value = array_array_tofile_impl(self, cls, f);
|
|
|
|
exit:
|
|
return return_value;
|
|
}
|
|
|
|
PyDoc_STRVAR(array_array_fromlist__doc__,
|
|
"fromlist($self, list, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Append items to array from list.");
|
|
|
|
#define ARRAY_ARRAY_FROMLIST_METHODDEF \
|
|
{"fromlist", (PyCFunction)array_array_fromlist, METH_O, array_array_fromlist__doc__},
|
|
|
|
PyDoc_STRVAR(array_array_tolist__doc__,
|
|
"tolist($self, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Convert array to an ordinary list with the same items.");
|
|
|
|
#define ARRAY_ARRAY_TOLIST_METHODDEF \
|
|
{"tolist", (PyCFunction)array_array_tolist, METH_NOARGS, array_array_tolist__doc__},
|
|
|
|
static PyObject *
|
|
array_array_tolist_impl(arrayobject *self);
|
|
|
|
static PyObject *
|
|
array_array_tolist(arrayobject *self, PyObject *Py_UNUSED(ignored))
|
|
{
|
|
return array_array_tolist_impl(self);
|
|
}
|
|
|
|
PyDoc_STRVAR(array_array_frombytes__doc__,
|
|
"frombytes($self, buffer, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Appends items from the string, interpreting it as an array of machine values, as if it had been read from a file using the fromfile() method.");
|
|
|
|
#define ARRAY_ARRAY_FROMBYTES_METHODDEF \
|
|
{"frombytes", (PyCFunction)array_array_frombytes, METH_O, array_array_frombytes__doc__},
|
|
|
|
static PyObject *
|
|
array_array_frombytes_impl(arrayobject *self, Py_buffer *buffer);
|
|
|
|
static PyObject *
|
|
array_array_frombytes(arrayobject *self, PyObject *arg)
|
|
{
|
|
PyObject *return_value = NULL;
|
|
Py_buffer buffer = {NULL, NULL};
|
|
|
|
if (PyObject_GetBuffer(arg, &buffer, PyBUF_SIMPLE) != 0) {
|
|
goto exit;
|
|
}
|
|
return_value = array_array_frombytes_impl(self, &buffer);
|
|
|
|
exit:
|
|
/* Cleanup for buffer */
|
|
if (buffer.obj) {
|
|
PyBuffer_Release(&buffer);
|
|
}
|
|
|
|
return return_value;
|
|
}
|
|
|
|
PyDoc_STRVAR(array_array_tobytes__doc__,
|
|
"tobytes($self, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Convert the array to an array of machine values and return the bytes representation.");
|
|
|
|
#define ARRAY_ARRAY_TOBYTES_METHODDEF \
|
|
{"tobytes", (PyCFunction)array_array_tobytes, METH_NOARGS, array_array_tobytes__doc__},
|
|
|
|
static PyObject *
|
|
array_array_tobytes_impl(arrayobject *self);
|
|
|
|
static PyObject *
|
|
array_array_tobytes(arrayobject *self, PyObject *Py_UNUSED(ignored))
|
|
{
|
|
return array_array_tobytes_impl(self);
|
|
}
|
|
|
|
PyDoc_STRVAR(array_array_fromunicode__doc__,
|
|
"fromunicode($self, ustr, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Extends this array with data from the unicode string ustr.\n"
|
|
"\n"
|
|
"The array must be a unicode type array; otherwise a ValueError is raised.\n"
|
|
"Use array.frombytes(ustr.encode(...)) to append Unicode data to an array of\n"
|
|
"some other type.");
|
|
|
|
#define ARRAY_ARRAY_FROMUNICODE_METHODDEF \
|
|
{"fromunicode", (PyCFunction)array_array_fromunicode, METH_O, array_array_fromunicode__doc__},
|
|
|
|
static PyObject *
|
|
array_array_fromunicode_impl(arrayobject *self, PyObject *ustr);
|
|
|
|
static PyObject *
|
|
array_array_fromunicode(arrayobject *self, PyObject *arg)
|
|
{
|
|
PyObject *return_value = NULL;
|
|
PyObject *ustr;
|
|
|
|
if (!PyUnicode_Check(arg)) {
|
|
_PyArg_BadArgument("fromunicode", "argument", "str", arg);
|
|
goto exit;
|
|
}
|
|
ustr = arg;
|
|
return_value = array_array_fromunicode_impl(self, ustr);
|
|
|
|
exit:
|
|
return return_value;
|
|
}
|
|
|
|
PyDoc_STRVAR(array_array_tounicode__doc__,
|
|
"tounicode($self, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Extends this array with data from the unicode string ustr.\n"
|
|
"\n"
|
|
"Convert the array to a unicode string. The array must be a unicode type array;\n"
|
|
"otherwise a ValueError is raised. Use array.tobytes().decode() to obtain a\n"
|
|
"unicode string from an array of some other type.");
|
|
|
|
#define ARRAY_ARRAY_TOUNICODE_METHODDEF \
|
|
{"tounicode", (PyCFunction)array_array_tounicode, METH_NOARGS, array_array_tounicode__doc__},
|
|
|
|
static PyObject *
|
|
array_array_tounicode_impl(arrayobject *self);
|
|
|
|
static PyObject *
|
|
array_array_tounicode(arrayobject *self, PyObject *Py_UNUSED(ignored))
|
|
{
|
|
return array_array_tounicode_impl(self);
|
|
}
|
|
|
|
PyDoc_STRVAR(array_array___sizeof____doc__,
|
|
"__sizeof__($self, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Size of the array in memory, in bytes.");
|
|
|
|
#define ARRAY_ARRAY___SIZEOF___METHODDEF \
|
|
{"__sizeof__", (PyCFunction)array_array___sizeof__, METH_NOARGS, array_array___sizeof____doc__},
|
|
|
|
static PyObject *
|
|
array_array___sizeof___impl(arrayobject *self);
|
|
|
|
static PyObject *
|
|
array_array___sizeof__(arrayobject *self, PyObject *Py_UNUSED(ignored))
|
|
{
|
|
return array_array___sizeof___impl(self);
|
|
}
|
|
|
|
PyDoc_STRVAR(array__array_reconstructor__doc__,
|
|
"_array_reconstructor($module, arraytype, typecode, mformat_code, items,\n"
|
|
" /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Internal. Used for pickling support.");
|
|
|
|
#define ARRAY__ARRAY_RECONSTRUCTOR_METHODDEF \
|
|
{"_array_reconstructor", _PyCFunction_CAST(array__array_reconstructor), METH_FASTCALL, array__array_reconstructor__doc__},
|
|
|
|
static PyObject *
|
|
array__array_reconstructor_impl(PyObject *module, PyTypeObject *arraytype,
|
|
int typecode,
|
|
enum machine_format_code mformat_code,
|
|
PyObject *items);
|
|
|
|
static PyObject *
|
|
array__array_reconstructor(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
|
{
|
|
PyObject *return_value = NULL;
|
|
PyTypeObject *arraytype;
|
|
int typecode;
|
|
enum machine_format_code mformat_code;
|
|
PyObject *items;
|
|
|
|
if (!_PyArg_CheckPositional("_array_reconstructor", nargs, 4, 4)) {
|
|
goto exit;
|
|
}
|
|
arraytype = (PyTypeObject *)args[0];
|
|
if (!PyUnicode_Check(args[1])) {
|
|
_PyArg_BadArgument("_array_reconstructor", "argument 2", "a unicode character", args[1]);
|
|
goto exit;
|
|
}
|
|
if (PyUnicode_GET_LENGTH(args[1]) != 1) {
|
|
PyErr_Format(PyExc_TypeError,
|
|
"_array_reconstructor(): argument 2 must be a unicode character, "
|
|
"not a string of length %zd",
|
|
PyUnicode_GET_LENGTH(args[1]));
|
|
goto exit;
|
|
}
|
|
typecode = PyUnicode_READ_CHAR(args[1], 0);
|
|
mformat_code = PyLong_AsInt(args[2]);
|
|
if (mformat_code == -1 && PyErr_Occurred()) {
|
|
goto exit;
|
|
}
|
|
items = args[3];
|
|
return_value = array__array_reconstructor_impl(module, arraytype, typecode, mformat_code, items);
|
|
|
|
exit:
|
|
return return_value;
|
|
}
|
|
|
|
PyDoc_STRVAR(array_array___reduce_ex____doc__,
|
|
"__reduce_ex__($self, value, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Return state information for pickling.");
|
|
|
|
#define ARRAY_ARRAY___REDUCE_EX___METHODDEF \
|
|
{"__reduce_ex__", _PyCFunction_CAST(array_array___reduce_ex__), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, array_array___reduce_ex____doc__},
|
|
|
|
static PyObject *
|
|
array_array___reduce_ex___impl(arrayobject *self, PyTypeObject *cls,
|
|
PyObject *value);
|
|
|
|
static PyObject *
|
|
array_array___reduce_ex__(arrayobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
|
{
|
|
PyObject *return_value = NULL;
|
|
#if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
|
|
# define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
|
|
#else
|
|
# define KWTUPLE NULL
|
|
#endif
|
|
|
|
static const char * const _keywords[] = {"", NULL};
|
|
static _PyArg_Parser _parser = {
|
|
.keywords = _keywords,
|
|
.fname = "__reduce_ex__",
|
|
.kwtuple = KWTUPLE,
|
|
};
|
|
#undef KWTUPLE
|
|
PyObject *argsbuf[1];
|
|
PyObject *value;
|
|
|
|
args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 1, 0, argsbuf);
|
|
if (!args) {
|
|
goto exit;
|
|
}
|
|
value = args[0];
|
|
return_value = array_array___reduce_ex___impl(self, cls, value);
|
|
|
|
exit:
|
|
return return_value;
|
|
}
|
|
|
|
PyDoc_STRVAR(array_arrayiterator___reduce____doc__,
|
|
"__reduce__($self, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Return state information for pickling.");
|
|
|
|
#define ARRAY_ARRAYITERATOR___REDUCE___METHODDEF \
|
|
{"__reduce__", _PyCFunction_CAST(array_arrayiterator___reduce__), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, array_arrayiterator___reduce____doc__},
|
|
|
|
static PyObject *
|
|
array_arrayiterator___reduce___impl(arrayiterobject *self, PyTypeObject *cls);
|
|
|
|
static PyObject *
|
|
array_arrayiterator___reduce__(arrayiterobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
|
{
|
|
if (nargs || (kwnames && PyTuple_GET_SIZE(kwnames))) {
|
|
PyErr_SetString(PyExc_TypeError, "__reduce__() takes no arguments");
|
|
return NULL;
|
|
}
|
|
return array_arrayiterator___reduce___impl(self, cls);
|
|
}
|
|
|
|
PyDoc_STRVAR(array_arrayiterator___setstate____doc__,
|
|
"__setstate__($self, state, /)\n"
|
|
"--\n"
|
|
"\n"
|
|
"Set state information for unpickling.");
|
|
|
|
#define ARRAY_ARRAYITERATOR___SETSTATE___METHODDEF \
|
|
{"__setstate__", (PyCFunction)array_arrayiterator___setstate__, METH_O, array_arrayiterator___setstate____doc__},
|
|
/*[clinic end generated code: output=ecd63acd7924c223 input=a9049054013a1b77]*/
|