2015-04-03 17:53:51 -03:00
|
|
|
/*[clinic input]
|
|
|
|
preserve
|
|
|
|
[clinic start generated code]*/
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_abs__doc__,
|
|
|
|
"abs($module, x, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Return the absolute value of the argument.");
|
|
|
|
|
|
|
|
#define BUILTIN_ABS_METHODDEF \
|
|
|
|
{"abs", (PyCFunction)builtin_abs, METH_O, builtin_abs__doc__},
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_all__doc__,
|
|
|
|
"all($module, iterable, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Return True if bool(x) is True for all values x in the iterable.\n"
|
|
|
|
"\n"
|
|
|
|
"If the iterable is empty, return True.");
|
|
|
|
|
|
|
|
#define BUILTIN_ALL_METHODDEF \
|
|
|
|
{"all", (PyCFunction)builtin_all, METH_O, builtin_all__doc__},
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_any__doc__,
|
|
|
|
"any($module, iterable, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Return True if bool(x) is True for any x in the iterable.\n"
|
|
|
|
"\n"
|
|
|
|
"If the iterable is empty, return False.");
|
|
|
|
|
|
|
|
#define BUILTIN_ANY_METHODDEF \
|
|
|
|
{"any", (PyCFunction)builtin_any, METH_O, builtin_any__doc__},
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_ascii__doc__,
|
|
|
|
"ascii($module, obj, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Return an ASCII-only representation of an object.\n"
|
|
|
|
"\n"
|
|
|
|
"As repr(), return a string containing a printable representation of an\n"
|
|
|
|
"object, but escape the non-ASCII characters in the string returned by\n"
|
|
|
|
"repr() using \\\\x, \\\\u or \\\\U escapes. This generates a string similar\n"
|
|
|
|
"to that returned by repr() in Python 2.");
|
|
|
|
|
|
|
|
#define BUILTIN_ASCII_METHODDEF \
|
|
|
|
{"ascii", (PyCFunction)builtin_ascii, METH_O, builtin_ascii__doc__},
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_bin__doc__,
|
|
|
|
"bin($module, number, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Return the binary representation of an integer.\n"
|
|
|
|
"\n"
|
|
|
|
" >>> bin(2796202)\n"
|
|
|
|
" \'0b1010101010101010101010\'");
|
|
|
|
|
|
|
|
#define BUILTIN_BIN_METHODDEF \
|
|
|
|
{"bin", (PyCFunction)builtin_bin, METH_O, builtin_bin__doc__},
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_callable__doc__,
|
|
|
|
"callable($module, obj, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Return whether the object is callable (i.e., some kind of function).\n"
|
|
|
|
"\n"
|
|
|
|
"Note that classes are callable, as are instances of classes with a\n"
|
|
|
|
"__call__() method.");
|
|
|
|
|
|
|
|
#define BUILTIN_CALLABLE_METHODDEF \
|
|
|
|
{"callable", (PyCFunction)builtin_callable, METH_O, builtin_callable__doc__},
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_format__doc__,
|
|
|
|
"format($module, value, format_spec=\'\', /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Return value.__format__(format_spec)\n"
|
|
|
|
"\n"
|
2017-05-28 22:02:26 -03:00
|
|
|
"format_spec defaults to the empty string.\n"
|
|
|
|
"See the Format Specification Mini-Language section of help(\'FORMATTING\') for\n"
|
|
|
|
"details.");
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
#define BUILTIN_FORMAT_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"format", (PyCFunction)(void(*)(void))builtin_format, METH_FASTCALL, builtin_format__doc__},
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
builtin_format_impl(PyObject *module, PyObject *value, PyObject *format_spec);
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
builtin_format(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2015-04-03 17:53:51 -03:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
PyObject *value;
|
|
|
|
PyObject *format_spec = NULL;
|
|
|
|
|
2019-01-11 10:01:14 -04:00
|
|
|
if (!_PyArg_CheckPositional("format", nargs, 1, 2)) {
|
2017-01-16 20:35:17 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2019-01-11 10:01:14 -04:00
|
|
|
value = args[0];
|
|
|
|
if (nargs < 2) {
|
|
|
|
goto skip_optional;
|
|
|
|
}
|
|
|
|
if (!PyUnicode_Check(args[1])) {
|
2019-08-29 12:29:59 -03:00
|
|
|
_PyArg_BadArgument("format", "argument 2", "str", args[1]);
|
2019-01-11 10:01:14 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (PyUnicode_READY(args[1]) == -1) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
format_spec = args[1];
|
|
|
|
skip_optional:
|
2015-04-03 17:53:51 -03:00
|
|
|
return_value = builtin_format_impl(module, value, format_spec);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_chr__doc__,
|
|
|
|
"chr($module, i, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.");
|
|
|
|
|
|
|
|
#define BUILTIN_CHR_METHODDEF \
|
2015-04-03 18:12:11 -03:00
|
|
|
{"chr", (PyCFunction)builtin_chr, METH_O, builtin_chr__doc__},
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
builtin_chr_impl(PyObject *module, int i);
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
builtin_chr(PyObject *module, PyObject *arg)
|
2015-04-03 17:53:51 -03:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
int i;
|
|
|
|
|
2018-12-25 07:23:47 -04:00
|
|
|
if (PyFloat_Check(arg)) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
i = _PyLong_AsInt(arg);
|
|
|
|
if (i == -1 && PyErr_Occurred()) {
|
2015-04-03 17:53:51 -03:00
|
|
|
goto exit;
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2015-04-03 17:53:51 -03:00
|
|
|
return_value = builtin_chr_impl(module, i);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_compile__doc__,
|
2015-05-30 05:30:39 -03:00
|
|
|
"compile($module, /, source, filename, mode, flags=0,\n"
|
2019-06-12 11:17:05 -03:00
|
|
|
" dont_inherit=False, optimize=-1, *, _feature_version=-1)\n"
|
2015-04-03 17:53:51 -03:00
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Compile source into a code object that can be executed by exec() or eval().\n"
|
|
|
|
"\n"
|
|
|
|
"The source code may represent a Python module, statement or expression.\n"
|
|
|
|
"The filename will be used for run-time error messages.\n"
|
|
|
|
"The mode must be \'exec\' to compile a module, \'single\' to compile a\n"
|
|
|
|
"single (interactive) statement, or \'eval\' to compile an expression.\n"
|
|
|
|
"The flags argument, if present, controls which future statements influence\n"
|
|
|
|
"the compilation of the code.\n"
|
2015-05-30 05:30:39 -03:00
|
|
|
"The dont_inherit argument, if true, stops the compilation inheriting\n"
|
2015-04-03 17:53:51 -03:00
|
|
|
"the effects of any future statements in effect in the code calling\n"
|
2015-05-30 05:30:39 -03:00
|
|
|
"compile; if absent or false these statements do influence the compilation,\n"
|
2015-04-03 17:53:51 -03:00
|
|
|
"in addition to any features explicitly specified.");
|
|
|
|
|
|
|
|
#define BUILTIN_COMPILE_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"compile", (PyCFunction)(void(*)(void))builtin_compile, METH_FASTCALL|METH_KEYWORDS, builtin_compile__doc__},
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename,
|
|
|
|
const char *mode, int flags, int dont_inherit,
|
2019-03-07 16:38:08 -04:00
|
|
|
int optimize, int feature_version);
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
builtin_compile(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
2015-04-03 17:53:51 -03:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
2019-06-12 11:17:05 -03:00
|
|
|
static const char * const _keywords[] = {"source", "filename", "mode", "flags", "dont_inherit", "optimize", "_feature_version", NULL};
|
2019-03-14 05:32:22 -03:00
|
|
|
static _PyArg_Parser _parser = {NULL, _keywords, "compile", 0};
|
|
|
|
PyObject *argsbuf[7];
|
|
|
|
Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 3;
|
2015-04-03 17:53:51 -03:00
|
|
|
PyObject *source;
|
|
|
|
PyObject *filename;
|
|
|
|
const char *mode;
|
|
|
|
int flags = 0;
|
|
|
|
int dont_inherit = 0;
|
|
|
|
int optimize = -1;
|
2019-03-07 16:38:08 -04:00
|
|
|
int feature_version = -1;
|
2015-04-03 17:53:51 -03:00
|
|
|
|
2019-06-12 11:17:05 -03:00
|
|
|
args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 3, 6, 0, argsbuf);
|
2019-03-14 05:32:22 -03:00
|
|
|
if (!args) {
|
2015-04-03 17:53:51 -03:00
|
|
|
goto exit;
|
2016-06-09 10:16:06 -03:00
|
|
|
}
|
2019-03-14 05:32:22 -03:00
|
|
|
source = args[0];
|
|
|
|
if (!PyUnicode_FSDecoder(args[1], &filename)) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!PyUnicode_Check(args[2])) {
|
2019-08-29 12:29:59 -03:00
|
|
|
_PyArg_BadArgument("compile", "argument 'mode'", "str", args[2]);
|
2019-03-14 05:32:22 -03:00
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
Py_ssize_t mode_length;
|
|
|
|
mode = PyUnicode_AsUTF8AndSize(args[2], &mode_length);
|
|
|
|
if (mode == NULL) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (strlen(mode) != (size_t)mode_length) {
|
|
|
|
PyErr_SetString(PyExc_ValueError, "embedded null character");
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!noptargs) {
|
|
|
|
goto skip_optional_pos;
|
|
|
|
}
|
|
|
|
if (args[3]) {
|
|
|
|
if (PyFloat_Check(args[3])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
flags = _PyLong_AsInt(args[3]);
|
|
|
|
if (flags == -1 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!--noptargs) {
|
|
|
|
goto skip_optional_pos;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (args[4]) {
|
|
|
|
if (PyFloat_Check(args[4])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
dont_inherit = _PyLong_AsInt(args[4]);
|
|
|
|
if (dont_inherit == -1 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!--noptargs) {
|
|
|
|
goto skip_optional_pos;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (args[5]) {
|
|
|
|
if (PyFloat_Check(args[5])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
optimize = _PyLong_AsInt(args[5]);
|
|
|
|
if (optimize == -1 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
if (!--noptargs) {
|
|
|
|
goto skip_optional_pos;
|
|
|
|
}
|
|
|
|
}
|
2019-06-12 11:17:05 -03:00
|
|
|
skip_optional_pos:
|
|
|
|
if (!noptargs) {
|
|
|
|
goto skip_optional_kwonly;
|
|
|
|
}
|
2019-03-14 05:32:22 -03:00
|
|
|
if (PyFloat_Check(args[6])) {
|
|
|
|
PyErr_SetString(PyExc_TypeError,
|
|
|
|
"integer argument expected, got float" );
|
|
|
|
goto exit;
|
|
|
|
}
|
|
|
|
feature_version = _PyLong_AsInt(args[6]);
|
|
|
|
if (feature_version == -1 && PyErr_Occurred()) {
|
|
|
|
goto exit;
|
|
|
|
}
|
2019-06-12 11:17:05 -03:00
|
|
|
skip_optional_kwonly:
|
2019-03-07 16:38:08 -04:00
|
|
|
return_value = builtin_compile_impl(module, source, filename, mode, flags, dont_inherit, optimize, feature_version);
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
exit:
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_divmod__doc__,
|
|
|
|
"divmod($module, x, y, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
2016-05-01 14:33:24 -03:00
|
|
|
"Return the tuple (x//y, x%y). Invariant: div*y + mod == x.");
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
#define BUILTIN_DIVMOD_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"divmod", (PyCFunction)(void(*)(void))builtin_divmod, METH_FASTCALL, builtin_divmod__doc__},
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
builtin_divmod_impl(PyObject *module, PyObject *x, PyObject *y);
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
builtin_divmod(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2015-04-03 17:53:51 -03:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
PyObject *x;
|
|
|
|
PyObject *y;
|
|
|
|
|
2019-01-11 12:01:42 -04:00
|
|
|
if (!_PyArg_CheckPositional("divmod", nargs, 2, 2)) {
|
2017-01-16 21:21:47 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2019-01-11 12:01:42 -04:00
|
|
|
x = args[0];
|
|
|
|
y = args[1];
|
2015-04-03 17:53:51 -03:00
|
|
|
return_value = builtin_divmod_impl(module, x, y);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_eval__doc__,
|
|
|
|
"eval($module, source, globals=None, locals=None, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Evaluate the given source in the context of globals and locals.\n"
|
|
|
|
"\n"
|
|
|
|
"The source may be a string representing a Python expression\n"
|
|
|
|
"or a code object as returned by compile().\n"
|
|
|
|
"The globals must be a dictionary and locals can be any mapping,\n"
|
|
|
|
"defaulting to the current globals and locals.\n"
|
|
|
|
"If only globals is given, locals defaults to it.");
|
|
|
|
|
|
|
|
#define BUILTIN_EVAL_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"eval", (PyCFunction)(void(*)(void))builtin_eval, METH_FASTCALL, builtin_eval__doc__},
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals,
|
2015-04-14 19:07:59 -03:00
|
|
|
PyObject *locals);
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
builtin_eval(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2015-04-03 17:53:51 -03:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
PyObject *source;
|
|
|
|
PyObject *globals = Py_None;
|
|
|
|
PyObject *locals = Py_None;
|
|
|
|
|
2019-01-11 12:01:42 -04:00
|
|
|
if (!_PyArg_CheckPositional("eval", nargs, 1, 3)) {
|
2017-01-16 21:21:47 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2019-01-11 12:01:42 -04:00
|
|
|
source = args[0];
|
|
|
|
if (nargs < 2) {
|
|
|
|
goto skip_optional;
|
|
|
|
}
|
|
|
|
globals = args[1];
|
|
|
|
if (nargs < 3) {
|
|
|
|
goto skip_optional;
|
|
|
|
}
|
|
|
|
locals = args[2];
|
|
|
|
skip_optional:
|
2015-04-03 17:53:51 -03:00
|
|
|
return_value = builtin_eval_impl(module, source, globals, locals);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_exec__doc__,
|
|
|
|
"exec($module, source, globals=None, locals=None, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Execute the given source in the context of globals and locals.\n"
|
|
|
|
"\n"
|
|
|
|
"The source may be a string representing one or more Python statements\n"
|
|
|
|
"or a code object as returned by compile().\n"
|
|
|
|
"The globals must be a dictionary and locals can be any mapping,\n"
|
|
|
|
"defaulting to the current globals and locals.\n"
|
|
|
|
"If only globals is given, locals defaults to it.");
|
|
|
|
|
|
|
|
#define BUILTIN_EXEC_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"exec", (PyCFunction)(void(*)(void))builtin_exec, METH_FASTCALL, builtin_exec__doc__},
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals,
|
2015-04-14 19:07:59 -03:00
|
|
|
PyObject *locals);
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
builtin_exec(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2015-04-03 17:53:51 -03:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
PyObject *source;
|
|
|
|
PyObject *globals = Py_None;
|
|
|
|
PyObject *locals = Py_None;
|
|
|
|
|
2019-01-11 12:01:42 -04:00
|
|
|
if (!_PyArg_CheckPositional("exec", nargs, 1, 3)) {
|
2017-01-16 21:21:47 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2019-01-11 12:01:42 -04:00
|
|
|
source = args[0];
|
|
|
|
if (nargs < 2) {
|
|
|
|
goto skip_optional;
|
|
|
|
}
|
|
|
|
globals = args[1];
|
|
|
|
if (nargs < 3) {
|
|
|
|
goto skip_optional;
|
|
|
|
}
|
|
|
|
locals = args[2];
|
|
|
|
skip_optional:
|
2015-04-03 17:53:51 -03:00
|
|
|
return_value = builtin_exec_impl(module, source, globals, locals);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_globals__doc__,
|
|
|
|
"globals($module, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Return the dictionary containing the current scope\'s global variables.\n"
|
|
|
|
"\n"
|
|
|
|
"NOTE: Updates to this dictionary *will* affect name lookups in the current\n"
|
|
|
|
"global scope and vice-versa.");
|
|
|
|
|
|
|
|
#define BUILTIN_GLOBALS_METHODDEF \
|
|
|
|
{"globals", (PyCFunction)builtin_globals, METH_NOARGS, builtin_globals__doc__},
|
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
builtin_globals_impl(PyObject *module);
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
builtin_globals(PyObject *module, PyObject *Py_UNUSED(ignored))
|
2015-04-03 17:53:51 -03:00
|
|
|
{
|
|
|
|
return builtin_globals_impl(module);
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_hasattr__doc__,
|
|
|
|
"hasattr($module, obj, name, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Return whether the object has an attribute with the given name.\n"
|
|
|
|
"\n"
|
|
|
|
"This is done by calling getattr(obj, name) and catching AttributeError.");
|
|
|
|
|
|
|
|
#define BUILTIN_HASATTR_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"hasattr", (PyCFunction)(void(*)(void))builtin_hasattr, METH_FASTCALL, builtin_hasattr__doc__},
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
builtin_hasattr_impl(PyObject *module, PyObject *obj, PyObject *name);
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
builtin_hasattr(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2015-04-03 17:53:51 -03:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
PyObject *obj;
|
|
|
|
PyObject *name;
|
|
|
|
|
2019-01-11 12:01:42 -04:00
|
|
|
if (!_PyArg_CheckPositional("hasattr", nargs, 2, 2)) {
|
2017-01-16 21:21:47 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2019-01-11 12:01:42 -04:00
|
|
|
obj = args[0];
|
|
|
|
name = args[1];
|
2015-04-03 17:53:51 -03:00
|
|
|
return_value = builtin_hasattr_impl(module, obj, name);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_id__doc__,
|
|
|
|
"id($module, obj, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Return the identity of an object.\n"
|
|
|
|
"\n"
|
|
|
|
"This is guaranteed to be unique among simultaneously existing objects.\n"
|
|
|
|
"(CPython uses the object\'s memory address.)");
|
|
|
|
|
|
|
|
#define BUILTIN_ID_METHODDEF \
|
|
|
|
{"id", (PyCFunction)builtin_id, METH_O, builtin_id__doc__},
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_setattr__doc__,
|
|
|
|
"setattr($module, obj, name, value, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Sets the named attribute on the given object to the specified value.\n"
|
|
|
|
"\n"
|
|
|
|
"setattr(x, \'y\', v) is equivalent to ``x.y = v\'\'");
|
|
|
|
|
|
|
|
#define BUILTIN_SETATTR_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"setattr", (PyCFunction)(void(*)(void))builtin_setattr, METH_FASTCALL, builtin_setattr__doc__},
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
builtin_setattr_impl(PyObject *module, PyObject *obj, PyObject *name,
|
2015-04-14 19:07:59 -03:00
|
|
|
PyObject *value);
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
builtin_setattr(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2015-04-03 17:53:51 -03:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
PyObject *obj;
|
|
|
|
PyObject *name;
|
|
|
|
PyObject *value;
|
|
|
|
|
2019-01-11 12:01:42 -04:00
|
|
|
if (!_PyArg_CheckPositional("setattr", nargs, 3, 3)) {
|
2017-01-16 21:21:47 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2019-01-11 12:01:42 -04:00
|
|
|
obj = args[0];
|
|
|
|
name = args[1];
|
|
|
|
value = args[2];
|
2015-04-03 17:53:51 -03:00
|
|
|
return_value = builtin_setattr_impl(module, obj, name, value);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_delattr__doc__,
|
|
|
|
"delattr($module, obj, name, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Deletes the named attribute from the given object.\n"
|
|
|
|
"\n"
|
|
|
|
"delattr(x, \'y\') is equivalent to ``del x.y\'\'");
|
|
|
|
|
|
|
|
#define BUILTIN_DELATTR_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"delattr", (PyCFunction)(void(*)(void))builtin_delattr, METH_FASTCALL, builtin_delattr__doc__},
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
builtin_delattr_impl(PyObject *module, PyObject *obj, PyObject *name);
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
builtin_delattr(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2015-04-03 17:53:51 -03:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
PyObject *obj;
|
|
|
|
PyObject *name;
|
|
|
|
|
2019-01-11 12:01:42 -04:00
|
|
|
if (!_PyArg_CheckPositional("delattr", nargs, 2, 2)) {
|
2017-01-16 21:21:47 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2019-01-11 12:01:42 -04:00
|
|
|
obj = args[0];
|
|
|
|
name = args[1];
|
2015-04-03 17:53:51 -03:00
|
|
|
return_value = builtin_delattr_impl(module, obj, name);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_hash__doc__,
|
|
|
|
"hash($module, obj, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Return the hash value for the given object.\n"
|
|
|
|
"\n"
|
|
|
|
"Two objects that compare equal must also have the same hash value, but the\n"
|
|
|
|
"reverse is not necessarily true.");
|
|
|
|
|
|
|
|
#define BUILTIN_HASH_METHODDEF \
|
|
|
|
{"hash", (PyCFunction)builtin_hash, METH_O, builtin_hash__doc__},
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_hex__doc__,
|
|
|
|
"hex($module, number, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Return the hexadecimal representation of an integer.\n"
|
|
|
|
"\n"
|
|
|
|
" >>> hex(12648430)\n"
|
|
|
|
" \'0xc0ffee\'");
|
|
|
|
|
|
|
|
#define BUILTIN_HEX_METHODDEF \
|
|
|
|
{"hex", (PyCFunction)builtin_hex, METH_O, builtin_hex__doc__},
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_len__doc__,
|
|
|
|
"len($module, obj, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Return the number of items in a container.");
|
|
|
|
|
|
|
|
#define BUILTIN_LEN_METHODDEF \
|
|
|
|
{"len", (PyCFunction)builtin_len, METH_O, builtin_len__doc__},
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_locals__doc__,
|
|
|
|
"locals($module, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Return a dictionary containing the current scope\'s local variables.\n"
|
|
|
|
"\n"
|
|
|
|
"NOTE: Whether or not updates to this dictionary will affect name lookups in\n"
|
|
|
|
"the local scope and vice-versa is *implementation dependent* and not\n"
|
|
|
|
"covered by any backwards compatibility guarantees.");
|
|
|
|
|
|
|
|
#define BUILTIN_LOCALS_METHODDEF \
|
|
|
|
{"locals", (PyCFunction)builtin_locals, METH_NOARGS, builtin_locals__doc__},
|
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
builtin_locals_impl(PyObject *module);
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
builtin_locals(PyObject *module, PyObject *Py_UNUSED(ignored))
|
2015-04-03 17:53:51 -03:00
|
|
|
{
|
|
|
|
return builtin_locals_impl(module);
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_oct__doc__,
|
|
|
|
"oct($module, number, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Return the octal representation of an integer.\n"
|
|
|
|
"\n"
|
|
|
|
" >>> oct(342391)\n"
|
|
|
|
" \'0o1234567\'");
|
|
|
|
|
|
|
|
#define BUILTIN_OCT_METHODDEF \
|
|
|
|
{"oct", (PyCFunction)builtin_oct, METH_O, builtin_oct__doc__},
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_ord__doc__,
|
|
|
|
"ord($module, c, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Return the Unicode code point for a one-character string.");
|
|
|
|
|
|
|
|
#define BUILTIN_ORD_METHODDEF \
|
|
|
|
{"ord", (PyCFunction)builtin_ord, METH_O, builtin_ord__doc__},
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_pow__doc__,
|
|
|
|
"pow($module, x, y, z=None, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Equivalent to x**y (with two arguments) or x**y % z (with three arguments)\n"
|
|
|
|
"\n"
|
|
|
|
"Some types, such as ints, are able to use a more efficient algorithm when\n"
|
|
|
|
"invoked using the three argument form.");
|
|
|
|
|
|
|
|
#define BUILTIN_POW_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"pow", (PyCFunction)(void(*)(void))builtin_pow, METH_FASTCALL, builtin_pow__doc__},
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
builtin_pow_impl(PyObject *module, PyObject *x, PyObject *y, PyObject *z);
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
builtin_pow(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2015-04-03 17:53:51 -03:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
PyObject *x;
|
|
|
|
PyObject *y;
|
|
|
|
PyObject *z = Py_None;
|
|
|
|
|
2019-01-11 12:01:42 -04:00
|
|
|
if (!_PyArg_CheckPositional("pow", nargs, 2, 3)) {
|
2017-01-16 21:21:47 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2019-01-11 12:01:42 -04:00
|
|
|
x = args[0];
|
|
|
|
y = args[1];
|
|
|
|
if (nargs < 3) {
|
|
|
|
goto skip_optional;
|
|
|
|
}
|
|
|
|
z = args[2];
|
|
|
|
skip_optional:
|
2015-04-03 17:53:51 -03:00
|
|
|
return_value = builtin_pow_impl(module, x, y, z);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_input__doc__,
|
|
|
|
"input($module, prompt=None, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Read a string from standard input. The trailing newline is stripped.\n"
|
|
|
|
"\n"
|
|
|
|
"The prompt string, if given, is printed to standard output without a\n"
|
|
|
|
"trailing newline before reading input.\n"
|
|
|
|
"\n"
|
|
|
|
"If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.\n"
|
|
|
|
"On *nix systems, readline is used if available.");
|
|
|
|
|
|
|
|
#define BUILTIN_INPUT_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"input", (PyCFunction)(void(*)(void))builtin_input, METH_FASTCALL, builtin_input__doc__},
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
builtin_input_impl(PyObject *module, PyObject *prompt);
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
builtin_input(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2015-04-03 17:53:51 -03:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
PyObject *prompt = NULL;
|
|
|
|
|
2019-01-11 12:01:42 -04:00
|
|
|
if (!_PyArg_CheckPositional("input", nargs, 0, 1)) {
|
2017-01-16 21:21:47 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2019-01-11 12:01:42 -04:00
|
|
|
if (nargs < 1) {
|
|
|
|
goto skip_optional;
|
|
|
|
}
|
|
|
|
prompt = args[0];
|
|
|
|
skip_optional:
|
2015-04-03 17:53:51 -03:00
|
|
|
return_value = builtin_input_impl(module, prompt);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_repr__doc__,
|
|
|
|
"repr($module, obj, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Return the canonical string representation of the object.\n"
|
|
|
|
"\n"
|
|
|
|
"For many object types, including most builtins, eval(repr(obj)) == obj.");
|
|
|
|
|
|
|
|
#define BUILTIN_REPR_METHODDEF \
|
|
|
|
{"repr", (PyCFunction)builtin_repr, METH_O, builtin_repr__doc__},
|
|
|
|
|
2017-11-15 11:51:14 -04:00
|
|
|
PyDoc_STRVAR(builtin_round__doc__,
|
|
|
|
"round($module, /, number, ndigits=None)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Round a number to a given precision in decimal digits.\n"
|
|
|
|
"\n"
|
|
|
|
"The return value is an integer if ndigits is omitted or None. Otherwise\n"
|
|
|
|
"the return value has the same type as the number. ndigits may be negative.");
|
|
|
|
|
|
|
|
#define BUILTIN_ROUND_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"round", (PyCFunction)(void(*)(void))builtin_round, METH_FASTCALL|METH_KEYWORDS, builtin_round__doc__},
|
2017-11-15 11:51:14 -04:00
|
|
|
|
|
|
|
static PyObject *
|
|
|
|
builtin_round_impl(PyObject *module, PyObject *number, PyObject *ndigits);
|
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
builtin_round(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
2017-11-15 11:51:14 -04:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
static const char * const _keywords[] = {"number", "ndigits", NULL};
|
2019-03-14 05:32:22 -03:00
|
|
|
static _PyArg_Parser _parser = {NULL, _keywords, "round", 0};
|
|
|
|
PyObject *argsbuf[2];
|
|
|
|
Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
|
2017-11-15 11:51:14 -04:00
|
|
|
PyObject *number;
|
|
|
|
PyObject *ndigits = NULL;
|
|
|
|
|
2019-03-14 05:32:22 -03:00
|
|
|
args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 2, 0, argsbuf);
|
|
|
|
if (!args) {
|
2017-11-15 11:51:14 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2019-03-14 05:32:22 -03:00
|
|
|
number = args[0];
|
|
|
|
if (!noptargs) {
|
|
|
|
goto skip_optional_pos;
|
|
|
|
}
|
|
|
|
ndigits = args[1];
|
|
|
|
skip_optional_pos:
|
2017-11-15 11:51:14 -04:00
|
|
|
return_value = builtin_round_impl(module, number, ndigits);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
2015-04-03 17:53:51 -03:00
|
|
|
PyDoc_STRVAR(builtin_sum__doc__,
|
2018-09-12 14:54:06 -03:00
|
|
|
"sum($module, iterable, /, start=0)\n"
|
2015-04-03 17:53:51 -03:00
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Return the sum of a \'start\' value (default: 0) plus an iterable of numbers\n"
|
|
|
|
"\n"
|
|
|
|
"When the iterable is empty, return the start value.\n"
|
|
|
|
"This function is intended specifically for use with numeric values and may\n"
|
|
|
|
"reject non-numeric types.");
|
|
|
|
|
|
|
|
#define BUILTIN_SUM_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"sum", (PyCFunction)(void(*)(void))builtin_sum, METH_FASTCALL|METH_KEYWORDS, builtin_sum__doc__},
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start);
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2018-09-12 14:54:06 -03:00
|
|
|
builtin_sum(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
|
2015-04-03 17:53:51 -03:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
2018-09-12 14:54:06 -03:00
|
|
|
static const char * const _keywords[] = {"", "start", NULL};
|
2019-03-14 05:32:22 -03:00
|
|
|
static _PyArg_Parser _parser = {NULL, _keywords, "sum", 0};
|
|
|
|
PyObject *argsbuf[2];
|
|
|
|
Py_ssize_t noptargs = nargs + (kwnames ? PyTuple_GET_SIZE(kwnames) : 0) - 1;
|
2015-04-03 17:53:51 -03:00
|
|
|
PyObject *iterable;
|
|
|
|
PyObject *start = NULL;
|
|
|
|
|
2019-03-14 05:32:22 -03:00
|
|
|
args = _PyArg_UnpackKeywords(args, nargs, NULL, kwnames, &_parser, 1, 2, 0, argsbuf);
|
|
|
|
if (!args) {
|
2017-01-16 21:21:47 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2019-03-14 05:32:22 -03:00
|
|
|
iterable = args[0];
|
|
|
|
if (!noptargs) {
|
|
|
|
goto skip_optional_pos;
|
|
|
|
}
|
|
|
|
start = args[1];
|
|
|
|
skip_optional_pos:
|
2015-04-03 17:53:51 -03:00
|
|
|
return_value = builtin_sum_impl(module, iterable, start);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_isinstance__doc__,
|
|
|
|
"isinstance($module, obj, class_or_tuple, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Return whether an object is an instance of a class or of a subclass thereof.\n"
|
|
|
|
"\n"
|
|
|
|
"A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to\n"
|
|
|
|
"check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)\n"
|
|
|
|
"or ...`` etc.");
|
|
|
|
|
|
|
|
#define BUILTIN_ISINSTANCE_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"isinstance", (PyCFunction)(void(*)(void))builtin_isinstance, METH_FASTCALL, builtin_isinstance__doc__},
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
builtin_isinstance_impl(PyObject *module, PyObject *obj,
|
2015-04-14 19:07:59 -03:00
|
|
|
PyObject *class_or_tuple);
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
builtin_isinstance(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2015-04-03 17:53:51 -03:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
PyObject *obj;
|
|
|
|
PyObject *class_or_tuple;
|
|
|
|
|
2019-01-11 12:01:42 -04:00
|
|
|
if (!_PyArg_CheckPositional("isinstance", nargs, 2, 2)) {
|
2017-01-16 21:21:47 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2019-01-11 12:01:42 -04:00
|
|
|
obj = args[0];
|
|
|
|
class_or_tuple = args[1];
|
2015-04-03 17:53:51 -03:00
|
|
|
return_value = builtin_isinstance_impl(module, obj, class_or_tuple);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
return return_value;
|
|
|
|
}
|
|
|
|
|
|
|
|
PyDoc_STRVAR(builtin_issubclass__doc__,
|
|
|
|
"issubclass($module, cls, class_or_tuple, /)\n"
|
|
|
|
"--\n"
|
|
|
|
"\n"
|
|
|
|
"Return whether \'cls\' is a derived from another class or is the same class.\n"
|
|
|
|
"\n"
|
|
|
|
"A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to\n"
|
|
|
|
"check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)\n"
|
|
|
|
"or ...`` etc.");
|
|
|
|
|
|
|
|
#define BUILTIN_ISSUBCLASS_METHODDEF \
|
2018-11-27 05:27:36 -04:00
|
|
|
{"issubclass", (PyCFunction)(void(*)(void))builtin_issubclass, METH_FASTCALL, builtin_issubclass__doc__},
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2016-07-07 11:35:15 -03:00
|
|
|
builtin_issubclass_impl(PyObject *module, PyObject *cls,
|
2015-04-14 19:07:59 -03:00
|
|
|
PyObject *class_or_tuple);
|
2015-04-03 17:53:51 -03:00
|
|
|
|
|
|
|
static PyObject *
|
2017-12-15 07:11:11 -04:00
|
|
|
builtin_issubclass(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
|
2015-04-03 17:53:51 -03:00
|
|
|
{
|
|
|
|
PyObject *return_value = NULL;
|
|
|
|
PyObject *cls;
|
|
|
|
PyObject *class_or_tuple;
|
|
|
|
|
2019-01-11 12:01:42 -04:00
|
|
|
if (!_PyArg_CheckPositional("issubclass", nargs, 2, 2)) {
|
2017-01-16 21:21:47 -04:00
|
|
|
goto exit;
|
|
|
|
}
|
2019-01-11 12:01:42 -04:00
|
|
|
cls = args[0];
|
|
|
|
class_or_tuple = args[1];
|
2015-04-03 17:53:51 -03:00
|
|
|
return_value = builtin_issubclass_impl(module, cls, class_or_tuple);
|
|
|
|
|
|
|
|
exit:
|
|
|
|
return return_value;
|
|
|
|
}
|
2019-08-29 12:29:59 -03:00
|
|
|
/*[clinic end generated code: output=1927f3c9abd00c35 input=a9049054013a1b77]*/
|