Home | History | Annotate | Download | only in Python
      1 /* Built-in functions */
      2 
      3 #include "Python.h"
      4 #include "Python-ast.h"
      5 
      6 #include "node.h"
      7 #include "code.h"
      8 
      9 #include "asdl.h"
     10 #include "ast.h"
     11 
     12 #include <ctype.h>
     13 
     14 #ifdef HAVE_LANGINFO_H
     15 #include <langinfo.h>   /* CODESET */
     16 #endif
     17 
     18 /* The default encoding used by the platform file system APIs
     19    Can remain NULL for all platforms that don't have such a concept
     20 
     21    Don't forget to modify PyUnicode_DecodeFSDefault() if you touch any of the
     22    values for Py_FileSystemDefaultEncoding!
     23 */
     24 #if defined(__APPLE__)
     25 const char *Py_FileSystemDefaultEncoding = "utf-8";
     26 int Py_HasFileSystemDefaultEncoding = 1;
     27 #elif defined(MS_WINDOWS)
     28 /* may be changed by initfsencoding(), but should never be free()d */
     29 const char *Py_FileSystemDefaultEncoding = "utf-8";
     30 int Py_HasFileSystemDefaultEncoding = 1;
     31 #else
     32 const char *Py_FileSystemDefaultEncoding = NULL; /* set by initfsencoding() */
     33 int Py_HasFileSystemDefaultEncoding = 0;
     34 #endif
     35 const char *Py_FileSystemDefaultEncodeErrors = "surrogateescape";
     36 
     37 _Py_IDENTIFIER(__builtins__);
     38 _Py_IDENTIFIER(__dict__);
     39 _Py_IDENTIFIER(__prepare__);
     40 _Py_IDENTIFIER(__round__);
     41 _Py_IDENTIFIER(encoding);
     42 _Py_IDENTIFIER(errors);
     43 _Py_IDENTIFIER(fileno);
     44 _Py_IDENTIFIER(flush);
     45 _Py_IDENTIFIER(metaclass);
     46 _Py_IDENTIFIER(sort);
     47 _Py_IDENTIFIER(stdin);
     48 _Py_IDENTIFIER(stdout);
     49 _Py_IDENTIFIER(stderr);
     50 
     51 #include "clinic/bltinmodule.c.h"
     52 
     53 /* AC: cannot convert yet, waiting for *args support */
     54 static PyObject *
     55 builtin___build_class__(PyObject *self, PyObject *args, PyObject *kwds)
     56 {
     57     PyObject *func, *name, *bases, *mkw, *meta, *winner, *prep, *ns;
     58     PyObject *cls = NULL, *cell = NULL;
     59     Py_ssize_t nargs;
     60     int isclass = 0;   /* initialize to prevent gcc warning */
     61 
     62     assert(args != NULL);
     63     if (!PyTuple_Check(args)) {
     64         PyErr_SetString(PyExc_TypeError,
     65                         "__build_class__: args is not a tuple");
     66         return NULL;
     67     }
     68     nargs = PyTuple_GET_SIZE(args);
     69     if (nargs < 2) {
     70         PyErr_SetString(PyExc_TypeError,
     71                         "__build_class__: not enough arguments");
     72         return NULL;
     73     }
     74     func = PyTuple_GET_ITEM(args, 0); /* Better be callable */
     75     if (!PyFunction_Check(func)) {
     76         PyErr_SetString(PyExc_TypeError,
     77                         "__build_class__: func must be a function");
     78         return NULL;
     79     }
     80     name = PyTuple_GET_ITEM(args, 1);
     81     if (!PyUnicode_Check(name)) {
     82         PyErr_SetString(PyExc_TypeError,
     83                         "__build_class__: name is not a string");
     84         return NULL;
     85     }
     86     bases = PyTuple_GetSlice(args, 2, nargs);
     87     if (bases == NULL)
     88         return NULL;
     89 
     90     if (kwds == NULL) {
     91         meta = NULL;
     92         mkw = NULL;
     93     }
     94     else {
     95         mkw = PyDict_Copy(kwds); /* Don't modify kwds passed in! */
     96         if (mkw == NULL) {
     97             Py_DECREF(bases);
     98             return NULL;
     99         }
    100         meta = _PyDict_GetItemId(mkw, &PyId_metaclass);
    101         if (meta != NULL) {
    102             Py_INCREF(meta);
    103             if (_PyDict_DelItemId(mkw, &PyId_metaclass) < 0) {
    104                 Py_DECREF(meta);
    105                 Py_DECREF(mkw);
    106                 Py_DECREF(bases);
    107                 return NULL;
    108             }
    109             /* metaclass is explicitly given, check if it's indeed a class */
    110             isclass = PyType_Check(meta);
    111         }
    112     }
    113     if (meta == NULL) {
    114         /* if there are no bases, use type: */
    115         if (PyTuple_GET_SIZE(bases) == 0) {
    116             meta = (PyObject *) (&PyType_Type);
    117         }
    118         /* else get the type of the first base */
    119         else {
    120             PyObject *base0 = PyTuple_GET_ITEM(bases, 0);
    121             meta = (PyObject *) (base0->ob_type);
    122         }
    123         Py_INCREF(meta);
    124         isclass = 1;  /* meta is really a class */
    125     }
    126 
    127     if (isclass) {
    128         /* meta is really a class, so check for a more derived
    129            metaclass, or possible metaclass conflicts: */
    130         winner = (PyObject *)_PyType_CalculateMetaclass((PyTypeObject *)meta,
    131                                                         bases);
    132         if (winner == NULL) {
    133             Py_DECREF(meta);
    134             Py_XDECREF(mkw);
    135             Py_DECREF(bases);
    136             return NULL;
    137         }
    138         if (winner != meta) {
    139             Py_DECREF(meta);
    140             meta = winner;
    141             Py_INCREF(meta);
    142         }
    143     }
    144     /* else: meta is not a class, so we cannot do the metaclass
    145        calculation, so we will use the explicitly given object as it is */
    146     prep = _PyObject_GetAttrId(meta, &PyId___prepare__);
    147     if (prep == NULL) {
    148         if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
    149             PyErr_Clear();
    150             ns = PyDict_New();
    151         }
    152         else {
    153             Py_DECREF(meta);
    154             Py_XDECREF(mkw);
    155             Py_DECREF(bases);
    156             return NULL;
    157         }
    158     }
    159     else {
    160         PyObject *pargs[2] = {name, bases};
    161         ns = _PyObject_FastCallDict(prep, pargs, 2, mkw);
    162         Py_DECREF(prep);
    163     }
    164     if (ns == NULL) {
    165         Py_DECREF(meta);
    166         Py_XDECREF(mkw);
    167         Py_DECREF(bases);
    168         return NULL;
    169     }
    170     cell = PyEval_EvalCodeEx(PyFunction_GET_CODE(func), PyFunction_GET_GLOBALS(func), ns,
    171                              NULL, 0, NULL, 0, NULL, 0, NULL,
    172                              PyFunction_GET_CLOSURE(func));
    173     if (cell != NULL) {
    174         PyObject *margs[3] = {name, bases, ns};
    175         cls = _PyObject_FastCallDict(meta, margs, 3, mkw);
    176         if (cls != NULL && PyType_Check(cls) && PyCell_Check(cell)) {
    177             PyObject *cell_cls = PyCell_GET(cell);
    178             if (cell_cls != cls) {
    179                 /* TODO: In 3.7, DeprecationWarning will become RuntimeError.
    180                  *       At that point, cell_error won't be needed.
    181                  */
    182                 int cell_error;
    183                 if (cell_cls == NULL) {
    184                     const char *msg =
    185                         "__class__ not set defining %.200R as %.200R. "
    186                         "Was __classcell__ propagated to type.__new__?";
    187                     cell_error = PyErr_WarnFormat(
    188                         PyExc_DeprecationWarning, 1, msg, name, cls);
    189                 } else {
    190                     const char *msg =
    191                         "__class__ set to %.200R defining %.200R as %.200R";
    192                     PyErr_Format(PyExc_TypeError, msg, cell_cls, name, cls);
    193                     cell_error = 1;
    194                 }
    195                 if (cell_error) {
    196                     Py_DECREF(cls);
    197                     cls = NULL;
    198                     goto error;
    199                 } else {
    200                     /* Fill in the cell, since type.__new__ didn't do it */
    201                     PyCell_Set(cell, cls);
    202                 }
    203             }
    204         }
    205     }
    206 error:
    207     Py_XDECREF(cell);
    208     Py_DECREF(ns);
    209     Py_DECREF(meta);
    210     Py_XDECREF(mkw);
    211     Py_DECREF(bases);
    212     return cls;
    213 }
    214 
    215 PyDoc_STRVAR(build_class_doc,
    216 "__build_class__(func, name, *bases, metaclass=None, **kwds) -> class\n\
    217 \n\
    218 Internal helper function used by the class statement.");
    219 
    220 static PyObject *
    221 builtin___import__(PyObject *self, PyObject *args, PyObject *kwds)
    222 {
    223     static char *kwlist[] = {"name", "globals", "locals", "fromlist",
    224                              "level", 0};
    225     PyObject *name, *globals = NULL, *locals = NULL, *fromlist = NULL;
    226     int level = 0;
    227 
    228     if (!PyArg_ParseTupleAndKeywords(args, kwds, "U|OOOi:__import__",
    229                     kwlist, &name, &globals, &locals, &fromlist, &level))
    230         return NULL;
    231     return PyImport_ImportModuleLevelObject(name, globals, locals,
    232                                             fromlist, level);
    233 }
    234 
    235 PyDoc_STRVAR(import_doc,
    236 "__import__(name, globals=None, locals=None, fromlist=(), level=0) -> module\n\
    237 \n\
    238 Import a module. Because this function is meant for use by the Python\n\
    239 interpreter and not for general use it is better to use\n\
    240 importlib.import_module() to programmatically import a module.\n\
    241 \n\
    242 The globals argument is only used to determine the context;\n\
    243 they are not modified.  The locals argument is unused.  The fromlist\n\
    244 should be a list of names to emulate ``from name import ...'', or an\n\
    245 empty list to emulate ``import name''.\n\
    246 When importing a module from a package, note that __import__('A.B', ...)\n\
    247 returns package A when fromlist is empty, but its submodule B when\n\
    248 fromlist is not empty.  Level is used to determine whether to perform \n\
    249 absolute or relative imports. 0 is absolute while a positive number\n\
    250 is the number of parent directories to search relative to the current module.");
    251 
    252 
    253 /*[clinic input]
    254 abs as builtin_abs
    255 
    256     x: object
    257     /
    258 
    259 Return the absolute value of the argument.
    260 [clinic start generated code]*/
    261 
    262 static PyObject *
    263 builtin_abs(PyObject *module, PyObject *x)
    264 /*[clinic end generated code: output=b1b433b9e51356f5 input=bed4ca14e29c20d1]*/
    265 {
    266     return PyNumber_Absolute(x);
    267 }
    268 
    269 /*[clinic input]
    270 all as builtin_all
    271 
    272     iterable: object
    273     /
    274 
    275 Return True if bool(x) is True for all values x in the iterable.
    276 
    277 If the iterable is empty, return True.
    278 [clinic start generated code]*/
    279 
    280 static PyObject *
    281 builtin_all(PyObject *module, PyObject *iterable)
    282 /*[clinic end generated code: output=ca2a7127276f79b3 input=1a7c5d1bc3438a21]*/
    283 {
    284     PyObject *it, *item;
    285     PyObject *(*iternext)(PyObject *);
    286     int cmp;
    287 
    288     it = PyObject_GetIter(iterable);
    289     if (it == NULL)
    290         return NULL;
    291     iternext = *Py_TYPE(it)->tp_iternext;
    292 
    293     for (;;) {
    294         item = iternext(it);
    295         if (item == NULL)
    296             break;
    297         cmp = PyObject_IsTrue(item);
    298         Py_DECREF(item);
    299         if (cmp < 0) {
    300             Py_DECREF(it);
    301             return NULL;
    302         }
    303         if (cmp == 0) {
    304             Py_DECREF(it);
    305             Py_RETURN_FALSE;
    306         }
    307     }
    308     Py_DECREF(it);
    309     if (PyErr_Occurred()) {
    310         if (PyErr_ExceptionMatches(PyExc_StopIteration))
    311             PyErr_Clear();
    312         else
    313             return NULL;
    314     }
    315     Py_RETURN_TRUE;
    316 }
    317 
    318 /*[clinic input]
    319 any as builtin_any
    320 
    321     iterable: object
    322     /
    323 
    324 Return True if bool(x) is True for any x in the iterable.
    325 
    326 If the iterable is empty, return False.
    327 [clinic start generated code]*/
    328 
    329 static PyObject *
    330 builtin_any(PyObject *module, PyObject *iterable)
    331 /*[clinic end generated code: output=fa65684748caa60e input=41d7451c23384f24]*/
    332 {
    333     PyObject *it, *item;
    334     PyObject *(*iternext)(PyObject *);
    335     int cmp;
    336 
    337     it = PyObject_GetIter(iterable);
    338     if (it == NULL)
    339         return NULL;
    340     iternext = *Py_TYPE(it)->tp_iternext;
    341 
    342     for (;;) {
    343         item = iternext(it);
    344         if (item == NULL)
    345             break;
    346         cmp = PyObject_IsTrue(item);
    347         Py_DECREF(item);
    348         if (cmp < 0) {
    349             Py_DECREF(it);
    350             return NULL;
    351         }
    352         if (cmp > 0) {
    353             Py_DECREF(it);
    354             Py_RETURN_TRUE;
    355         }
    356     }
    357     Py_DECREF(it);
    358     if (PyErr_Occurred()) {
    359         if (PyErr_ExceptionMatches(PyExc_StopIteration))
    360             PyErr_Clear();
    361         else
    362             return NULL;
    363     }
    364     Py_RETURN_FALSE;
    365 }
    366 
    367 /*[clinic input]
    368 ascii as builtin_ascii
    369 
    370     obj: object
    371     /
    372 
    373 Return an ASCII-only representation of an object.
    374 
    375 As repr(), return a string containing a printable representation of an
    376 object, but escape the non-ASCII characters in the string returned by
    377 repr() using \\x, \\u or \\U escapes. This generates a string similar
    378 to that returned by repr() in Python 2.
    379 [clinic start generated code]*/
    380 
    381 static PyObject *
    382 builtin_ascii(PyObject *module, PyObject *obj)
    383 /*[clinic end generated code: output=6d37b3f0984c7eb9 input=4c62732e1b3a3cc9]*/
    384 {
    385     return PyObject_ASCII(obj);
    386 }
    387 
    388 
    389 /*[clinic input]
    390 bin as builtin_bin
    391 
    392     number: object
    393     /
    394 
    395 Return the binary representation of an integer.
    396 
    397    >>> bin(2796202)
    398    '0b1010101010101010101010'
    399 [clinic start generated code]*/
    400 
    401 static PyObject *
    402 builtin_bin(PyObject *module, PyObject *number)
    403 /*[clinic end generated code: output=b6fc4ad5e649f4f7 input=53f8a0264bacaf90]*/
    404 {
    405     return PyNumber_ToBase(number, 2);
    406 }
    407 
    408 
    409 /*[clinic input]
    410 callable as builtin_callable
    411 
    412     obj: object
    413     /
    414 
    415 Return whether the object is callable (i.e., some kind of function).
    416 
    417 Note that classes are callable, as are instances of classes with a
    418 __call__() method.
    419 [clinic start generated code]*/
    420 
    421 static PyObject *
    422 builtin_callable(PyObject *module, PyObject *obj)
    423 /*[clinic end generated code: output=2b095d59d934cb7e input=1423bab99cc41f58]*/
    424 {
    425     return PyBool_FromLong((long)PyCallable_Check(obj));
    426 }
    427 
    428 
    429 typedef struct {
    430     PyObject_HEAD
    431     PyObject *func;
    432     PyObject *it;
    433 } filterobject;
    434 
    435 static PyObject *
    436 filter_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
    437 {
    438     PyObject *func, *seq;
    439     PyObject *it;
    440     filterobject *lz;
    441 
    442     if (type == &PyFilter_Type && !_PyArg_NoKeywords("filter()", kwds))
    443         return NULL;
    444 
    445     if (!PyArg_UnpackTuple(args, "filter", 2, 2, &func, &seq))
    446         return NULL;
    447 
    448     /* Get iterator. */
    449     it = PyObject_GetIter(seq);
    450     if (it == NULL)
    451         return NULL;
    452 
    453     /* create filterobject structure */
    454     lz = (filterobject *)type->tp_alloc(type, 0);
    455     if (lz == NULL) {
    456         Py_DECREF(it);
    457         return NULL;
    458     }
    459     Py_INCREF(func);
    460     lz->func = func;
    461     lz->it = it;
    462 
    463     return (PyObject *)lz;
    464 }
    465 
    466 static void
    467 filter_dealloc(filterobject *lz)
    468 {
    469     PyObject_GC_UnTrack(lz);
    470     Py_XDECREF(lz->func);
    471     Py_XDECREF(lz->it);
    472     Py_TYPE(lz)->tp_free(lz);
    473 }
    474 
    475 static int
    476 filter_traverse(filterobject *lz, visitproc visit, void *arg)
    477 {
    478     Py_VISIT(lz->it);
    479     Py_VISIT(lz->func);
    480     return 0;
    481 }
    482 
    483 static PyObject *
    484 filter_next(filterobject *lz)
    485 {
    486     PyObject *item;
    487     PyObject *it = lz->it;
    488     long ok;
    489     PyObject *(*iternext)(PyObject *);
    490     int checktrue = lz->func == Py_None || lz->func == (PyObject *)&PyBool_Type;
    491 
    492     iternext = *Py_TYPE(it)->tp_iternext;
    493     for (;;) {
    494         item = iternext(it);
    495         if (item == NULL)
    496             return NULL;
    497 
    498         if (checktrue) {
    499             ok = PyObject_IsTrue(item);
    500         } else {
    501             PyObject *good;
    502             good = PyObject_CallFunctionObjArgs(lz->func, item, NULL);
    503             if (good == NULL) {
    504                 Py_DECREF(item);
    505                 return NULL;
    506             }
    507             ok = PyObject_IsTrue(good);
    508             Py_DECREF(good);
    509         }
    510         if (ok > 0)
    511             return item;
    512         Py_DECREF(item);
    513         if (ok < 0)
    514             return NULL;
    515     }
    516 }
    517 
    518 static PyObject *
    519 filter_reduce(filterobject *lz)
    520 {
    521     return Py_BuildValue("O(OO)", Py_TYPE(lz), lz->func, lz->it);
    522 }
    523 
    524 PyDoc_STRVAR(reduce_doc, "Return state information for pickling.");
    525 
    526 static PyMethodDef filter_methods[] = {
    527     {"__reduce__",   (PyCFunction)filter_reduce,   METH_NOARGS, reduce_doc},
    528     {NULL,           NULL}           /* sentinel */
    529 };
    530 
    531 PyDoc_STRVAR(filter_doc,
    532 "filter(function or None, iterable) --> filter object\n\
    533 \n\
    534 Return an iterator yielding those items of iterable for which function(item)\n\
    535 is true. If function is None, return the items that are true.");
    536 
    537 PyTypeObject PyFilter_Type = {
    538     PyVarObject_HEAD_INIT(&PyType_Type, 0)
    539     "filter",                           /* tp_name */
    540     sizeof(filterobject),               /* tp_basicsize */
    541     0,                                  /* tp_itemsize */
    542     /* methods */
    543     (destructor)filter_dealloc,         /* tp_dealloc */
    544     0,                                  /* tp_print */
    545     0,                                  /* tp_getattr */
    546     0,                                  /* tp_setattr */
    547     0,                                  /* tp_reserved */
    548     0,                                  /* tp_repr */
    549     0,                                  /* tp_as_number */
    550     0,                                  /* tp_as_sequence */
    551     0,                                  /* tp_as_mapping */
    552     0,                                  /* tp_hash */
    553     0,                                  /* tp_call */
    554     0,                                  /* tp_str */
    555     PyObject_GenericGetAttr,            /* tp_getattro */
    556     0,                                  /* tp_setattro */
    557     0,                                  /* tp_as_buffer */
    558     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
    559         Py_TPFLAGS_BASETYPE,            /* tp_flags */
    560     filter_doc,                         /* tp_doc */
    561     (traverseproc)filter_traverse,      /* tp_traverse */
    562     0,                                  /* tp_clear */
    563     0,                                  /* tp_richcompare */
    564     0,                                  /* tp_weaklistoffset */
    565     PyObject_SelfIter,                  /* tp_iter */
    566     (iternextfunc)filter_next,          /* tp_iternext */
    567     filter_methods,                     /* tp_methods */
    568     0,                                  /* tp_members */
    569     0,                                  /* tp_getset */
    570     0,                                  /* tp_base */
    571     0,                                  /* tp_dict */
    572     0,                                  /* tp_descr_get */
    573     0,                                  /* tp_descr_set */
    574     0,                                  /* tp_dictoffset */
    575     0,                                  /* tp_init */
    576     PyType_GenericAlloc,                /* tp_alloc */
    577     filter_new,                         /* tp_new */
    578     PyObject_GC_Del,                    /* tp_free */
    579 };
    580 
    581 
    582 /*[clinic input]
    583 format as builtin_format
    584 
    585     value: object
    586     format_spec: unicode(c_default="NULL") = ''
    587     /
    588 
    589 Return value.__format__(format_spec)
    590 
    591 format_spec defaults to the empty string
    592 [clinic start generated code]*/
    593 
    594 static PyObject *
    595 builtin_format_impl(PyObject *module, PyObject *value, PyObject *format_spec)
    596 /*[clinic end generated code: output=2f40bdfa4954b077 input=6325e751a1b29b86]*/
    597 {
    598     return PyObject_Format(value, format_spec);
    599 }
    600 
    601 /*[clinic input]
    602 chr as builtin_chr
    603 
    604     i: int
    605     /
    606 
    607 Return a Unicode string of one character with ordinal i; 0 <= i <= 0x10ffff.
    608 [clinic start generated code]*/
    609 
    610 static PyObject *
    611 builtin_chr_impl(PyObject *module, int i)
    612 /*[clinic end generated code: output=c733afcd200afcb7 input=3f604ef45a70750d]*/
    613 {
    614     return PyUnicode_FromOrdinal(i);
    615 }
    616 
    617 
    618 static const char *
    619 source_as_string(PyObject *cmd, const char *funcname, const char *what, PyCompilerFlags *cf, PyObject **cmd_copy)
    620 {
    621     const char *str;
    622     Py_ssize_t size;
    623     Py_buffer view;
    624 
    625     *cmd_copy = NULL;
    626     if (PyUnicode_Check(cmd)) {
    627         cf->cf_flags |= PyCF_IGNORE_COOKIE;
    628         str = PyUnicode_AsUTF8AndSize(cmd, &size);
    629         if (str == NULL)
    630             return NULL;
    631     }
    632     else if (PyBytes_Check(cmd)) {
    633         str = PyBytes_AS_STRING(cmd);
    634         size = PyBytes_GET_SIZE(cmd);
    635     }
    636     else if (PyByteArray_Check(cmd)) {
    637         str = PyByteArray_AS_STRING(cmd);
    638         size = PyByteArray_GET_SIZE(cmd);
    639     }
    640     else if (PyObject_GetBuffer(cmd, &view, PyBUF_SIMPLE) == 0) {
    641         /* Copy to NUL-terminated buffer. */
    642         *cmd_copy = PyBytes_FromStringAndSize(
    643             (const char *)view.buf, view.len);
    644         PyBuffer_Release(&view);
    645         if (*cmd_copy == NULL) {
    646             return NULL;
    647         }
    648         str = PyBytes_AS_STRING(*cmd_copy);
    649         size = PyBytes_GET_SIZE(*cmd_copy);
    650     }
    651     else {
    652         PyErr_Format(PyExc_TypeError,
    653           "%s() arg 1 must be a %s object",
    654           funcname, what);
    655         return NULL;
    656     }
    657 
    658     if (strlen(str) != (size_t)size) {
    659         PyErr_SetString(PyExc_ValueError,
    660                         "source code string cannot contain null bytes");
    661         Py_CLEAR(*cmd_copy);
    662         return NULL;
    663     }
    664     return str;
    665 }
    666 
    667 /*[clinic input]
    668 compile as builtin_compile
    669 
    670     source: object
    671     filename: object(converter="PyUnicode_FSDecoder")
    672     mode: str
    673     flags: int = 0
    674     dont_inherit: int(c_default="0") = False
    675     optimize: int = -1
    676 
    677 Compile source into a code object that can be executed by exec() or eval().
    678 
    679 The source code may represent a Python module, statement or expression.
    680 The filename will be used for run-time error messages.
    681 The mode must be 'exec' to compile a module, 'single' to compile a
    682 single (interactive) statement, or 'eval' to compile an expression.
    683 The flags argument, if present, controls which future statements influence
    684 the compilation of the code.
    685 The dont_inherit argument, if true, stops the compilation inheriting
    686 the effects of any future statements in effect in the code calling
    687 compile; if absent or false these statements do influence the compilation,
    688 in addition to any features explicitly specified.
    689 [clinic start generated code]*/
    690 
    691 static PyObject *
    692 builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename,
    693                      const char *mode, int flags, int dont_inherit,
    694                      int optimize)
    695 /*[clinic end generated code: output=1fa176e33452bb63 input=9d53e8cfb3c86414]*/
    696 {
    697     PyObject *source_copy;
    698     const char *str;
    699     int compile_mode = -1;
    700     int is_ast;
    701     PyCompilerFlags cf;
    702     int start[] = {Py_file_input, Py_eval_input, Py_single_input};
    703     PyObject *result;
    704 
    705     cf.cf_flags = flags | PyCF_SOURCE_IS_UTF8;
    706 
    707     if (flags &
    708         ~(PyCF_MASK | PyCF_MASK_OBSOLETE | PyCF_DONT_IMPLY_DEDENT | PyCF_ONLY_AST))
    709     {
    710         PyErr_SetString(PyExc_ValueError,
    711                         "compile(): unrecognised flags");
    712         goto error;
    713     }
    714     /* XXX Warn if (supplied_flags & PyCF_MASK_OBSOLETE) != 0? */
    715 
    716     if (optimize < -1 || optimize > 2) {
    717         PyErr_SetString(PyExc_ValueError,
    718                         "compile(): invalid optimize value");
    719         goto error;
    720     }
    721 
    722     if (!dont_inherit) {
    723         PyEval_MergeCompilerFlags(&cf);
    724     }
    725 
    726     if (strcmp(mode, "exec") == 0)
    727         compile_mode = 0;
    728     else if (strcmp(mode, "eval") == 0)
    729         compile_mode = 1;
    730     else if (strcmp(mode, "single") == 0)
    731         compile_mode = 2;
    732     else {
    733         PyErr_SetString(PyExc_ValueError,
    734                         "compile() mode must be 'exec', 'eval' or 'single'");
    735         goto error;
    736     }
    737 
    738     is_ast = PyAST_Check(source);
    739     if (is_ast == -1)
    740         goto error;
    741     if (is_ast) {
    742         if (flags & PyCF_ONLY_AST) {
    743             Py_INCREF(source);
    744             result = source;
    745         }
    746         else {
    747             PyArena *arena;
    748             mod_ty mod;
    749 
    750             arena = PyArena_New();
    751             if (arena == NULL)
    752                 goto error;
    753             mod = PyAST_obj2mod(source, arena, compile_mode);
    754             if (mod == NULL) {
    755                 PyArena_Free(arena);
    756                 goto error;
    757             }
    758             if (!PyAST_Validate(mod)) {
    759                 PyArena_Free(arena);
    760                 goto error;
    761             }
    762             result = (PyObject*)PyAST_CompileObject(mod, filename,
    763                                                     &cf, optimize, arena);
    764             PyArena_Free(arena);
    765         }
    766         goto finally;
    767     }
    768 
    769     str = source_as_string(source, "compile", "string, bytes or AST", &cf, &source_copy);
    770     if (str == NULL)
    771         goto error;
    772 
    773     result = Py_CompileStringObject(str, filename, start[compile_mode], &cf, optimize);
    774     Py_XDECREF(source_copy);
    775     goto finally;
    776 
    777 error:
    778     result = NULL;
    779 finally:
    780     Py_DECREF(filename);
    781     return result;
    782 }
    783 
    784 /* AC: cannot convert yet, as needs PEP 457 group support in inspect */
    785 static PyObject *
    786 builtin_dir(PyObject *self, PyObject *args)
    787 {
    788     PyObject *arg = NULL;
    789 
    790     if (!PyArg_UnpackTuple(args, "dir", 0, 1, &arg))
    791         return NULL;
    792     return PyObject_Dir(arg);
    793 }
    794 
    795 PyDoc_STRVAR(dir_doc,
    796 "dir([object]) -> list of strings\n"
    797 "\n"
    798 "If called without an argument, return the names in the current scope.\n"
    799 "Else, return an alphabetized list of names comprising (some of) the attributes\n"
    800 "of the given object, and of attributes reachable from it.\n"
    801 "If the object supplies a method named __dir__, it will be used; otherwise\n"
    802 "the default dir() logic is used and returns:\n"
    803 "  for a module object: the module's attributes.\n"
    804 "  for a class object:  its attributes, and recursively the attributes\n"
    805 "    of its bases.\n"
    806 "  for any other object: its attributes, its class's attributes, and\n"
    807 "    recursively the attributes of its class's base classes.");
    808 
    809 /*[clinic input]
    810 divmod as builtin_divmod
    811 
    812     x: object
    813     y: object
    814     /
    815 
    816 Return the tuple (x//y, x%y).  Invariant: div*y + mod == x.
    817 [clinic start generated code]*/
    818 
    819 static PyObject *
    820 builtin_divmod_impl(PyObject *module, PyObject *x, PyObject *y)
    821 /*[clinic end generated code: output=b06d8a5f6e0c745e input=175ad9c84ff41a85]*/
    822 {
    823     return PyNumber_Divmod(x, y);
    824 }
    825 
    826 
    827 /*[clinic input]
    828 eval as builtin_eval
    829 
    830     source: object
    831     globals: object = None
    832     locals: object = None
    833     /
    834 
    835 Evaluate the given source in the context of globals and locals.
    836 
    837 The source may be a string representing a Python expression
    838 or a code object as returned by compile().
    839 The globals must be a dictionary and locals can be any mapping,
    840 defaulting to the current globals and locals.
    841 If only globals is given, locals defaults to it.
    842 [clinic start generated code]*/
    843 
    844 static PyObject *
    845 builtin_eval_impl(PyObject *module, PyObject *source, PyObject *globals,
    846                   PyObject *locals)
    847 /*[clinic end generated code: output=0a0824aa70093116 input=11ee718a8640e527]*/
    848 {
    849     PyObject *result, *source_copy;
    850     const char *str;
    851     PyCompilerFlags cf;
    852 
    853     if (locals != Py_None && !PyMapping_Check(locals)) {
    854         PyErr_SetString(PyExc_TypeError, "locals must be a mapping");
    855         return NULL;
    856     }
    857     if (globals != Py_None && !PyDict_Check(globals)) {
    858         PyErr_SetString(PyExc_TypeError, PyMapping_Check(globals) ?
    859             "globals must be a real dict; try eval(expr, {}, mapping)"
    860             : "globals must be a dict");
    861         return NULL;
    862     }
    863     if (globals == Py_None) {
    864         globals = PyEval_GetGlobals();
    865         if (locals == Py_None) {
    866             locals = PyEval_GetLocals();
    867             if (locals == NULL)
    868                 return NULL;
    869         }
    870     }
    871     else if (locals == Py_None)
    872         locals = globals;
    873 
    874     if (globals == NULL || locals == NULL) {
    875         PyErr_SetString(PyExc_TypeError,
    876             "eval must be given globals and locals "
    877             "when called without a frame");
    878         return NULL;
    879     }
    880 
    881     if (_PyDict_GetItemId(globals, &PyId___builtins__) == NULL) {
    882         if (_PyDict_SetItemId(globals, &PyId___builtins__,
    883                               PyEval_GetBuiltins()) != 0)
    884             return NULL;
    885     }
    886 
    887     if (PyCode_Check(source)) {
    888         if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
    889             PyErr_SetString(PyExc_TypeError,
    890         "code object passed to eval() may not contain free variables");
    891             return NULL;
    892         }
    893         return PyEval_EvalCode(source, globals, locals);
    894     }
    895 
    896     cf.cf_flags = PyCF_SOURCE_IS_UTF8;
    897     str = source_as_string(source, "eval", "string, bytes or code", &cf, &source_copy);
    898     if (str == NULL)
    899         return NULL;
    900 
    901     while (*str == ' ' || *str == '\t')
    902         str++;
    903 
    904     (void)PyEval_MergeCompilerFlags(&cf);
    905     result = PyRun_StringFlags(str, Py_eval_input, globals, locals, &cf);
    906     Py_XDECREF(source_copy);
    907     return result;
    908 }
    909 
    910 /*[clinic input]
    911 exec as builtin_exec
    912 
    913     source: object
    914     globals: object = None
    915     locals: object = None
    916     /
    917 
    918 Execute the given source in the context of globals and locals.
    919 
    920 The source may be a string representing one or more Python statements
    921 or a code object as returned by compile().
    922 The globals must be a dictionary and locals can be any mapping,
    923 defaulting to the current globals and locals.
    924 If only globals is given, locals defaults to it.
    925 [clinic start generated code]*/
    926 
    927 static PyObject *
    928 builtin_exec_impl(PyObject *module, PyObject *source, PyObject *globals,
    929                   PyObject *locals)
    930 /*[clinic end generated code: output=3c90efc6ab68ef5d input=01ca3e1c01692829]*/
    931 {
    932     PyObject *v;
    933 
    934     if (globals == Py_None) {
    935         globals = PyEval_GetGlobals();
    936         if (locals == Py_None) {
    937             locals = PyEval_GetLocals();
    938             if (locals == NULL)
    939                 return NULL;
    940         }
    941         if (!globals || !locals) {
    942             PyErr_SetString(PyExc_SystemError,
    943                             "globals and locals cannot be NULL");
    944             return NULL;
    945         }
    946     }
    947     else if (locals == Py_None)
    948         locals = globals;
    949 
    950     if (!PyDict_Check(globals)) {
    951         PyErr_Format(PyExc_TypeError, "exec() globals must be a dict, not %.100s",
    952                      globals->ob_type->tp_name);
    953         return NULL;
    954     }
    955     if (!PyMapping_Check(locals)) {
    956         PyErr_Format(PyExc_TypeError,
    957             "locals must be a mapping or None, not %.100s",
    958             locals->ob_type->tp_name);
    959         return NULL;
    960     }
    961     if (_PyDict_GetItemId(globals, &PyId___builtins__) == NULL) {
    962         if (_PyDict_SetItemId(globals, &PyId___builtins__,
    963                               PyEval_GetBuiltins()) != 0)
    964             return NULL;
    965     }
    966 
    967     if (PyCode_Check(source)) {
    968         if (PyCode_GetNumFree((PyCodeObject *)source) > 0) {
    969             PyErr_SetString(PyExc_TypeError,
    970                 "code object passed to exec() may not "
    971                 "contain free variables");
    972             return NULL;
    973         }
    974         v = PyEval_EvalCode(source, globals, locals);
    975     }
    976     else {
    977         PyObject *source_copy;
    978         const char *str;
    979         PyCompilerFlags cf;
    980         cf.cf_flags = PyCF_SOURCE_IS_UTF8;
    981         str = source_as_string(source, "exec",
    982                                        "string, bytes or code", &cf,
    983                                        &source_copy);
    984         if (str == NULL)
    985             return NULL;
    986         if (PyEval_MergeCompilerFlags(&cf))
    987             v = PyRun_StringFlags(str, Py_file_input, globals,
    988                                   locals, &cf);
    989         else
    990             v = PyRun_String(str, Py_file_input, globals, locals);
    991         Py_XDECREF(source_copy);
    992     }
    993     if (v == NULL)
    994         return NULL;
    995     Py_DECREF(v);
    996     Py_RETURN_NONE;
    997 }
    998 
    999 
   1000 /* AC: cannot convert yet, as needs PEP 457 group support in inspect */
   1001 static PyObject *
   1002 builtin_getattr(PyObject *self, PyObject *args)
   1003 {
   1004     PyObject *v, *result, *dflt = NULL;
   1005     PyObject *name;
   1006 
   1007     if (!PyArg_UnpackTuple(args, "getattr", 2, 3, &v, &name, &dflt))
   1008         return NULL;
   1009 
   1010     if (!PyUnicode_Check(name)) {
   1011         PyErr_SetString(PyExc_TypeError,
   1012                         "getattr(): attribute name must be string");
   1013         return NULL;
   1014     }
   1015     result = PyObject_GetAttr(v, name);
   1016     if (result == NULL && dflt != NULL &&
   1017         PyErr_ExceptionMatches(PyExc_AttributeError))
   1018     {
   1019         PyErr_Clear();
   1020         Py_INCREF(dflt);
   1021         result = dflt;
   1022     }
   1023     return result;
   1024 }
   1025 
   1026 PyDoc_STRVAR(getattr_doc,
   1027 "getattr(object, name[, default]) -> value\n\
   1028 \n\
   1029 Get a named attribute from an object; getattr(x, 'y') is equivalent to x.y.\n\
   1030 When a default argument is given, it is returned when the attribute doesn't\n\
   1031 exist; without it, an exception is raised in that case.");
   1032 
   1033 
   1034 /*[clinic input]
   1035 globals as builtin_globals
   1036 
   1037 Return the dictionary containing the current scope's global variables.
   1038 
   1039 NOTE: Updates to this dictionary *will* affect name lookups in the current
   1040 global scope and vice-versa.
   1041 [clinic start generated code]*/
   1042 
   1043 static PyObject *
   1044 builtin_globals_impl(PyObject *module)
   1045 /*[clinic end generated code: output=e5dd1527067b94d2 input=9327576f92bb48ba]*/
   1046 {
   1047     PyObject *d;
   1048 
   1049     d = PyEval_GetGlobals();
   1050     Py_XINCREF(d);
   1051     return d;
   1052 }
   1053 
   1054 
   1055 /*[clinic input]
   1056 hasattr as builtin_hasattr
   1057 
   1058     obj: object
   1059     name: object
   1060     /
   1061 
   1062 Return whether the object has an attribute with the given name.
   1063 
   1064 This is done by calling getattr(obj, name) and catching AttributeError.
   1065 [clinic start generated code]*/
   1066 
   1067 static PyObject *
   1068 builtin_hasattr_impl(PyObject *module, PyObject *obj, PyObject *name)
   1069 /*[clinic end generated code: output=a7aff2090a4151e5 input=0faec9787d979542]*/
   1070 {
   1071     PyObject *v;
   1072 
   1073     if (!PyUnicode_Check(name)) {
   1074         PyErr_SetString(PyExc_TypeError,
   1075                         "hasattr(): attribute name must be string");
   1076         return NULL;
   1077     }
   1078     v = PyObject_GetAttr(obj, name);
   1079     if (v == NULL) {
   1080         if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
   1081             PyErr_Clear();
   1082             Py_RETURN_FALSE;
   1083         }
   1084         return NULL;
   1085     }
   1086     Py_DECREF(v);
   1087     Py_RETURN_TRUE;
   1088 }
   1089 
   1090 
   1091 /* AC: gdb's integration with CPython relies on builtin_id having
   1092  * the *exact* parameter names of "self" and "v", so we ensure we
   1093  * preserve those name rather than using the AC defaults.
   1094  */
   1095 /*[clinic input]
   1096 id as builtin_id
   1097 
   1098     self: self(type="PyModuleDef *")
   1099     obj as v: object
   1100     /
   1101 
   1102 Return the identity of an object.
   1103 
   1104 This is guaranteed to be unique among simultaneously existing objects.
   1105 (CPython uses the object's memory address.)
   1106 [clinic start generated code]*/
   1107 
   1108 static PyObject *
   1109 builtin_id(PyModuleDef *self, PyObject *v)
   1110 /*[clinic end generated code: output=0aa640785f697f65 input=5a534136419631f4]*/
   1111 {
   1112     return PyLong_FromVoidPtr(v);
   1113 }
   1114 
   1115 
   1116 /* map object ************************************************************/
   1117 
   1118 typedef struct {
   1119     PyObject_HEAD
   1120     PyObject *iters;
   1121     PyObject *func;
   1122 } mapobject;
   1123 
   1124 static PyObject *
   1125 map_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
   1126 {
   1127     PyObject *it, *iters, *func;
   1128     mapobject *lz;
   1129     Py_ssize_t numargs, i;
   1130 
   1131     if (type == &PyMap_Type && !_PyArg_NoKeywords("map()", kwds))
   1132         return NULL;
   1133 
   1134     numargs = PyTuple_Size(args);
   1135     if (numargs < 2) {
   1136         PyErr_SetString(PyExc_TypeError,
   1137            "map() must have at least two arguments.");
   1138         return NULL;
   1139     }
   1140 
   1141     iters = PyTuple_New(numargs-1);
   1142     if (iters == NULL)
   1143         return NULL;
   1144 
   1145     for (i=1 ; i<numargs ; i++) {
   1146         /* Get iterator. */
   1147         it = PyObject_GetIter(PyTuple_GET_ITEM(args, i));
   1148         if (it == NULL) {
   1149             Py_DECREF(iters);
   1150             return NULL;
   1151         }
   1152         PyTuple_SET_ITEM(iters, i-1, it);
   1153     }
   1154 
   1155     /* create mapobject structure */
   1156     lz = (mapobject *)type->tp_alloc(type, 0);
   1157     if (lz == NULL) {
   1158         Py_DECREF(iters);
   1159         return NULL;
   1160     }
   1161     lz->iters = iters;
   1162     func = PyTuple_GET_ITEM(args, 0);
   1163     Py_INCREF(func);
   1164     lz->func = func;
   1165 
   1166     return (PyObject *)lz;
   1167 }
   1168 
   1169 static void
   1170 map_dealloc(mapobject *lz)
   1171 {
   1172     PyObject_GC_UnTrack(lz);
   1173     Py_XDECREF(lz->iters);
   1174     Py_XDECREF(lz->func);
   1175     Py_TYPE(lz)->tp_free(lz);
   1176 }
   1177 
   1178 static int
   1179 map_traverse(mapobject *lz, visitproc visit, void *arg)
   1180 {
   1181     Py_VISIT(lz->iters);
   1182     Py_VISIT(lz->func);
   1183     return 0;
   1184 }
   1185 
   1186 static PyObject *
   1187 map_next(mapobject *lz)
   1188 {
   1189     PyObject *small_stack[5];
   1190     PyObject **stack;
   1191     Py_ssize_t niters, nargs, i;
   1192     PyObject *result = NULL;
   1193 
   1194     niters = PyTuple_GET_SIZE(lz->iters);
   1195     if (niters <= (Py_ssize_t)Py_ARRAY_LENGTH(small_stack)) {
   1196         stack = small_stack;
   1197     }
   1198     else {
   1199         stack = PyMem_Malloc(niters * sizeof(stack[0]));
   1200         if (stack == NULL) {
   1201             PyErr_NoMemory();
   1202             return NULL;
   1203         }
   1204     }
   1205 
   1206     nargs = 0;
   1207     for (i=0; i < niters; i++) {
   1208         PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
   1209         PyObject *val = Py_TYPE(it)->tp_iternext(it);
   1210         if (val == NULL) {
   1211             goto exit;
   1212         }
   1213         stack[i] = val;
   1214         nargs++;
   1215     }
   1216 
   1217     result = _PyObject_FastCall(lz->func, stack, nargs);
   1218 
   1219 exit:
   1220     for (i=0; i < nargs; i++) {
   1221         Py_DECREF(stack[i]);
   1222     }
   1223     if (stack != small_stack) {
   1224         PyMem_Free(stack);
   1225     }
   1226     return result;
   1227 }
   1228 
   1229 static PyObject *
   1230 map_reduce(mapobject *lz)
   1231 {
   1232     Py_ssize_t numargs = PyTuple_GET_SIZE(lz->iters);
   1233     PyObject *args = PyTuple_New(numargs+1);
   1234     Py_ssize_t i;
   1235     if (args == NULL)
   1236         return NULL;
   1237     Py_INCREF(lz->func);
   1238     PyTuple_SET_ITEM(args, 0, lz->func);
   1239     for (i = 0; i<numargs; i++){
   1240         PyObject *it = PyTuple_GET_ITEM(lz->iters, i);
   1241         Py_INCREF(it);
   1242         PyTuple_SET_ITEM(args, i+1, it);
   1243     }
   1244 
   1245     return Py_BuildValue("ON", Py_TYPE(lz), args);
   1246 }
   1247 
   1248 static PyMethodDef map_methods[] = {
   1249     {"__reduce__",   (PyCFunction)map_reduce,   METH_NOARGS, reduce_doc},
   1250     {NULL,           NULL}           /* sentinel */
   1251 };
   1252 
   1253 
   1254 PyDoc_STRVAR(map_doc,
   1255 "map(func, *iterables) --> map object\n\
   1256 \n\
   1257 Make an iterator that computes the function using arguments from\n\
   1258 each of the iterables.  Stops when the shortest iterable is exhausted.");
   1259 
   1260 PyTypeObject PyMap_Type = {
   1261     PyVarObject_HEAD_INIT(&PyType_Type, 0)
   1262     "map",                              /* tp_name */
   1263     sizeof(mapobject),                  /* tp_basicsize */
   1264     0,                                  /* tp_itemsize */
   1265     /* methods */
   1266     (destructor)map_dealloc,            /* tp_dealloc */
   1267     0,                                  /* tp_print */
   1268     0,                                  /* tp_getattr */
   1269     0,                                  /* tp_setattr */
   1270     0,                                  /* tp_reserved */
   1271     0,                                  /* tp_repr */
   1272     0,                                  /* tp_as_number */
   1273     0,                                  /* tp_as_sequence */
   1274     0,                                  /* tp_as_mapping */
   1275     0,                                  /* tp_hash */
   1276     0,                                  /* tp_call */
   1277     0,                                  /* tp_str */
   1278     PyObject_GenericGetAttr,            /* tp_getattro */
   1279     0,                                  /* tp_setattro */
   1280     0,                                  /* tp_as_buffer */
   1281     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
   1282         Py_TPFLAGS_BASETYPE,            /* tp_flags */
   1283     map_doc,                            /* tp_doc */
   1284     (traverseproc)map_traverse,         /* tp_traverse */
   1285     0,                                  /* tp_clear */
   1286     0,                                  /* tp_richcompare */
   1287     0,                                  /* tp_weaklistoffset */
   1288     PyObject_SelfIter,                  /* tp_iter */
   1289     (iternextfunc)map_next,     /* tp_iternext */
   1290     map_methods,                        /* tp_methods */
   1291     0,                                  /* tp_members */
   1292     0,                                  /* tp_getset */
   1293     0,                                  /* tp_base */
   1294     0,                                  /* tp_dict */
   1295     0,                                  /* tp_descr_get */
   1296     0,                                  /* tp_descr_set */
   1297     0,                                  /* tp_dictoffset */
   1298     0,                                  /* tp_init */
   1299     PyType_GenericAlloc,                /* tp_alloc */
   1300     map_new,                            /* tp_new */
   1301     PyObject_GC_Del,                    /* tp_free */
   1302 };
   1303 
   1304 
   1305 /* AC: cannot convert yet, as needs PEP 457 group support in inspect */
   1306 static PyObject *
   1307 builtin_next(PyObject *self, PyObject *args)
   1308 {
   1309     PyObject *it, *res;
   1310     PyObject *def = NULL;
   1311 
   1312     if (!PyArg_UnpackTuple(args, "next", 1, 2, &it, &def))
   1313         return NULL;
   1314     if (!PyIter_Check(it)) {
   1315         PyErr_Format(PyExc_TypeError,
   1316             "'%.200s' object is not an iterator",
   1317             it->ob_type->tp_name);
   1318         return NULL;
   1319     }
   1320 
   1321     res = (*it->ob_type->tp_iternext)(it);
   1322     if (res != NULL) {
   1323         return res;
   1324     } else if (def != NULL) {
   1325         if (PyErr_Occurred()) {
   1326             if(!PyErr_ExceptionMatches(PyExc_StopIteration))
   1327                 return NULL;
   1328             PyErr_Clear();
   1329         }
   1330         Py_INCREF(def);
   1331         return def;
   1332     } else if (PyErr_Occurred()) {
   1333         return NULL;
   1334     } else {
   1335         PyErr_SetNone(PyExc_StopIteration);
   1336         return NULL;
   1337     }
   1338 }
   1339 
   1340 PyDoc_STRVAR(next_doc,
   1341 "next(iterator[, default])\n\
   1342 \n\
   1343 Return the next item from the iterator. If default is given and the iterator\n\
   1344 is exhausted, it is returned instead of raising StopIteration.");
   1345 
   1346 
   1347 /*[clinic input]
   1348 setattr as builtin_setattr
   1349 
   1350     obj: object
   1351     name: object
   1352     value: object
   1353     /
   1354 
   1355 Sets the named attribute on the given object to the specified value.
   1356 
   1357 setattr(x, 'y', v) is equivalent to ``x.y = v''
   1358 [clinic start generated code]*/
   1359 
   1360 static PyObject *
   1361 builtin_setattr_impl(PyObject *module, PyObject *obj, PyObject *name,
   1362                      PyObject *value)
   1363 /*[clinic end generated code: output=dc2ce1d1add9acb4 input=bd2b7ca6875a1899]*/
   1364 {
   1365     if (PyObject_SetAttr(obj, name, value) != 0)
   1366         return NULL;
   1367     Py_INCREF(Py_None);
   1368     return Py_None;
   1369 }
   1370 
   1371 
   1372 /*[clinic input]
   1373 delattr as builtin_delattr
   1374 
   1375     obj: object
   1376     name: object
   1377     /
   1378 
   1379 Deletes the named attribute from the given object.
   1380 
   1381 delattr(x, 'y') is equivalent to ``del x.y''
   1382 [clinic start generated code]*/
   1383 
   1384 static PyObject *
   1385 builtin_delattr_impl(PyObject *module, PyObject *obj, PyObject *name)
   1386 /*[clinic end generated code: output=85134bc58dff79fa input=db16685d6b4b9410]*/
   1387 {
   1388     if (PyObject_SetAttr(obj, name, (PyObject *)NULL) != 0)
   1389         return NULL;
   1390     Py_INCREF(Py_None);
   1391     return Py_None;
   1392 }
   1393 
   1394 
   1395 /*[clinic input]
   1396 hash as builtin_hash
   1397 
   1398     obj: object
   1399     /
   1400 
   1401 Return the hash value for the given object.
   1402 
   1403 Two objects that compare equal must also have the same hash value, but the
   1404 reverse is not necessarily true.
   1405 [clinic start generated code]*/
   1406 
   1407 static PyObject *
   1408 builtin_hash(PyObject *module, PyObject *obj)
   1409 /*[clinic end generated code: output=237668e9d7688db7 input=58c48be822bf9c54]*/
   1410 {
   1411     Py_hash_t x;
   1412 
   1413     x = PyObject_Hash(obj);
   1414     if (x == -1)
   1415         return NULL;
   1416     return PyLong_FromSsize_t(x);
   1417 }
   1418 
   1419 
   1420 /*[clinic input]
   1421 hex as builtin_hex
   1422 
   1423     number: object
   1424     /
   1425 
   1426 Return the hexadecimal representation of an integer.
   1427 
   1428    >>> hex(12648430)
   1429    '0xc0ffee'
   1430 [clinic start generated code]*/
   1431 
   1432 static PyObject *
   1433 builtin_hex(PyObject *module, PyObject *number)
   1434 /*[clinic end generated code: output=e46b612169099408 input=e645aff5fc7d540e]*/
   1435 {
   1436     return PyNumber_ToBase(number, 16);
   1437 }
   1438 
   1439 
   1440 /* AC: cannot convert yet, as needs PEP 457 group support in inspect */
   1441 static PyObject *
   1442 builtin_iter(PyObject *self, PyObject *args)
   1443 {
   1444     PyObject *v, *w = NULL;
   1445 
   1446     if (!PyArg_UnpackTuple(args, "iter", 1, 2, &v, &w))
   1447         return NULL;
   1448     if (w == NULL)
   1449         return PyObject_GetIter(v);
   1450     if (!PyCallable_Check(v)) {
   1451         PyErr_SetString(PyExc_TypeError,
   1452                         "iter(v, w): v must be callable");
   1453         return NULL;
   1454     }
   1455     return PyCallIter_New(v, w);
   1456 }
   1457 
   1458 PyDoc_STRVAR(iter_doc,
   1459 "iter(iterable) -> iterator\n\
   1460 iter(callable, sentinel) -> iterator\n\
   1461 \n\
   1462 Get an iterator from an object.  In the first form, the argument must\n\
   1463 supply its own iterator, or be a sequence.\n\
   1464 In the second form, the callable is called until it returns the sentinel.");
   1465 
   1466 
   1467 /*[clinic input]
   1468 len as builtin_len
   1469 
   1470     obj: object
   1471     /
   1472 
   1473 Return the number of items in a container.
   1474 [clinic start generated code]*/
   1475 
   1476 static PyObject *
   1477 builtin_len(PyObject *module, PyObject *obj)
   1478 /*[clinic end generated code: output=fa7a270d314dfb6c input=bc55598da9e9c9b5]*/
   1479 {
   1480     Py_ssize_t res;
   1481 
   1482     res = PyObject_Size(obj);
   1483     if (res < 0 && PyErr_Occurred())
   1484         return NULL;
   1485     return PyLong_FromSsize_t(res);
   1486 }
   1487 
   1488 
   1489 /*[clinic input]
   1490 locals as builtin_locals
   1491 
   1492 Return a dictionary containing the current scope's local variables.
   1493 
   1494 NOTE: Whether or not updates to this dictionary will affect name lookups in
   1495 the local scope and vice-versa is *implementation dependent* and not
   1496 covered by any backwards compatibility guarantees.
   1497 [clinic start generated code]*/
   1498 
   1499 static PyObject *
   1500 builtin_locals_impl(PyObject *module)
   1501 /*[clinic end generated code: output=b46c94015ce11448 input=7874018d478d5c4b]*/
   1502 {
   1503     PyObject *d;
   1504 
   1505     d = PyEval_GetLocals();
   1506     Py_XINCREF(d);
   1507     return d;
   1508 }
   1509 
   1510 
   1511 static PyObject *
   1512 min_max(PyObject *args, PyObject *kwds, int op)
   1513 {
   1514     PyObject *v, *it, *item, *val, *maxitem, *maxval, *keyfunc=NULL;
   1515     PyObject *emptytuple, *defaultval = NULL;
   1516     static char *kwlist[] = {"key", "default", NULL};
   1517     const char *name = op == Py_LT ? "min" : "max";
   1518     const int positional = PyTuple_Size(args) > 1;
   1519     int ret;
   1520 
   1521     if (positional)
   1522         v = args;
   1523     else if (!PyArg_UnpackTuple(args, name, 1, 1, &v))
   1524         return NULL;
   1525 
   1526     emptytuple = PyTuple_New(0);
   1527     if (emptytuple == NULL)
   1528         return NULL;
   1529     ret = PyArg_ParseTupleAndKeywords(emptytuple, kwds, "|$OO", kwlist,
   1530                                       &keyfunc, &defaultval);
   1531     Py_DECREF(emptytuple);
   1532     if (!ret)
   1533         return NULL;
   1534 
   1535     if (positional && defaultval != NULL) {
   1536         PyErr_Format(PyExc_TypeError,
   1537                         "Cannot specify a default for %s() with multiple "
   1538                         "positional arguments", name);
   1539         return NULL;
   1540     }
   1541 
   1542     it = PyObject_GetIter(v);
   1543     if (it == NULL) {
   1544         return NULL;
   1545     }
   1546 
   1547     maxitem = NULL; /* the result */
   1548     maxval = NULL;  /* the value associated with the result */
   1549     while (( item = PyIter_Next(it) )) {
   1550         /* get the value from the key function */
   1551         if (keyfunc != NULL) {
   1552             val = PyObject_CallFunctionObjArgs(keyfunc, item, NULL);
   1553             if (val == NULL)
   1554                 goto Fail_it_item;
   1555         }
   1556         /* no key function; the value is the item */
   1557         else {
   1558             val = item;
   1559             Py_INCREF(val);
   1560         }
   1561 
   1562         /* maximum value and item are unset; set them */
   1563         if (maxval == NULL) {
   1564             maxitem = item;
   1565             maxval = val;
   1566         }
   1567         /* maximum value and item are set; update them as necessary */
   1568         else {
   1569             int cmp = PyObject_RichCompareBool(val, maxval, op);
   1570             if (cmp < 0)
   1571                 goto Fail_it_item_and_val;
   1572             else if (cmp > 0) {
   1573                 Py_DECREF(maxval);
   1574                 Py_DECREF(maxitem);
   1575                 maxval = val;
   1576                 maxitem = item;
   1577             }
   1578             else {
   1579                 Py_DECREF(item);
   1580                 Py_DECREF(val);
   1581             }
   1582         }
   1583     }
   1584     if (PyErr_Occurred())
   1585         goto Fail_it;
   1586     if (maxval == NULL) {
   1587         assert(maxitem == NULL);
   1588         if (defaultval != NULL) {
   1589             Py_INCREF(defaultval);
   1590             maxitem = defaultval;
   1591         } else {
   1592             PyErr_Format(PyExc_ValueError,
   1593                          "%s() arg is an empty sequence", name);
   1594         }
   1595     }
   1596     else
   1597         Py_DECREF(maxval);
   1598     Py_DECREF(it);
   1599     return maxitem;
   1600 
   1601 Fail_it_item_and_val:
   1602     Py_DECREF(val);
   1603 Fail_it_item:
   1604     Py_DECREF(item);
   1605 Fail_it:
   1606     Py_XDECREF(maxval);
   1607     Py_XDECREF(maxitem);
   1608     Py_DECREF(it);
   1609     return NULL;
   1610 }
   1611 
   1612 /* AC: cannot convert yet, waiting for *args support */
   1613 static PyObject *
   1614 builtin_min(PyObject *self, PyObject *args, PyObject *kwds)
   1615 {
   1616     return min_max(args, kwds, Py_LT);
   1617 }
   1618 
   1619 PyDoc_STRVAR(min_doc,
   1620 "min(iterable, *[, default=obj, key=func]) -> value\n\
   1621 min(arg1, arg2, *args, *[, key=func]) -> value\n\
   1622 \n\
   1623 With a single iterable argument, return its smallest item. The\n\
   1624 default keyword-only argument specifies an object to return if\n\
   1625 the provided iterable is empty.\n\
   1626 With two or more arguments, return the smallest argument.");
   1627 
   1628 
   1629 /* AC: cannot convert yet, waiting for *args support */
   1630 static PyObject *
   1631 builtin_max(PyObject *self, PyObject *args, PyObject *kwds)
   1632 {
   1633     return min_max(args, kwds, Py_GT);
   1634 }
   1635 
   1636 PyDoc_STRVAR(max_doc,
   1637 "max(iterable, *[, default=obj, key=func]) -> value\n\
   1638 max(arg1, arg2, *args, *[, key=func]) -> value\n\
   1639 \n\
   1640 With a single iterable argument, return its biggest item. The\n\
   1641 default keyword-only argument specifies an object to return if\n\
   1642 the provided iterable is empty.\n\
   1643 With two or more arguments, return the largest argument.");
   1644 
   1645 
   1646 /*[clinic input]
   1647 oct as builtin_oct
   1648 
   1649     number: object
   1650     /
   1651 
   1652 Return the octal representation of an integer.
   1653 
   1654    >>> oct(342391)
   1655    '0o1234567'
   1656 [clinic start generated code]*/
   1657 
   1658 static PyObject *
   1659 builtin_oct(PyObject *module, PyObject *number)
   1660 /*[clinic end generated code: output=40a34656b6875352 input=ad6b274af4016c72]*/
   1661 {
   1662     return PyNumber_ToBase(number, 8);
   1663 }
   1664 
   1665 
   1666 /*[clinic input]
   1667 ord as builtin_ord
   1668 
   1669     c: object
   1670     /
   1671 
   1672 Return the Unicode code point for a one-character string.
   1673 [clinic start generated code]*/
   1674 
   1675 static PyObject *
   1676 builtin_ord(PyObject *module, PyObject *c)
   1677 /*[clinic end generated code: output=4fa5e87a323bae71 input=3064e5d6203ad012]*/
   1678 {
   1679     long ord;
   1680     Py_ssize_t size;
   1681 
   1682     if (PyBytes_Check(c)) {
   1683         size = PyBytes_GET_SIZE(c);
   1684         if (size == 1) {
   1685             ord = (long)((unsigned char)*PyBytes_AS_STRING(c));
   1686             return PyLong_FromLong(ord);
   1687         }
   1688     }
   1689     else if (PyUnicode_Check(c)) {
   1690         if (PyUnicode_READY(c) == -1)
   1691             return NULL;
   1692         size = PyUnicode_GET_LENGTH(c);
   1693         if (size == 1) {
   1694             ord = (long)PyUnicode_READ_CHAR(c, 0);
   1695             return PyLong_FromLong(ord);
   1696         }
   1697     }
   1698     else if (PyByteArray_Check(c)) {
   1699         /* XXX Hopefully this is temporary */
   1700         size = PyByteArray_GET_SIZE(c);
   1701         if (size == 1) {
   1702             ord = (long)((unsigned char)*PyByteArray_AS_STRING(c));
   1703             return PyLong_FromLong(ord);
   1704         }
   1705     }
   1706     else {
   1707         PyErr_Format(PyExc_TypeError,
   1708                      "ord() expected string of length 1, but " \
   1709                      "%.200s found", c->ob_type->tp_name);
   1710         return NULL;
   1711     }
   1712 
   1713     PyErr_Format(PyExc_TypeError,
   1714                  "ord() expected a character, "
   1715                  "but string of length %zd found",
   1716                  size);
   1717     return NULL;
   1718 }
   1719 
   1720 
   1721 /*[clinic input]
   1722 pow as builtin_pow
   1723 
   1724     x: object
   1725     y: object
   1726     z: object = None
   1727     /
   1728 
   1729 Equivalent to x**y (with two arguments) or x**y % z (with three arguments)
   1730 
   1731 Some types, such as ints, are able to use a more efficient algorithm when
   1732 invoked using the three argument form.
   1733 [clinic start generated code]*/
   1734 
   1735 static PyObject *
   1736 builtin_pow_impl(PyObject *module, PyObject *x, PyObject *y, PyObject *z)
   1737 /*[clinic end generated code: output=50a14d5d130d404b input=653d57d38d41fc07]*/
   1738 {
   1739     return PyNumber_Power(x, y, z);
   1740 }
   1741 
   1742 
   1743 /* AC: cannot convert yet, waiting for *args support */
   1744 static PyObject *
   1745 builtin_print(PyObject *self, PyObject *args, PyObject *kwds)
   1746 {
   1747     static char *kwlist[] = {"sep", "end", "file", "flush", 0};
   1748     static PyObject *dummy_args;
   1749     PyObject *sep = NULL, *end = NULL, *file = NULL, *flush = NULL;
   1750     int i, err;
   1751 
   1752     if (dummy_args == NULL && !(dummy_args = PyTuple_New(0)))
   1753         return NULL;
   1754     if (!PyArg_ParseTupleAndKeywords(dummy_args, kwds, "|OOOO:print",
   1755                                      kwlist, &sep, &end, &file, &flush))
   1756         return NULL;
   1757     if (file == NULL || file == Py_None) {
   1758         file = _PySys_GetObjectId(&PyId_stdout);
   1759         if (file == NULL) {
   1760             PyErr_SetString(PyExc_RuntimeError, "lost sys.stdout");
   1761             return NULL;
   1762         }
   1763 
   1764         /* sys.stdout may be None when FILE* stdout isn't connected */
   1765         if (file == Py_None)
   1766             Py_RETURN_NONE;
   1767     }
   1768 
   1769     if (sep == Py_None) {
   1770         sep = NULL;
   1771     }
   1772     else if (sep && !PyUnicode_Check(sep)) {
   1773         PyErr_Format(PyExc_TypeError,
   1774                      "sep must be None or a string, not %.200s",
   1775                      sep->ob_type->tp_name);
   1776         return NULL;
   1777     }
   1778     if (end == Py_None) {
   1779         end = NULL;
   1780     }
   1781     else if (end && !PyUnicode_Check(end)) {
   1782         PyErr_Format(PyExc_TypeError,
   1783                      "end must be None or a string, not %.200s",
   1784                      end->ob_type->tp_name);
   1785         return NULL;
   1786     }
   1787 
   1788     for (i = 0; i < PyTuple_Size(args); i++) {
   1789         if (i > 0) {
   1790             if (sep == NULL)
   1791                 err = PyFile_WriteString(" ", file);
   1792             else
   1793                 err = PyFile_WriteObject(sep, file,
   1794                                          Py_PRINT_RAW);
   1795             if (err)
   1796                 return NULL;
   1797         }
   1798         err = PyFile_WriteObject(PyTuple_GetItem(args, i), file,
   1799                                  Py_PRINT_RAW);
   1800         if (err)
   1801             return NULL;
   1802     }
   1803 
   1804     if (end == NULL)
   1805         err = PyFile_WriteString("\n", file);
   1806     else
   1807         err = PyFile_WriteObject(end, file, Py_PRINT_RAW);
   1808     if (err)
   1809         return NULL;
   1810 
   1811     if (flush != NULL) {
   1812         PyObject *tmp;
   1813         int do_flush = PyObject_IsTrue(flush);
   1814         if (do_flush == -1)
   1815             return NULL;
   1816         else if (do_flush) {
   1817             tmp = _PyObject_CallMethodId(file, &PyId_flush, NULL);
   1818             if (tmp == NULL)
   1819                 return NULL;
   1820             else
   1821                 Py_DECREF(tmp);
   1822         }
   1823     }
   1824 
   1825     Py_RETURN_NONE;
   1826 }
   1827 
   1828 PyDoc_STRVAR(print_doc,
   1829 "print(value, ..., sep=' ', end='\\n', file=sys.stdout, flush=False)\n\
   1830 \n\
   1831 Prints the values to a stream, or to sys.stdout by default.\n\
   1832 Optional keyword arguments:\n\
   1833 file:  a file-like object (stream); defaults to the current sys.stdout.\n\
   1834 sep:   string inserted between values, default a space.\n\
   1835 end:   string appended after the last value, default a newline.\n\
   1836 flush: whether to forcibly flush the stream.");
   1837 
   1838 
   1839 /*[clinic input]
   1840 input as builtin_input
   1841 
   1842     prompt: object(c_default="NULL") = None
   1843     /
   1844 
   1845 Read a string from standard input.  The trailing newline is stripped.
   1846 
   1847 The prompt string, if given, is printed to standard output without a
   1848 trailing newline before reading input.
   1849 
   1850 If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
   1851 On *nix systems, readline is used if available.
   1852 [clinic start generated code]*/
   1853 
   1854 static PyObject *
   1855 builtin_input_impl(PyObject *module, PyObject *prompt)
   1856 /*[clinic end generated code: output=83db5a191e7a0d60 input=5e8bb70c2908fe3c]*/
   1857 {
   1858     PyObject *fin = _PySys_GetObjectId(&PyId_stdin);
   1859     PyObject *fout = _PySys_GetObjectId(&PyId_stdout);
   1860     PyObject *ferr = _PySys_GetObjectId(&PyId_stderr);
   1861     PyObject *tmp;
   1862     long fd;
   1863     int tty;
   1864 
   1865     /* Check that stdin/out/err are intact */
   1866     if (fin == NULL || fin == Py_None) {
   1867         PyErr_SetString(PyExc_RuntimeError,
   1868                         "input(): lost sys.stdin");
   1869         return NULL;
   1870     }
   1871     if (fout == NULL || fout == Py_None) {
   1872         PyErr_SetString(PyExc_RuntimeError,
   1873                         "input(): lost sys.stdout");
   1874         return NULL;
   1875     }
   1876     if (ferr == NULL || ferr == Py_None) {
   1877         PyErr_SetString(PyExc_RuntimeError,
   1878                         "input(): lost sys.stderr");
   1879         return NULL;
   1880     }
   1881 
   1882     /* First of all, flush stderr */
   1883     tmp = _PyObject_CallMethodId(ferr, &PyId_flush, NULL);
   1884     if (tmp == NULL)
   1885         PyErr_Clear();
   1886     else
   1887         Py_DECREF(tmp);
   1888 
   1889     /* We should only use (GNU) readline if Python's sys.stdin and
   1890        sys.stdout are the same as C's stdin and stdout, because we
   1891        need to pass it those. */
   1892     tmp = _PyObject_CallMethodId(fin, &PyId_fileno, NULL);
   1893     if (tmp == NULL) {
   1894         PyErr_Clear();
   1895         tty = 0;
   1896     }
   1897     else {
   1898         fd = PyLong_AsLong(tmp);
   1899         Py_DECREF(tmp);
   1900         if (fd < 0 && PyErr_Occurred())
   1901             return NULL;
   1902         tty = fd == fileno(stdin) && isatty(fd);
   1903     }
   1904     if (tty) {
   1905         tmp = _PyObject_CallMethodId(fout, &PyId_fileno, NULL);
   1906         if (tmp == NULL) {
   1907             PyErr_Clear();
   1908             tty = 0;
   1909         }
   1910         else {
   1911             fd = PyLong_AsLong(tmp);
   1912             Py_DECREF(tmp);
   1913             if (fd < 0 && PyErr_Occurred())
   1914                 return NULL;
   1915             tty = fd == fileno(stdout) && isatty(fd);
   1916         }
   1917     }
   1918 
   1919     /* If we're interactive, use (GNU) readline */
   1920     if (tty) {
   1921         PyObject *po = NULL;
   1922         char *promptstr;
   1923         char *s = NULL;
   1924         PyObject *stdin_encoding = NULL, *stdin_errors = NULL;
   1925         PyObject *stdout_encoding = NULL, *stdout_errors = NULL;
   1926         char *stdin_encoding_str, *stdin_errors_str;
   1927         PyObject *result;
   1928         size_t len;
   1929 
   1930         stdin_encoding = _PyObject_GetAttrId(fin, &PyId_encoding);
   1931         stdin_errors = _PyObject_GetAttrId(fin, &PyId_errors);
   1932         if (!stdin_encoding || !stdin_errors)
   1933             /* stdin is a text stream, so it must have an
   1934                encoding. */
   1935             goto _readline_errors;
   1936         stdin_encoding_str = PyUnicode_AsUTF8(stdin_encoding);
   1937         stdin_errors_str = PyUnicode_AsUTF8(stdin_errors);
   1938         if (!stdin_encoding_str || !stdin_errors_str)
   1939             goto _readline_errors;
   1940         tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
   1941         if (tmp == NULL)
   1942             PyErr_Clear();
   1943         else
   1944             Py_DECREF(tmp);
   1945         if (prompt != NULL) {
   1946             /* We have a prompt, encode it as stdout would */
   1947             char *stdout_encoding_str, *stdout_errors_str;
   1948             PyObject *stringpo;
   1949             stdout_encoding = _PyObject_GetAttrId(fout, &PyId_encoding);
   1950             stdout_errors = _PyObject_GetAttrId(fout, &PyId_errors);
   1951             if (!stdout_encoding || !stdout_errors)
   1952                 goto _readline_errors;
   1953             stdout_encoding_str = PyUnicode_AsUTF8(stdout_encoding);
   1954             stdout_errors_str = PyUnicode_AsUTF8(stdout_errors);
   1955             if (!stdout_encoding_str || !stdout_errors_str)
   1956                 goto _readline_errors;
   1957             stringpo = PyObject_Str(prompt);
   1958             if (stringpo == NULL)
   1959                 goto _readline_errors;
   1960             po = PyUnicode_AsEncodedString(stringpo,
   1961                 stdout_encoding_str, stdout_errors_str);
   1962             Py_CLEAR(stdout_encoding);
   1963             Py_CLEAR(stdout_errors);
   1964             Py_CLEAR(stringpo);
   1965             if (po == NULL)
   1966                 goto _readline_errors;
   1967             assert(PyBytes_Check(po));
   1968             promptstr = PyBytes_AS_STRING(po);
   1969         }
   1970         else {
   1971             po = NULL;
   1972             promptstr = "";
   1973         }
   1974         s = PyOS_Readline(stdin, stdout, promptstr);
   1975         if (s == NULL) {
   1976             PyErr_CheckSignals();
   1977             if (!PyErr_Occurred())
   1978                 PyErr_SetNone(PyExc_KeyboardInterrupt);
   1979             goto _readline_errors;
   1980         }
   1981 
   1982         len = strlen(s);
   1983         if (len == 0) {
   1984             PyErr_SetNone(PyExc_EOFError);
   1985             result = NULL;
   1986         }
   1987         else {
   1988             if (len > PY_SSIZE_T_MAX) {
   1989                 PyErr_SetString(PyExc_OverflowError,
   1990                                 "input: input too long");
   1991                 result = NULL;
   1992             }
   1993             else {
   1994                 len--;   /* strip trailing '\n' */
   1995                 if (len != 0 && s[len-1] == '\r')
   1996                     len--;   /* strip trailing '\r' */
   1997                 result = PyUnicode_Decode(s, len, stdin_encoding_str,
   1998                                                   stdin_errors_str);
   1999             }
   2000         }
   2001         Py_DECREF(stdin_encoding);
   2002         Py_DECREF(stdin_errors);
   2003         Py_XDECREF(po);
   2004         PyMem_FREE(s);
   2005         return result;
   2006     _readline_errors:
   2007         Py_XDECREF(stdin_encoding);
   2008         Py_XDECREF(stdout_encoding);
   2009         Py_XDECREF(stdin_errors);
   2010         Py_XDECREF(stdout_errors);
   2011         Py_XDECREF(po);
   2012         return NULL;
   2013     }
   2014 
   2015     /* Fallback if we're not interactive */
   2016     if (prompt != NULL) {
   2017         if (PyFile_WriteObject(prompt, fout, Py_PRINT_RAW) != 0)
   2018             return NULL;
   2019     }
   2020     tmp = _PyObject_CallMethodId(fout, &PyId_flush, NULL);
   2021     if (tmp == NULL)
   2022         PyErr_Clear();
   2023     else
   2024         Py_DECREF(tmp);
   2025     return PyFile_GetLine(fin, -1);
   2026 }
   2027 
   2028 
   2029 /*[clinic input]
   2030 repr as builtin_repr
   2031 
   2032     obj: object
   2033     /
   2034 
   2035 Return the canonical string representation of the object.
   2036 
   2037 For many object types, including most builtins, eval(repr(obj)) == obj.
   2038 [clinic start generated code]*/
   2039 
   2040 static PyObject *
   2041 builtin_repr(PyObject *module, PyObject *obj)
   2042 /*[clinic end generated code: output=7ed3778c44fd0194 input=1c9e6d66d3e3be04]*/
   2043 {
   2044     return PyObject_Repr(obj);
   2045 }
   2046 
   2047 
   2048 /* AC: cannot convert yet, as needs PEP 457 group support in inspect
   2049  *     or a semantic change to accept None for "ndigits"
   2050  */
   2051 static PyObject *
   2052 builtin_round(PyObject *self, PyObject *args, PyObject *kwds)
   2053 {
   2054     PyObject *ndigits = NULL;
   2055     static char *kwlist[] = {"number", "ndigits", 0};
   2056     PyObject *number, *round, *result;
   2057 
   2058     if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|O:round",
   2059                                      kwlist, &number, &ndigits))
   2060         return NULL;
   2061 
   2062     if (Py_TYPE(number)->tp_dict == NULL) {
   2063         if (PyType_Ready(Py_TYPE(number)) < 0)
   2064             return NULL;
   2065     }
   2066 
   2067     round = _PyObject_LookupSpecial(number, &PyId___round__);
   2068     if (round == NULL) {
   2069         if (!PyErr_Occurred())
   2070             PyErr_Format(PyExc_TypeError,
   2071                          "type %.100s doesn't define __round__ method",
   2072                          Py_TYPE(number)->tp_name);
   2073         return NULL;
   2074     }
   2075 
   2076     if (ndigits == NULL || ndigits == Py_None)
   2077         result = PyObject_CallFunctionObjArgs(round, NULL);
   2078     else
   2079         result = PyObject_CallFunctionObjArgs(round, ndigits, NULL);
   2080     Py_DECREF(round);
   2081     return result;
   2082 }
   2083 
   2084 PyDoc_STRVAR(round_doc,
   2085 "round(number[, ndigits]) -> number\n\
   2086 \n\
   2087 Round a number to a given precision in decimal digits (default 0 digits).\n\
   2088 This returns an int when called with one argument, otherwise the\n\
   2089 same type as the number. ndigits may be negative.");
   2090 
   2091 
   2092 /*AC: we need to keep the kwds dict intact to easily call into the
   2093  * list.sort method, which isn't currently supported in AC. So we just use
   2094  * the initially generated signature with a custom implementation.
   2095  */
   2096 /* [disabled clinic input]
   2097 sorted as builtin_sorted
   2098 
   2099     iterable as seq: object
   2100     key as keyfunc: object = None
   2101     reverse: object = False
   2102 
   2103 Return a new list containing all items from the iterable in ascending order.
   2104 
   2105 A custom key function can be supplied to customize the sort order, and the
   2106 reverse flag can be set to request the result in descending order.
   2107 [end disabled clinic input]*/
   2108 
   2109 PyDoc_STRVAR(builtin_sorted__doc__,
   2110 "sorted($module, iterable, /, *, key=None, reverse=False)\n"
   2111 "--\n"
   2112 "\n"
   2113 "Return a new list containing all items from the iterable in ascending order.\n"
   2114 "\n"
   2115 "A custom key function can be supplied to customize the sort order, and the\n"
   2116 "reverse flag can be set to request the result in descending order.");
   2117 
   2118 #define BUILTIN_SORTED_METHODDEF    \
   2119     {"sorted", (PyCFunction)builtin_sorted, METH_VARARGS|METH_KEYWORDS, builtin_sorted__doc__},
   2120 
   2121 static PyObject *
   2122 builtin_sorted(PyObject *self, PyObject *args, PyObject *kwds)
   2123 {
   2124     PyObject *newlist, *v, *seq, *keyfunc=NULL, **newargs;
   2125     PyObject *callable;
   2126     static char *kwlist[] = {"", "key", "reverse", 0};
   2127     int reverse;
   2128     Py_ssize_t nargs;
   2129 
   2130     /* args 1-3 should match listsort in Objects/listobject.c */
   2131     if (!PyArg_ParseTupleAndKeywords(args, kwds, "O|Oi:sorted",
   2132         kwlist, &seq, &keyfunc, &reverse))
   2133         return NULL;
   2134 
   2135     newlist = PySequence_List(seq);
   2136     if (newlist == NULL)
   2137         return NULL;
   2138 
   2139     callable = _PyObject_GetAttrId(newlist, &PyId_sort);
   2140     if (callable == NULL) {
   2141         Py_DECREF(newlist);
   2142         return NULL;
   2143     }
   2144 
   2145     assert(PyTuple_GET_SIZE(args) >= 1);
   2146     newargs = &PyTuple_GET_ITEM(args, 1);
   2147     nargs = PyTuple_GET_SIZE(args) - 1;
   2148     v = _PyObject_FastCallDict(callable, newargs, nargs, kwds);
   2149     Py_DECREF(callable);
   2150     if (v == NULL) {
   2151         Py_DECREF(newlist);
   2152         return NULL;
   2153     }
   2154     Py_DECREF(v);
   2155     return newlist;
   2156 }
   2157 
   2158 
   2159 /* AC: cannot convert yet, as needs PEP 457 group support in inspect */
   2160 static PyObject *
   2161 builtin_vars(PyObject *self, PyObject *args)
   2162 {
   2163     PyObject *v = NULL;
   2164     PyObject *d;
   2165 
   2166     if (!PyArg_UnpackTuple(args, "vars", 0, 1, &v))
   2167         return NULL;
   2168     if (v == NULL) {
   2169         d = PyEval_GetLocals();
   2170         if (d == NULL)
   2171             return NULL;
   2172         Py_INCREF(d);
   2173     }
   2174     else {
   2175         d = _PyObject_GetAttrId(v, &PyId___dict__);
   2176         if (d == NULL) {
   2177             PyErr_SetString(PyExc_TypeError,
   2178                 "vars() argument must have __dict__ attribute");
   2179             return NULL;
   2180         }
   2181     }
   2182     return d;
   2183 }
   2184 
   2185 PyDoc_STRVAR(vars_doc,
   2186 "vars([object]) -> dictionary\n\
   2187 \n\
   2188 Without arguments, equivalent to locals().\n\
   2189 With an argument, equivalent to object.__dict__.");
   2190 
   2191 
   2192 /*[clinic input]
   2193 sum as builtin_sum
   2194 
   2195     iterable: object
   2196     start: object(c_default="NULL") = 0
   2197     /
   2198 
   2199 Return the sum of a 'start' value (default: 0) plus an iterable of numbers
   2200 
   2201 When the iterable is empty, return the start value.
   2202 This function is intended specifically for use with numeric values and may
   2203 reject non-numeric types.
   2204 [clinic start generated code]*/
   2205 
   2206 static PyObject *
   2207 builtin_sum_impl(PyObject *module, PyObject *iterable, PyObject *start)
   2208 /*[clinic end generated code: output=df758cec7d1d302f input=3b5b7a9d7611c73a]*/
   2209 {
   2210     PyObject *result = start;
   2211     PyObject *temp, *item, *iter;
   2212 
   2213     iter = PyObject_GetIter(iterable);
   2214     if (iter == NULL)
   2215         return NULL;
   2216 
   2217     if (result == NULL) {
   2218         result = PyLong_FromLong(0);
   2219         if (result == NULL) {
   2220             Py_DECREF(iter);
   2221             return NULL;
   2222         }
   2223     } else {
   2224         /* reject string values for 'start' parameter */
   2225         if (PyUnicode_Check(result)) {
   2226             PyErr_SetString(PyExc_TypeError,
   2227                 "sum() can't sum strings [use ''.join(seq) instead]");
   2228             Py_DECREF(iter);
   2229             return NULL;
   2230         }
   2231         if (PyBytes_Check(result)) {
   2232             PyErr_SetString(PyExc_TypeError,
   2233                 "sum() can't sum bytes [use b''.join(seq) instead]");
   2234             Py_DECREF(iter);
   2235             return NULL;
   2236         }
   2237         if (PyByteArray_Check(result)) {
   2238             PyErr_SetString(PyExc_TypeError,
   2239                 "sum() can't sum bytearray [use b''.join(seq) instead]");
   2240             Py_DECREF(iter);
   2241             return NULL;
   2242         }
   2243         Py_INCREF(result);
   2244     }
   2245 
   2246 #ifndef SLOW_SUM
   2247     /* Fast addition by keeping temporary sums in C instead of new Python objects.
   2248        Assumes all inputs are the same type.  If the assumption fails, default
   2249        to the more general routine.
   2250     */
   2251     if (PyLong_CheckExact(result)) {
   2252         int overflow;
   2253         long i_result = PyLong_AsLongAndOverflow(result, &overflow);
   2254         /* If this already overflowed, don't even enter the loop. */
   2255         if (overflow == 0) {
   2256             Py_DECREF(result);
   2257             result = NULL;
   2258         }
   2259         while(result == NULL) {
   2260             item = PyIter_Next(iter);
   2261             if (item == NULL) {
   2262                 Py_DECREF(iter);
   2263                 if (PyErr_Occurred())
   2264                     return NULL;
   2265                 return PyLong_FromLong(i_result);
   2266             }
   2267             if (PyLong_CheckExact(item)) {
   2268                 long b = PyLong_AsLongAndOverflow(item, &overflow);
   2269                 long x = i_result + b;
   2270                 if (overflow == 0 && ((x^i_result) >= 0 || (x^b) >= 0)) {
   2271                     i_result = x;
   2272                     Py_DECREF(item);
   2273                     continue;
   2274                 }
   2275             }
   2276             /* Either overflowed or is not an int. Restore real objects and process normally */
   2277             result = PyLong_FromLong(i_result);
   2278             if (result == NULL) {
   2279                 Py_DECREF(item);
   2280                 Py_DECREF(iter);
   2281                 return NULL;
   2282             }
   2283             temp = PyNumber_Add(result, item);
   2284             Py_DECREF(result);
   2285             Py_DECREF(item);
   2286             result = temp;
   2287             if (result == NULL) {
   2288                 Py_DECREF(iter);
   2289                 return NULL;
   2290             }
   2291         }
   2292     }
   2293 
   2294     if (PyFloat_CheckExact(result)) {
   2295         double f_result = PyFloat_AS_DOUBLE(result);
   2296         Py_DECREF(result);
   2297         result = NULL;
   2298         while(result == NULL) {
   2299             item = PyIter_Next(iter);
   2300             if (item == NULL) {
   2301                 Py_DECREF(iter);
   2302                 if (PyErr_Occurred())
   2303                     return NULL;
   2304                 return PyFloat_FromDouble(f_result);
   2305             }
   2306             if (PyFloat_CheckExact(item)) {
   2307                 PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
   2308                 f_result += PyFloat_AS_DOUBLE(item);
   2309                 PyFPE_END_PROTECT(f_result)
   2310                 Py_DECREF(item);
   2311                 continue;
   2312             }
   2313             if (PyLong_CheckExact(item)) {
   2314                 long value;
   2315                 int overflow;
   2316                 value = PyLong_AsLongAndOverflow(item, &overflow);
   2317                 if (!overflow) {
   2318                     PyFPE_START_PROTECT("add", Py_DECREF(item); Py_DECREF(iter); return 0)
   2319                     f_result += (double)value;
   2320                     PyFPE_END_PROTECT(f_result)
   2321                     Py_DECREF(item);
   2322                     continue;
   2323                 }
   2324             }
   2325             result = PyFloat_FromDouble(f_result);
   2326             temp = PyNumber_Add(result, item);
   2327             Py_DECREF(result);
   2328             Py_DECREF(item);
   2329             result = temp;
   2330             if (result == NULL) {
   2331                 Py_DECREF(iter);
   2332                 return NULL;
   2333             }
   2334         }
   2335     }
   2336 #endif
   2337 
   2338     for(;;) {
   2339         item = PyIter_Next(iter);
   2340         if (item == NULL) {
   2341             /* error, or end-of-sequence */
   2342             if (PyErr_Occurred()) {
   2343                 Py_DECREF(result);
   2344                 result = NULL;
   2345             }
   2346             break;
   2347         }
   2348         /* It's tempting to use PyNumber_InPlaceAdd instead of
   2349            PyNumber_Add here, to avoid quadratic running time
   2350            when doing 'sum(list_of_lists, [])'.  However, this
   2351            would produce a change in behaviour: a snippet like
   2352 
   2353              empty = []
   2354              sum([[x] for x in range(10)], empty)
   2355 
   2356            would change the value of empty. */
   2357         temp = PyNumber_Add(result, item);
   2358         Py_DECREF(result);
   2359         Py_DECREF(item);
   2360         result = temp;
   2361         if (result == NULL)
   2362             break;
   2363     }
   2364     Py_DECREF(iter);
   2365     return result;
   2366 }
   2367 
   2368 
   2369 /*[clinic input]
   2370 isinstance as builtin_isinstance
   2371 
   2372     obj: object
   2373     class_or_tuple: object
   2374     /
   2375 
   2376 Return whether an object is an instance of a class or of a subclass thereof.
   2377 
   2378 A tuple, as in ``isinstance(x, (A, B, ...))``, may be given as the target to
   2379 check against. This is equivalent to ``isinstance(x, A) or isinstance(x, B)
   2380 or ...`` etc.
   2381 [clinic start generated code]*/
   2382 
   2383 static PyObject *
   2384 builtin_isinstance_impl(PyObject *module, PyObject *obj,
   2385                         PyObject *class_or_tuple)
   2386 /*[clinic end generated code: output=6faf01472c13b003 input=ffa743db1daf7549]*/
   2387 {
   2388     int retval;
   2389 
   2390     retval = PyObject_IsInstance(obj, class_or_tuple);
   2391     if (retval < 0)
   2392         return NULL;
   2393     return PyBool_FromLong(retval);
   2394 }
   2395 
   2396 
   2397 /*[clinic input]
   2398 issubclass as builtin_issubclass
   2399 
   2400     cls: object
   2401     class_or_tuple: object
   2402     /
   2403 
   2404 Return whether 'cls' is a derived from another class or is the same class.
   2405 
   2406 A tuple, as in ``issubclass(x, (A, B, ...))``, may be given as the target to
   2407 check against. This is equivalent to ``issubclass(x, A) or issubclass(x, B)
   2408 or ...`` etc.
   2409 [clinic start generated code]*/
   2410 
   2411 static PyObject *
   2412 builtin_issubclass_impl(PyObject *module, PyObject *cls,
   2413                         PyObject *class_or_tuple)
   2414 /*[clinic end generated code: output=358412410cd7a250 input=af5f35e9ceaddaf6]*/
   2415 {
   2416     int retval;
   2417 
   2418     retval = PyObject_IsSubclass(cls, class_or_tuple);
   2419     if (retval < 0)
   2420         return NULL;
   2421     return PyBool_FromLong(retval);
   2422 }
   2423 
   2424 
   2425 typedef struct {
   2426     PyObject_HEAD
   2427     Py_ssize_t          tuplesize;
   2428     PyObject *ittuple;                  /* tuple of iterators */
   2429     PyObject *result;
   2430 } zipobject;
   2431 
   2432 static PyObject *
   2433 zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
   2434 {
   2435     zipobject *lz;
   2436     Py_ssize_t i;
   2437     PyObject *ittuple;  /* tuple of iterators */
   2438     PyObject *result;
   2439     Py_ssize_t tuplesize = PySequence_Length(args);
   2440 
   2441     if (type == &PyZip_Type && !_PyArg_NoKeywords("zip()", kwds))
   2442         return NULL;
   2443 
   2444     /* args must be a tuple */
   2445     assert(PyTuple_Check(args));
   2446 
   2447     /* obtain iterators */
   2448     ittuple = PyTuple_New(tuplesize);
   2449     if (ittuple == NULL)
   2450         return NULL;
   2451     for (i=0; i < tuplesize; ++i) {
   2452         PyObject *item = PyTuple_GET_ITEM(args, i);
   2453         PyObject *it = PyObject_GetIter(item);
   2454         if (it == NULL) {
   2455             if (PyErr_ExceptionMatches(PyExc_TypeError))
   2456                 PyErr_Format(PyExc_TypeError,
   2457                     "zip argument #%zd must support iteration",
   2458                     i+1);
   2459             Py_DECREF(ittuple);
   2460             return NULL;
   2461         }
   2462         PyTuple_SET_ITEM(ittuple, i, it);
   2463     }
   2464 
   2465     /* create a result holder */
   2466     result = PyTuple_New(tuplesize);
   2467     if (result == NULL) {
   2468         Py_DECREF(ittuple);
   2469         return NULL;
   2470     }
   2471     for (i=0 ; i < tuplesize ; i++) {
   2472         Py_INCREF(Py_None);
   2473         PyTuple_SET_ITEM(result, i, Py_None);
   2474     }
   2475 
   2476     /* create zipobject structure */
   2477     lz = (zipobject *)type->tp_alloc(type, 0);
   2478     if (lz == NULL) {
   2479         Py_DECREF(ittuple);
   2480         Py_DECREF(result);
   2481         return NULL;
   2482     }
   2483     lz->ittuple = ittuple;
   2484     lz->tuplesize = tuplesize;
   2485     lz->result = result;
   2486 
   2487     return (PyObject *)lz;
   2488 }
   2489 
   2490 static void
   2491 zip_dealloc(zipobject *lz)
   2492 {
   2493     PyObject_GC_UnTrack(lz);
   2494     Py_XDECREF(lz->ittuple);
   2495     Py_XDECREF(lz->result);
   2496     Py_TYPE(lz)->tp_free(lz);
   2497 }
   2498 
   2499 static int
   2500 zip_traverse(zipobject *lz, visitproc visit, void *arg)
   2501 {
   2502     Py_VISIT(lz->ittuple);
   2503     Py_VISIT(lz->result);
   2504     return 0;
   2505 }
   2506 
   2507 static PyObject *
   2508 zip_next(zipobject *lz)
   2509 {
   2510     Py_ssize_t i;
   2511     Py_ssize_t tuplesize = lz->tuplesize;
   2512     PyObject *result = lz->result;
   2513     PyObject *it;
   2514     PyObject *item;
   2515     PyObject *olditem;
   2516 
   2517     if (tuplesize == 0)
   2518         return NULL;
   2519     if (Py_REFCNT(result) == 1) {
   2520         Py_INCREF(result);
   2521         for (i=0 ; i < tuplesize ; i++) {
   2522             it = PyTuple_GET_ITEM(lz->ittuple, i);
   2523             item = (*Py_TYPE(it)->tp_iternext)(it);
   2524             if (item == NULL) {
   2525                 Py_DECREF(result);
   2526                 return NULL;
   2527             }
   2528             olditem = PyTuple_GET_ITEM(result, i);
   2529             PyTuple_SET_ITEM(result, i, item);
   2530             Py_DECREF(olditem);
   2531         }
   2532     } else {
   2533         result = PyTuple_New(tuplesize);
   2534         if (result == NULL)
   2535             return NULL;
   2536         for (i=0 ; i < tuplesize ; i++) {
   2537             it = PyTuple_GET_ITEM(lz->ittuple, i);
   2538             item = (*Py_TYPE(it)->tp_iternext)(it);
   2539             if (item == NULL) {
   2540                 Py_DECREF(result);
   2541                 return NULL;
   2542             }
   2543             PyTuple_SET_ITEM(result, i, item);
   2544         }
   2545     }
   2546     return result;
   2547 }
   2548 
   2549 static PyObject *
   2550 zip_reduce(zipobject *lz)
   2551 {
   2552     /* Just recreate the zip with the internal iterator tuple */
   2553     return Py_BuildValue("OO", Py_TYPE(lz), lz->ittuple);
   2554 }
   2555 
   2556 static PyMethodDef zip_methods[] = {
   2557     {"__reduce__",   (PyCFunction)zip_reduce,   METH_NOARGS, reduce_doc},
   2558     {NULL,           NULL}           /* sentinel */
   2559 };
   2560 
   2561 PyDoc_STRVAR(zip_doc,
   2562 "zip(iter1 [,iter2 [...]]) --> zip object\n\
   2563 \n\
   2564 Return a zip object whose .__next__() method returns a tuple where\n\
   2565 the i-th element comes from the i-th iterable argument.  The .__next__()\n\
   2566 method continues until the shortest iterable in the argument sequence\n\
   2567 is exhausted and then it raises StopIteration.");
   2568 
   2569 PyTypeObject PyZip_Type = {
   2570     PyVarObject_HEAD_INIT(&PyType_Type, 0)
   2571     "zip",                              /* tp_name */
   2572     sizeof(zipobject),                  /* tp_basicsize */
   2573     0,                                  /* tp_itemsize */
   2574     /* methods */
   2575     (destructor)zip_dealloc,            /* tp_dealloc */
   2576     0,                                  /* tp_print */
   2577     0,                                  /* tp_getattr */
   2578     0,                                  /* tp_setattr */
   2579     0,                                  /* tp_reserved */
   2580     0,                                  /* tp_repr */
   2581     0,                                  /* tp_as_number */
   2582     0,                                  /* tp_as_sequence */
   2583     0,                                  /* tp_as_mapping */
   2584     0,                                  /* tp_hash */
   2585     0,                                  /* tp_call */
   2586     0,                                  /* tp_str */
   2587     PyObject_GenericGetAttr,            /* tp_getattro */
   2588     0,                                  /* tp_setattro */
   2589     0,                                  /* tp_as_buffer */
   2590     Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
   2591         Py_TPFLAGS_BASETYPE,            /* tp_flags */
   2592     zip_doc,                            /* tp_doc */
   2593     (traverseproc)zip_traverse,    /* tp_traverse */
   2594     0,                                  /* tp_clear */
   2595     0,                                  /* tp_richcompare */
   2596     0,                                  /* tp_weaklistoffset */
   2597     PyObject_SelfIter,                  /* tp_iter */
   2598     (iternextfunc)zip_next,     /* tp_iternext */
   2599     zip_methods,                        /* tp_methods */
   2600     0,                                  /* tp_members */
   2601     0,                                  /* tp_getset */
   2602     0,                                  /* tp_base */
   2603     0,                                  /* tp_dict */
   2604     0,                                  /* tp_descr_get */
   2605     0,                                  /* tp_descr_set */
   2606     0,                                  /* tp_dictoffset */
   2607     0,                                  /* tp_init */
   2608     PyType_GenericAlloc,                /* tp_alloc */
   2609     zip_new,                            /* tp_new */
   2610     PyObject_GC_Del,                    /* tp_free */
   2611 };
   2612 
   2613 
   2614 static PyMethodDef builtin_methods[] = {
   2615     {"__build_class__", (PyCFunction)builtin___build_class__,
   2616      METH_VARARGS | METH_KEYWORDS, build_class_doc},
   2617     {"__import__",      (PyCFunction)builtin___import__, METH_VARARGS | METH_KEYWORDS, import_doc},
   2618     BUILTIN_ABS_METHODDEF
   2619     BUILTIN_ALL_METHODDEF
   2620     BUILTIN_ANY_METHODDEF
   2621     BUILTIN_ASCII_METHODDEF
   2622     BUILTIN_BIN_METHODDEF
   2623     BUILTIN_CALLABLE_METHODDEF
   2624     BUILTIN_CHR_METHODDEF
   2625     BUILTIN_COMPILE_METHODDEF
   2626     BUILTIN_DELATTR_METHODDEF
   2627     {"dir",             builtin_dir,        METH_VARARGS, dir_doc},
   2628     BUILTIN_DIVMOD_METHODDEF
   2629     BUILTIN_EVAL_METHODDEF
   2630     BUILTIN_EXEC_METHODDEF
   2631     BUILTIN_FORMAT_METHODDEF
   2632     {"getattr",         builtin_getattr,    METH_VARARGS, getattr_doc},
   2633     BUILTIN_GLOBALS_METHODDEF
   2634     BUILTIN_HASATTR_METHODDEF
   2635     BUILTIN_HASH_METHODDEF
   2636     BUILTIN_HEX_METHODDEF
   2637     BUILTIN_ID_METHODDEF
   2638     BUILTIN_INPUT_METHODDEF
   2639     BUILTIN_ISINSTANCE_METHODDEF
   2640     BUILTIN_ISSUBCLASS_METHODDEF
   2641     {"iter",            builtin_iter,       METH_VARARGS, iter_doc},
   2642     BUILTIN_LEN_METHODDEF
   2643     BUILTIN_LOCALS_METHODDEF
   2644     {"max",             (PyCFunction)builtin_max,        METH_VARARGS | METH_KEYWORDS, max_doc},
   2645     {"min",             (PyCFunction)builtin_min,        METH_VARARGS | METH_KEYWORDS, min_doc},
   2646     {"next",            (PyCFunction)builtin_next,       METH_VARARGS, next_doc},
   2647     BUILTIN_OCT_METHODDEF
   2648     BUILTIN_ORD_METHODDEF
   2649     BUILTIN_POW_METHODDEF
   2650     {"print",           (PyCFunction)builtin_print,      METH_VARARGS | METH_KEYWORDS, print_doc},
   2651     BUILTIN_REPR_METHODDEF
   2652     {"round",           (PyCFunction)builtin_round,      METH_VARARGS | METH_KEYWORDS, round_doc},
   2653     BUILTIN_SETATTR_METHODDEF
   2654     BUILTIN_SORTED_METHODDEF
   2655     BUILTIN_SUM_METHODDEF
   2656     {"vars",            builtin_vars,       METH_VARARGS, vars_doc},
   2657     {NULL,              NULL},
   2658 };
   2659 
   2660 PyDoc_STRVAR(builtin_doc,
   2661 "Built-in functions, exceptions, and other objects.\n\
   2662 \n\
   2663 Noteworthy: None is the `nil' object; Ellipsis represents `...' in slices.");
   2664 
   2665 static struct PyModuleDef builtinsmodule = {
   2666     PyModuleDef_HEAD_INIT,
   2667     "builtins",
   2668     builtin_doc,
   2669     -1, /* multiple "initialization" just copies the module dict. */
   2670     builtin_methods,
   2671     NULL,
   2672     NULL,
   2673     NULL,
   2674     NULL
   2675 };
   2676 
   2677 
   2678 PyObject *
   2679 _PyBuiltin_Init(void)
   2680 {
   2681     PyObject *mod, *dict, *debug;
   2682 
   2683     if (PyType_Ready(&PyFilter_Type) < 0 ||
   2684         PyType_Ready(&PyMap_Type) < 0 ||
   2685         PyType_Ready(&PyZip_Type) < 0)
   2686         return NULL;
   2687 
   2688     mod = PyModule_Create(&builtinsmodule);
   2689     if (mod == NULL)
   2690         return NULL;
   2691     dict = PyModule_GetDict(mod);
   2692 
   2693 #ifdef Py_TRACE_REFS
   2694     /* "builtins" exposes a number of statically allocated objects
   2695      * that, before this code was added in 2.3, never showed up in
   2696      * the list of "all objects" maintained by Py_TRACE_REFS.  As a
   2697      * result, programs leaking references to None and False (etc)
   2698      * couldn't be diagnosed by examining sys.getobjects(0).
   2699      */
   2700 #define ADD_TO_ALL(OBJECT) _Py_AddToAllObjects((PyObject *)(OBJECT), 0)
   2701 #else
   2702 #define ADD_TO_ALL(OBJECT) (void)0
   2703 #endif
   2704 
   2705 #define SETBUILTIN(NAME, OBJECT) \
   2706     if (PyDict_SetItemString(dict, NAME, (PyObject *)OBJECT) < 0)       \
   2707         return NULL;                                                    \
   2708     ADD_TO_ALL(OBJECT)
   2709 
   2710     SETBUILTIN("None",                  Py_None);
   2711     SETBUILTIN("Ellipsis",              Py_Ellipsis);
   2712     SETBUILTIN("NotImplemented",        Py_NotImplemented);
   2713     SETBUILTIN("False",                 Py_False);
   2714     SETBUILTIN("True",                  Py_True);
   2715     SETBUILTIN("bool",                  &PyBool_Type);
   2716     SETBUILTIN("memoryview",        &PyMemoryView_Type);
   2717     SETBUILTIN("bytearray",             &PyByteArray_Type);
   2718     SETBUILTIN("bytes",                 &PyBytes_Type);
   2719     SETBUILTIN("classmethod",           &PyClassMethod_Type);
   2720     SETBUILTIN("complex",               &PyComplex_Type);
   2721     SETBUILTIN("dict",                  &PyDict_Type);
   2722     SETBUILTIN("enumerate",             &PyEnum_Type);
   2723     SETBUILTIN("filter",                &PyFilter_Type);
   2724     SETBUILTIN("float",                 &PyFloat_Type);
   2725     SETBUILTIN("frozenset",             &PyFrozenSet_Type);
   2726     SETBUILTIN("property",              &PyProperty_Type);
   2727     SETBUILTIN("int",                   &PyLong_Type);
   2728     SETBUILTIN("list",                  &PyList_Type);
   2729     SETBUILTIN("map",                   &PyMap_Type);
   2730     SETBUILTIN("object",                &PyBaseObject_Type);
   2731     SETBUILTIN("range",                 &PyRange_Type);
   2732     SETBUILTIN("reversed",              &PyReversed_Type);
   2733     SETBUILTIN("set",                   &PySet_Type);
   2734     SETBUILTIN("slice",                 &PySlice_Type);
   2735     SETBUILTIN("staticmethod",          &PyStaticMethod_Type);
   2736     SETBUILTIN("str",                   &PyUnicode_Type);
   2737     SETBUILTIN("super",                 &PySuper_Type);
   2738     SETBUILTIN("tuple",                 &PyTuple_Type);
   2739     SETBUILTIN("type",                  &PyType_Type);
   2740     SETBUILTIN("zip",                   &PyZip_Type);
   2741     debug = PyBool_FromLong(Py_OptimizeFlag == 0);
   2742     if (PyDict_SetItemString(dict, "__debug__", debug) < 0) {
   2743         Py_DECREF(debug);
   2744         return NULL;
   2745     }
   2746     Py_DECREF(debug);
   2747 
   2748     return mod;
   2749 #undef ADD_TO_ALL
   2750 #undef SETBUILTIN
   2751 }
   2752