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