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