Coverage Report

Created: 2026-04-20 06:11

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/cpython/Objects/funcobject.c
Line
Count
Source
1
/* Function object implementation */
2
3
#include "Python.h"
4
#include "pycore_code.h"          // _PyCode_VerifyStateless()
5
#include "pycore_dict.h"          // _Py_INCREF_DICT()
6
#include "pycore_function.h"      // _PyFunction_Vectorcall
7
#include "pycore_long.h"          // _PyLong_GetOne()
8
#include "pycore_modsupport.h"    // _PyArg_NoKeywords()
9
#include "pycore_object.h"        // _PyObject_GC_UNTRACK()
10
#include "pycore_object_deferred.h" // _PyObject_SetDeferredRefcount()
11
#include "pycore_optimizer.h"       // _Py_Executors_InvalidateDependency()
12
#include "pycore_pyerrors.h"      // _PyErr_Occurred()
13
#include "pycore_setobject.h"     // _PySet_NextEntry()
14
#include "pycore_stats.h"
15
#include "pycore_weakref.h"       // FT_CLEAR_WEAKREFS()
16
17
static const char *
18
0
func_event_name(PyFunction_WatchEvent event) {
19
0
    switch (event) {
20
0
        #define CASE(op)                \
21
0
        case PyFunction_EVENT_##op:         \
22
0
            return "PyFunction_EVENT_" #op;
23
0
        PY_FOREACH_FUNC_EVENT(CASE)
24
0
        #undef CASE
25
0
    }
26
0
    Py_UNREACHABLE();
27
0
}
28
29
static void
30
notify_func_watchers(PyInterpreterState *interp, PyFunction_WatchEvent event,
31
                     PyFunctionObject *func, PyObject *new_value)
32
0
{
33
0
    uint8_t bits = interp->active_func_watchers;
34
0
    int i = 0;
35
0
    while (bits) {
36
0
        assert(i < FUNC_MAX_WATCHERS);
37
0
        if (bits & 1) {
38
0
            PyFunction_WatchCallback cb = interp->func_watchers[i];
39
            // callback must be non-null if the watcher bit is set
40
0
            assert(cb != NULL);
41
0
            if (cb(event, func, new_value) < 0) {
42
0
                PyErr_FormatUnraisable(
43
0
                    "Exception ignored in %s watcher callback for function %U at %p",
44
0
                    func_event_name(event), func->func_qualname, func);
45
0
            }
46
0
        }
47
0
        i++;
48
0
        bits >>= 1;
49
0
    }
50
0
}
51
52
static inline void
53
handle_func_event(PyFunction_WatchEvent event, PyFunctionObject *func,
54
                  PyObject *new_value)
55
36.5M
{
56
36.5M
    assert(Py_REFCNT(func) > 0);
57
36.5M
    PyInterpreterState *interp = _PyInterpreterState_GET();
58
36.5M
    assert(interp->_initialized);
59
36.5M
    if (interp->active_func_watchers) {
60
0
        notify_func_watchers(interp, event, func, new_value);
61
0
    }
62
36.5M
    switch (event) {
63
7.36k
        case PyFunction_EVENT_MODIFY_CODE:
64
14.7k
        case PyFunction_EVENT_MODIFY_DEFAULTS:
65
14.9k
        case PyFunction_EVENT_MODIFY_KWDEFAULTS:
66
25.3k
        case PyFunction_EVENT_MODIFY_QUALNAME:
67
#if _Py_TIER2
68
            // Note: we only invalidate JIT code if a function version changes.
69
            // Not when the function is deallocated.
70
            // Function deallocation occurs frequently (think: lambdas),
71
            // so we want to minimize dependency invalidation there.
72
            _Py_Executors_InvalidateDependency(interp, func, 1);
73
#endif
74
25.3k
            RARE_EVENT_INTERP_INC(interp, func_modification);
75
25.3k
            break;
76
36.5M
        default:
77
36.5M
            break;
78
36.5M
    }
79
36.5M
}
80
81
int
82
PyFunction_AddWatcher(PyFunction_WatchCallback callback)
83
0
{
84
0
    PyInterpreterState *interp = _PyInterpreterState_GET();
85
0
    assert(interp->_initialized);
86
0
    for (int i = 0; i < FUNC_MAX_WATCHERS; i++) {
87
0
        if (interp->func_watchers[i] == NULL) {
88
0
            interp->func_watchers[i] = callback;
89
0
            interp->active_func_watchers |= (1 << i);
90
0
            return i;
91
0
        }
92
0
    }
93
0
    PyErr_SetString(PyExc_RuntimeError, "no more func watcher IDs available");
94
0
    return -1;
95
0
}
96
97
int
98
PyFunction_ClearWatcher(int watcher_id)
99
0
{
100
0
    PyInterpreterState *interp = _PyInterpreterState_GET();
101
0
    if (watcher_id < 0 || watcher_id >= FUNC_MAX_WATCHERS) {
102
0
        PyErr_Format(PyExc_ValueError, "invalid func watcher ID %d",
103
0
                     watcher_id);
104
0
        return -1;
105
0
    }
106
0
    if (!interp->func_watchers[watcher_id]) {
107
0
        PyErr_Format(PyExc_ValueError, "no func watcher set for ID %d",
108
0
                     watcher_id);
109
0
        return -1;
110
0
    }
111
0
    interp->func_watchers[watcher_id] = NULL;
112
0
    interp->active_func_watchers &= ~(1 << watcher_id);
113
0
    return 0;
114
0
}
115
PyFunctionObject *
116
_PyFunction_FromConstructor(PyFrameConstructor *constr)
117
7.52k
{
118
7.52k
    PyObject *module;
119
7.52k
    if (PyDict_GetItemRef(constr->fc_globals, &_Py_ID(__name__), &module) < 0) {
120
0
        return NULL;
121
0
    }
122
123
7.52k
    PyFunctionObject *op = PyObject_GC_New(PyFunctionObject, &PyFunction_Type);
124
7.52k
    if (op == NULL) {
125
0
        Py_XDECREF(module);
126
0
        return NULL;
127
0
    }
128
7.52k
    _Py_INCREF_DICT(constr->fc_globals);
129
7.52k
    op->func_globals = constr->fc_globals;
130
7.52k
    _Py_INCREF_BUILTINS(constr->fc_builtins);
131
7.52k
    op->func_builtins = constr->fc_builtins;
132
7.52k
    op->func_name = Py_NewRef(constr->fc_name);
133
7.52k
    op->func_qualname = Py_NewRef(constr->fc_qualname);
134
7.52k
    _Py_INCREF_CODE((PyCodeObject *)constr->fc_code);
135
7.52k
    op->func_code = constr->fc_code;
136
7.52k
    op->func_defaults = Py_XNewRef(constr->fc_defaults);
137
7.52k
    op->func_kwdefaults = Py_XNewRef(constr->fc_kwdefaults);
138
7.52k
    op->func_closure = Py_XNewRef(constr->fc_closure);
139
7.52k
    op->func_doc = Py_NewRef(Py_None);
140
7.52k
    op->func_dict = NULL;
141
7.52k
    op->func_weakreflist = NULL;
142
7.52k
    op->func_module = module;
143
7.52k
    op->func_annotations = NULL;
144
7.52k
    op->func_annotate = NULL;
145
7.52k
    op->func_typeparams = NULL;
146
7.52k
    op->vectorcall = _PyFunction_Vectorcall;
147
7.52k
    op->func_version = FUNC_VERSION_UNSET;
148
    // NOTE: functions created via FrameConstructor do not use deferred
149
    // reference counting because they are typically not part of cycles
150
    // nor accessed by multiple threads.
151
7.52k
    _PyObject_GC_TRACK(op);
152
7.52k
    handle_func_event(PyFunction_EVENT_CREATE, op, NULL);
153
7.52k
    return op;
154
7.52k
}
155
156
PyObject *
157
PyFunction_NewWithQualName(PyObject *code, PyObject *globals, PyObject *qualname)
158
18.3M
{
159
18.3M
    assert(globals != NULL);
160
18.3M
    assert(PyAnyDict_Check(globals));
161
18.3M
    _Py_INCREF_DICT(globals);
162
163
18.3M
    PyCodeObject *code_obj = (PyCodeObject *)code;
164
18.3M
    _Py_INCREF_CODE(code_obj);
165
166
18.3M
    assert(code_obj->co_name != NULL);
167
18.3M
    PyObject *name = Py_NewRef(code_obj->co_name);
168
169
18.3M
    if (!qualname) {
170
18.3M
        qualname = code_obj->co_qualname;
171
18.3M
    }
172
18.3M
    assert(qualname != NULL);
173
18.3M
    Py_INCREF(qualname);
174
175
18.3M
    PyObject *consts = code_obj->co_consts;
176
18.3M
    assert(PyTuple_Check(consts));
177
18.3M
    PyObject *doc;
178
18.3M
    if (code_obj->co_flags & CO_HAS_DOCSTRING) {
179
55.7k
        assert(PyTuple_Size(consts) >= 1);
180
55.7k
        doc = PyTuple_GetItem(consts, 0);
181
55.7k
        if (!PyUnicode_Check(doc)) {
182
0
            doc = Py_None;
183
0
        }
184
55.7k
    }
185
18.2M
    else {
186
18.2M
        doc = Py_None;
187
18.2M
    }
188
18.3M
    Py_INCREF(doc);
189
190
    // __module__: Use globals['__name__'] if it exists, or NULL.
191
18.3M
    PyObject *module;
192
18.3M
    PyObject *builtins = NULL;
193
18.3M
    if (PyDict_GetItemRef(globals, &_Py_ID(__name__), &module) < 0) {
194
0
        goto error;
195
0
    }
196
197
18.3M
    builtins = _PyDict_LoadBuiltinsFromGlobals(globals);
198
18.3M
    if (builtins == NULL) {
199
0
        goto error;
200
0
    }
201
202
18.3M
    PyFunctionObject *op = PyObject_GC_New(PyFunctionObject, &PyFunction_Type);
203
18.3M
    if (op == NULL) {
204
0
        goto error;
205
0
    }
206
    /* Note: No failures from this point on, since func_dealloc() does not
207
       expect a partially-created object. */
208
209
18.3M
    op->func_globals = globals;
210
18.3M
    op->func_builtins = builtins;
211
18.3M
    op->func_name = name;
212
18.3M
    op->func_qualname = qualname;
213
18.3M
    op->func_code = (PyObject*)code_obj;
214
18.3M
    op->func_defaults = NULL;    // No default positional arguments
215
18.3M
    op->func_kwdefaults = NULL;  // No default keyword arguments
216
18.3M
    op->func_closure = NULL;
217
18.3M
    op->func_doc = doc;
218
18.3M
    op->func_dict = NULL;
219
18.3M
    op->func_weakreflist = NULL;
220
18.3M
    op->func_module = module;
221
18.3M
    op->func_annotations = NULL;
222
18.3M
    op->func_annotate = NULL;
223
18.3M
    op->func_typeparams = NULL;
224
18.3M
    op->vectorcall = _PyFunction_Vectorcall;
225
18.3M
    op->func_version = FUNC_VERSION_UNSET;
226
18.3M
    if (((code_obj->co_flags & CO_NESTED) == 0) ||
227
18.2M
        (code_obj->co_flags & CO_METHOD)) {
228
        // Use deferred reference counting for top-level functions, but not
229
        // nested functions because they are more likely to capture variables,
230
        // which makes prompt deallocation more important.
231
        //
232
        // Nested methods (functions defined in class scope) are also deferred,
233
        // since they will likely be cleaned up by GC anyway.
234
94.2k
        _PyObject_SetDeferredRefcount((PyObject *)op);
235
94.2k
    }
236
18.3M
    _PyObject_GC_TRACK(op);
237
18.3M
    handle_func_event(PyFunction_EVENT_CREATE, op, NULL);
238
18.3M
    return (PyObject *)op;
239
240
0
error:
241
0
    Py_DECREF(globals);
242
0
    Py_DECREF(code_obj);
243
0
    Py_DECREF(name);
244
0
    Py_DECREF(qualname);
245
0
    Py_DECREF(doc);
246
0
    Py_XDECREF(module);
247
0
    Py_XDECREF(builtins);
248
0
    return NULL;
249
18.3M
}
250
251
/*
252
(This is purely internal documentation. There are no public APIs here.)
253
254
Function (and code) versions
255
----------------------------
256
257
The Tier 1 specializer generates CALL variants that can be invalidated
258
by changes to critical function attributes:
259
260
- __code__
261
- __defaults__
262
- __kwdefaults__
263
- __closure__
264
265
For this purpose function objects have a 32-bit func_version member
266
that the specializer writes to the specialized instruction's inline
267
cache and which is checked by a guard on the specialized instructions.
268
269
The MAKE_FUNCTION bytecode sets func_version from the code object's
270
co_version field.  The latter is initialized from a counter in the
271
interpreter state (interp->func_state.next_version) and never changes.
272
When this counter overflows, it remains zero and the specializer loses
273
the ability to specialize calls to new functions.
274
275
The func_version is reset to zero when any of the critical attributes
276
is modified; after this point the specializer will no longer specialize
277
calls to this function, and the guard will always fail.
278
279
The function and code version cache
280
-----------------------------------
281
282
The Tier 2 optimizer now has a problem, since it needs to find the
283
function and code objects given only the version number from the inline
284
cache.  Our solution is to maintain a cache mapping version numbers to
285
function and code objects.  To limit the cache size we could hash
286
the version number, but for now we simply use it modulo the table size.
287
288
There are some corner cases (e.g. generator expressions) where we will
289
be unable to find the function object in the cache but we can still
290
find the code object.  For this reason the cache stores both the
291
function object and the code object.
292
293
The cache doesn't contain strong references; cache entries are
294
invalidated whenever the function or code object is deallocated.
295
296
Invariants
297
----------
298
299
These should hold at any time except when one of the cache-mutating
300
functions is running.
301
302
- For any slot s at index i:
303
    - s->func == NULL or s->func->func_version % FUNC_VERSION_CACHE_SIZE == i
304
    - s->code == NULL or s->code->co_version % FUNC_VERSION_CACHE_SIZE == i
305
    if s->func != NULL, then s->func->func_code == s->code
306
307
*/
308
309
#ifndef Py_GIL_DISABLED
310
static inline struct _func_version_cache_item *
311
get_cache_item(PyInterpreterState *interp, uint32_t version)
312
36.6M
{
313
36.6M
    return interp->func_state.func_version_cache +
314
36.6M
           (version % FUNC_VERSION_CACHE_SIZE);
315
36.6M
}
316
#endif
317
318
void
319
_PyFunction_SetVersion(PyFunctionObject *func, uint32_t version)
320
18.3M
{
321
18.3M
    assert(func->func_version == FUNC_VERSION_UNSET);
322
18.3M
    assert(version >= FUNC_VERSION_FIRST_VALID);
323
    // This should only be called from MAKE_FUNCTION. No code is specialized
324
    // based on the version, so we do not need to stop the world to set it.
325
18.3M
    func->func_version = version;
326
18.3M
#ifndef Py_GIL_DISABLED
327
18.3M
    PyInterpreterState *interp = _PyInterpreterState_GET();
328
18.3M
    struct _func_version_cache_item *slot = get_cache_item(interp, version);
329
18.3M
    slot->func = func;
330
18.3M
    slot->code = func->func_code;
331
18.3M
#endif
332
18.3M
}
333
334
static void
335
func_clear_version(PyInterpreterState *interp, PyFunctionObject *func)
336
18.2M
{
337
18.2M
    if (func->func_version < FUNC_VERSION_FIRST_VALID) {
338
        // Version was never set or has already been cleared.
339
64.5k
        return;
340
64.5k
    }
341
18.2M
#ifndef Py_GIL_DISABLED
342
18.2M
    struct _func_version_cache_item *slot =
343
18.2M
        get_cache_item(interp, func->func_version);
344
18.2M
    if (slot->func == func) {
345
11.5M
        slot->func = NULL;
346
        // Leave slot->code alone, there may be use for it.
347
11.5M
    }
348
18.2M
#endif
349
18.2M
    func->func_version = FUNC_VERSION_CLEARED;
350
18.2M
}
351
352
// Called when any of the critical function attributes are changed
353
static void
354
_PyFunction_ClearVersion(PyFunctionObject *func)
355
14.9k
{
356
14.9k
    if (func->func_version < FUNC_VERSION_FIRST_VALID) {
357
        // Version was never set or has already been cleared.
358
7.51k
        return;
359
7.51k
    }
360
7.40k
    PyInterpreterState *interp = _PyInterpreterState_GET();
361
7.40k
    _PyEval_StopTheWorld(interp);
362
7.40k
    func_clear_version(interp, func);
363
7.40k
    _PyEval_StartTheWorld(interp);
364
7.40k
}
365
366
void
367
_PyFunction_ClearCodeByVersion(uint32_t version)
368
95.2k
{
369
95.2k
#ifndef Py_GIL_DISABLED
370
95.2k
    PyInterpreterState *interp = _PyInterpreterState_GET();
371
95.2k
    struct _func_version_cache_item *slot = get_cache_item(interp, version);
372
95.2k
    if (slot->code) {
373
77.7k
        assert(PyCode_Check(slot->code));
374
77.7k
        PyCodeObject *code = (PyCodeObject *)slot->code;
375
77.7k
        if (code->co_version == version) {
376
14.2k
            slot->code = NULL;
377
14.2k
            slot->func = NULL;
378
14.2k
        }
379
77.7k
    }
380
95.2k
#endif
381
95.2k
}
382
383
uint32_t
384
_PyFunction_GetVersionForCurrentState(PyFunctionObject *func)
385
249k
{
386
249k
    return func->func_version;
387
249k
}
388
389
PyObject *
390
PyFunction_New(PyObject *code, PyObject *globals)
391
18.3M
{
392
18.3M
    return PyFunction_NewWithQualName(code, globals, NULL);
393
18.3M
}
394
395
PyObject *
396
PyFunction_GetCode(PyObject *op)
397
0
{
398
0
    if (!PyFunction_Check(op)) {
399
0
        PyErr_BadInternalCall();
400
0
        return NULL;
401
0
    }
402
0
    return ((PyFunctionObject *) op) -> func_code;
403
0
}
404
405
PyObject *
406
PyFunction_GetGlobals(PyObject *op)
407
0
{
408
0
    if (!PyFunction_Check(op)) {
409
0
        PyErr_BadInternalCall();
410
0
        return NULL;
411
0
    }
412
0
    return ((PyFunctionObject *) op) -> func_globals;
413
0
}
414
415
PyObject *
416
PyFunction_GetModule(PyObject *op)
417
391
{
418
391
    if (!PyFunction_Check(op)) {
419
0
        PyErr_BadInternalCall();
420
0
        return NULL;
421
0
    }
422
391
    return ((PyFunctionObject *) op) -> func_module;
423
391
}
424
425
PyObject *
426
PyFunction_GetDefaults(PyObject *op)
427
0
{
428
0
    if (!PyFunction_Check(op)) {
429
0
        PyErr_BadInternalCall();
430
0
        return NULL;
431
0
    }
432
0
    return ((PyFunctionObject *) op) -> func_defaults;
433
0
}
434
435
int
436
PyFunction_SetDefaults(PyObject *op, PyObject *defaults)
437
0
{
438
0
    if (!PyFunction_Check(op)) {
439
0
        PyErr_BadInternalCall();
440
0
        return -1;
441
0
    }
442
0
    if (defaults == Py_None)
443
0
        defaults = NULL;
444
0
    else if (defaults && PyTuple_Check(defaults)) {
445
0
        Py_INCREF(defaults);
446
0
    }
447
0
    else {
448
0
        PyErr_SetString(PyExc_SystemError, "non-tuple default args");
449
0
        return -1;
450
0
    }
451
0
    handle_func_event(PyFunction_EVENT_MODIFY_DEFAULTS,
452
0
                      (PyFunctionObject *) op, defaults);
453
0
    _PyFunction_ClearVersion((PyFunctionObject *)op);
454
0
    Py_XSETREF(((PyFunctionObject *)op)->func_defaults, defaults);
455
0
    return 0;
456
0
}
457
458
void
459
PyFunction_SetVectorcall(PyFunctionObject *func, vectorcallfunc vectorcall)
460
0
{
461
0
    assert(func != NULL);
462
0
    _PyFunction_ClearVersion(func);
463
0
    func->vectorcall = vectorcall;
464
0
}
465
466
PyObject *
467
PyFunction_GetKwDefaults(PyObject *op)
468
0
{
469
0
    if (!PyFunction_Check(op)) {
470
0
        PyErr_BadInternalCall();
471
0
        return NULL;
472
0
    }
473
0
    return ((PyFunctionObject *) op) -> func_kwdefaults;
474
0
}
475
476
int
477
PyFunction_SetKwDefaults(PyObject *op, PyObject *defaults)
478
0
{
479
0
    if (!PyFunction_Check(op)) {
480
0
        PyErr_BadInternalCall();
481
0
        return -1;
482
0
    }
483
0
    if (defaults == Py_None)
484
0
        defaults = NULL;
485
0
    else if (defaults && PyDict_Check(defaults)) {
486
0
        Py_INCREF(defaults);
487
0
    }
488
0
    else {
489
0
        PyErr_SetString(PyExc_SystemError,
490
0
                        "non-dict keyword only default args");
491
0
        return -1;
492
0
    }
493
0
    handle_func_event(PyFunction_EVENT_MODIFY_KWDEFAULTS,
494
0
                      (PyFunctionObject *) op, defaults);
495
0
    _PyFunction_ClearVersion((PyFunctionObject *)op);
496
0
    Py_XSETREF(((PyFunctionObject *)op)->func_kwdefaults, defaults);
497
0
    return 0;
498
0
}
499
500
PyObject *
501
PyFunction_GetClosure(PyObject *op)
502
0
{
503
0
    if (!PyFunction_Check(op)) {
504
0
        PyErr_BadInternalCall();
505
0
        return NULL;
506
0
    }
507
0
    return ((PyFunctionObject *) op) -> func_closure;
508
0
}
509
510
int
511
PyFunction_SetClosure(PyObject *op, PyObject *closure)
512
0
{
513
0
    if (!PyFunction_Check(op)) {
514
0
        PyErr_BadInternalCall();
515
0
        return -1;
516
0
    }
517
0
    if (closure == Py_None)
518
0
        closure = NULL;
519
0
    else if (PyTuple_Check(closure)) {
520
0
        Py_INCREF(closure);
521
0
    }
522
0
    else {
523
0
        PyErr_Format(PyExc_SystemError,
524
0
                     "expected tuple for closure, got '%.100s'",
525
0
                     Py_TYPE(closure)->tp_name);
526
0
        return -1;
527
0
    }
528
0
    _PyFunction_ClearVersion((PyFunctionObject *)op);
529
0
    Py_XSETREF(((PyFunctionObject *)op)->func_closure, closure);
530
0
    return 0;
531
0
}
532
533
static PyObject *
534
func_get_annotation_dict(PyFunctionObject *op)
535
14.9k
{
536
14.9k
    if (op->func_annotations == NULL) {
537
358
        if (op->func_annotate == NULL || !PyCallable_Check(op->func_annotate)) {
538
0
            Py_RETURN_NONE;
539
0
        }
540
358
        PyObject *one = _PyLong_GetOne();
541
358
        PyObject *ann_dict = _PyObject_CallOneArg(op->func_annotate, one);
542
358
        if (ann_dict == NULL) {
543
42
            return NULL;
544
42
        }
545
316
        if (!PyDict_Check(ann_dict)) {
546
0
            PyErr_Format(PyExc_TypeError,
547
0
                         "__annotate__() must return a dict, not %T",
548
0
                         ann_dict);
549
0
            Py_DECREF(ann_dict);
550
0
            return NULL;
551
0
        }
552
316
        Py_XSETREF(op->func_annotations, ann_dict);
553
316
        return ann_dict;
554
316
    }
555
14.5k
    if (PyTuple_CheckExact(op->func_annotations)) {
556
0
        PyObject *ann_tuple = op->func_annotations;
557
0
        PyObject *ann_dict = PyDict_New();
558
0
        if (ann_dict == NULL) {
559
0
            return NULL;
560
0
        }
561
562
0
        assert(PyTuple_GET_SIZE(ann_tuple) % 2 == 0);
563
564
0
        for (Py_ssize_t i = 0; i < PyTuple_GET_SIZE(ann_tuple); i += 2) {
565
0
            int err = PyDict_SetItem(ann_dict,
566
0
                                     PyTuple_GET_ITEM(ann_tuple, i),
567
0
                                     PyTuple_GET_ITEM(ann_tuple, i + 1));
568
569
0
            if (err < 0) {
570
0
                Py_DECREF(ann_dict);
571
0
                return NULL;
572
0
            }
573
0
        }
574
0
        Py_SETREF(op->func_annotations, ann_dict);
575
0
    }
576
14.5k
    assert(PyDict_Check(op->func_annotations));
577
14.5k
    return op->func_annotations;
578
14.5k
}
579
580
PyObject *
581
PyFunction_GetAnnotations(PyObject *op)
582
0
{
583
0
    if (!PyFunction_Check(op)) {
584
0
        PyErr_BadInternalCall();
585
0
        return NULL;
586
0
    }
587
0
    return func_get_annotation_dict((PyFunctionObject *)op);
588
0
}
589
590
int
591
PyFunction_SetAnnotations(PyObject *op, PyObject *annotations)
592
0
{
593
0
    if (!PyFunction_Check(op)) {
594
0
        PyErr_BadInternalCall();
595
0
        return -1;
596
0
    }
597
0
    if (annotations == Py_None)
598
0
        annotations = NULL;
599
0
    else if (annotations && PyDict_Check(annotations)) {
600
0
        Py_INCREF(annotations);
601
0
    }
602
0
    else {
603
0
        PyErr_SetString(PyExc_SystemError,
604
0
                        "non-dict annotations");
605
0
        return -1;
606
0
    }
607
0
    PyFunctionObject *func = (PyFunctionObject *)op;
608
0
    Py_XSETREF(func->func_annotations, annotations);
609
0
    Py_CLEAR(func->func_annotate);
610
0
    return 0;
611
0
}
612
613
/* Methods */
614
615
#define OFF(x) offsetof(PyFunctionObject, x)
616
617
static PyMemberDef func_memberlist[] = {
618
    {"__closure__",   _Py_T_OBJECT,     OFF(func_closure), Py_READONLY},
619
    {"__doc__",       _Py_T_OBJECT,     OFF(func_doc), 0},
620
    {"__globals__",   _Py_T_OBJECT,     OFF(func_globals), Py_READONLY},
621
    {"__module__",    _Py_T_OBJECT,     OFF(func_module), 0},
622
    {"__builtins__",  _Py_T_OBJECT,     OFF(func_builtins), Py_READONLY},
623
    {NULL}  /* Sentinel */
624
};
625
626
/*[clinic input]
627
class function "PyFunctionObject *" "&PyFunction_Type"
628
[clinic start generated code]*/
629
/*[clinic end generated code: output=da39a3ee5e6b4b0d input=70af9c90aa2e71b0]*/
630
631
#include "clinic/funcobject.c.h"
632
633
static PyObject *
634
func_get_code(PyObject *self, void *Py_UNUSED(ignored))
635
335k
{
636
335k
    PyFunctionObject *op = _PyFunction_CAST(self);
637
335k
    if (PySys_Audit("object.__getattr__", "Os", op, "__code__") < 0) {
638
0
        return NULL;
639
0
    }
640
641
335k
    return Py_NewRef(op->func_code);
642
335k
}
643
644
static int
645
func_set_code(PyObject *self, PyObject *value, void *Py_UNUSED(ignored))
646
7.36k
{
647
7.36k
    PyFunctionObject *op = _PyFunction_CAST(self);
648
649
    /* Not legal to del f.func_code or to set it to anything
650
     * other than a code object. */
651
7.36k
    if (value == NULL || !PyCode_Check(value)) {
652
0
        PyErr_SetString(PyExc_TypeError,
653
0
                        "__code__ must be set to a code object");
654
0
        return -1;
655
0
    }
656
657
7.36k
    if (PySys_Audit("object.__setattr__", "OsO",
658
7.36k
                    op, "__code__", value) < 0) {
659
0
        return -1;
660
0
    }
661
662
7.36k
    int nfree = ((PyCodeObject *)value)->co_nfreevars;
663
7.36k
    Py_ssize_t nclosure = (op->func_closure == NULL ? 0 :
664
7.36k
                                        PyTuple_GET_SIZE(op->func_closure));
665
7.36k
    if (nclosure != nfree) {
666
0
        PyErr_Format(PyExc_ValueError,
667
0
                     "%U() requires a code object with %zd free vars,"
668
0
                     " not %d",
669
0
                     op->func_name,
670
0
                     nclosure, nfree);
671
0
        return -1;
672
0
    }
673
674
7.36k
    PyObject *func_code = PyFunction_GET_CODE(op);
675
7.36k
    int old_flags = ((PyCodeObject *)func_code)->co_flags;
676
7.36k
    int new_flags = ((PyCodeObject *)value)->co_flags;
677
7.36k
    int mask = CO_GENERATOR | CO_COROUTINE | CO_ASYNC_GENERATOR;
678
7.36k
    if ((old_flags & mask) != (new_flags & mask)) {
679
0
        if (PyErr_Warn(PyExc_DeprecationWarning,
680
0
            "Assigning a code object of non-matching type is deprecated "
681
0
            "(e.g., from a generator to a plain function)") < 0)
682
0
        {
683
0
            return -1;
684
0
        }
685
0
    }
686
687
7.36k
    handle_func_event(PyFunction_EVENT_MODIFY_CODE, op, value);
688
7.36k
    _PyFunction_ClearVersion(op);
689
7.36k
    Py_XSETREF(op->func_code, Py_NewRef(value));
690
7.36k
    return 0;
691
7.36k
}
692
693
static PyObject *
694
func_get_name(PyObject *self, void *Py_UNUSED(ignored))
695
110k
{
696
110k
    PyFunctionObject *op = _PyFunction_CAST(self);
697
110k
    return Py_NewRef(op->func_name);
698
110k
}
699
700
static int
701
func_set_name(PyObject *self, PyObject *value, void *Py_UNUSED(ignored))
702
15.9k
{
703
15.9k
    PyFunctionObject *op = _PyFunction_CAST(self);
704
    /* Not legal to del f.func_name or to set it to anything
705
     * other than a string object. */
706
15.9k
    if (value == NULL || !PyUnicode_Check(value)) {
707
0
        PyErr_SetString(PyExc_TypeError,
708
0
                        "__name__ must be set to a string object");
709
0
        return -1;
710
0
    }
711
15.9k
    Py_XSETREF(op->func_name, Py_NewRef(value));
712
15.9k
    return 0;
713
15.9k
}
714
715
static PyObject *
716
func_get_qualname(PyObject *self, void *Py_UNUSED(ignored))
717
13.4k
{
718
13.4k
    PyFunctionObject *op = _PyFunction_CAST(self);
719
13.4k
    return Py_NewRef(op->func_qualname);
720
13.4k
}
721
722
static int
723
func_set_qualname(PyObject *self, PyObject *value, void *Py_UNUSED(ignored))
724
10.4k
{
725
10.4k
    PyFunctionObject *op = _PyFunction_CAST(self);
726
    /* Not legal to del f.__qualname__ or to set it to anything
727
     * other than a string object. */
728
10.4k
    if (value == NULL || !PyUnicode_Check(value)) {
729
0
        PyErr_SetString(PyExc_TypeError,
730
0
                        "__qualname__ must be set to a string object");
731
0
        return -1;
732
0
    }
733
10.4k
    handle_func_event(PyFunction_EVENT_MODIFY_QUALNAME, (PyFunctionObject *) op, value);
734
10.4k
    Py_XSETREF(op->func_qualname, Py_NewRef(value));
735
10.4k
    return 0;
736
10.4k
}
737
738
static PyObject *
739
func_get_defaults(PyObject *self, void *Py_UNUSED(ignored))
740
54.2k
{
741
54.2k
    PyFunctionObject *op = _PyFunction_CAST(self);
742
54.2k
    if (PySys_Audit("object.__getattr__", "Os", op, "__defaults__") < 0) {
743
0
        return NULL;
744
0
    }
745
54.2k
    if (op->func_defaults == NULL) {
746
54.1k
        Py_RETURN_NONE;
747
54.1k
    }
748
160
    return Py_NewRef(op->func_defaults);
749
54.2k
}
750
751
static int
752
func_set_defaults(PyObject *self, PyObject *value, void *Py_UNUSED(ignored))
753
7.40k
{
754
    /* Legal to del f.func_defaults.
755
     * Can only set func_defaults to NULL or a tuple. */
756
7.40k
    PyFunctionObject *op = _PyFunction_CAST(self);
757
7.40k
    if (value == Py_None)
758
0
        value = NULL;
759
7.40k
    if (value != NULL && !PyTuple_Check(value)) {
760
0
        PyErr_SetString(PyExc_TypeError,
761
0
                        "__defaults__ must be set to a tuple object");
762
0
        return -1;
763
0
    }
764
7.40k
    if (value) {
765
7.40k
        if (PySys_Audit("object.__setattr__", "OsO",
766
7.40k
                        op, "__defaults__", value) < 0) {
767
0
            return -1;
768
0
        }
769
7.40k
    } else if (PySys_Audit("object.__delattr__", "Os",
770
0
                           op, "__defaults__") < 0) {
771
0
        return -1;
772
0
    }
773
774
7.40k
    handle_func_event(PyFunction_EVENT_MODIFY_DEFAULTS, op, value);
775
7.40k
    _PyFunction_ClearVersion(op);
776
7.40k
    Py_XSETREF(op->func_defaults, Py_XNewRef(value));
777
7.40k
    return 0;
778
7.40k
}
779
780
static PyObject *
781
func_get_kwdefaults(PyObject *self, void *Py_UNUSED(ignored))
782
54.2k
{
783
54.2k
    PyFunctionObject *op = _PyFunction_CAST(self);
784
54.2k
    if (PySys_Audit("object.__getattr__", "Os",
785
54.2k
                    op, "__kwdefaults__") < 0) {
786
0
        return NULL;
787
0
    }
788
54.2k
    if (op->func_kwdefaults == NULL) {
789
54.0k
        Py_RETURN_NONE;
790
54.0k
    }
791
202
    return Py_NewRef(op->func_kwdefaults);
792
54.2k
}
793
794
static int
795
func_set_kwdefaults(PyObject *self, PyObject *value, void *Py_UNUSED(ignored))
796
152
{
797
152
    PyFunctionObject *op = _PyFunction_CAST(self);
798
152
    if (value == Py_None)
799
0
        value = NULL;
800
    /* Legal to del f.func_kwdefaults.
801
     * Can only set func_kwdefaults to NULL or a dict. */
802
152
    if (value != NULL && !PyDict_Check(value)) {
803
0
        PyErr_SetString(PyExc_TypeError,
804
0
            "__kwdefaults__ must be set to a dict object");
805
0
        return -1;
806
0
    }
807
152
    if (value) {
808
152
        if (PySys_Audit("object.__setattr__", "OsO",
809
152
                        op, "__kwdefaults__", value) < 0) {
810
0
            return -1;
811
0
        }
812
152
    } else if (PySys_Audit("object.__delattr__", "Os",
813
0
                           op, "__kwdefaults__") < 0) {
814
0
        return -1;
815
0
    }
816
817
152
    handle_func_event(PyFunction_EVENT_MODIFY_KWDEFAULTS, op, value);
818
152
    _PyFunction_ClearVersion(op);
819
152
    Py_XSETREF(op->func_kwdefaults, Py_XNewRef(value));
820
152
    return 0;
821
152
}
822
823
/*[clinic input]
824
@critical_section
825
@getter
826
function.__annotate__
827
828
Get the code object for a function.
829
[clinic start generated code]*/
830
831
static PyObject *
832
function___annotate___get_impl(PyFunctionObject *self)
833
/*[clinic end generated code: output=5ec7219ff2bda9e6 input=7f3db11e3c3329f3]*/
834
8.28k
{
835
8.28k
    if (self->func_annotate == NULL) {
836
702
        Py_RETURN_NONE;
837
702
    }
838
7.58k
    return Py_NewRef(self->func_annotate);
839
8.28k
}
840
841
/*[clinic input]
842
@critical_section
843
@setter
844
function.__annotate__
845
[clinic start generated code]*/
846
847
static int
848
function___annotate___set_impl(PyFunctionObject *self, PyObject *value)
849
/*[clinic end generated code: output=05b7dfc07ada66cd input=eb6225e358d97448]*/
850
8.03k
{
851
8.03k
    if (value == NULL) {
852
0
        PyErr_SetString(PyExc_TypeError,
853
0
            "__annotate__ cannot be deleted");
854
0
        return -1;
855
0
    }
856
8.03k
    if (Py_IsNone(value)) {
857
483
        Py_XSETREF(self->func_annotate, value);
858
483
        return 0;
859
483
    }
860
7.54k
    else if (PyCallable_Check(value)) {
861
7.54k
        Py_XSETREF(self->func_annotate, Py_XNewRef(value));
862
7.54k
        Py_CLEAR(self->func_annotations);
863
7.54k
        return 0;
864
7.54k
    }
865
0
    else {
866
0
        PyErr_SetString(PyExc_TypeError,
867
0
            "__annotate__ must be callable or None");
868
0
        return -1;
869
0
    }
870
8.03k
}
871
872
/*[clinic input]
873
@critical_section
874
@getter
875
function.__annotations__
876
877
Dict of annotations in a function object.
878
[clinic start generated code]*/
879
880
static PyObject *
881
function___annotations___get_impl(PyFunctionObject *self)
882
/*[clinic end generated code: output=a4cf4c884c934cbb input=92643d7186c1ad0c]*/
883
14.9k
{
884
14.9k
    PyObject *d = NULL;
885
14.9k
    if (self->func_annotations == NULL &&
886
7.74k
        (self->func_annotate == NULL || !PyCallable_Check(self->func_annotate))) {
887
7.39k
        self->func_annotations = PyDict_New();
888
7.39k
        if (self->func_annotations == NULL)
889
0
            return NULL;
890
7.39k
    }
891
14.9k
    d = func_get_annotation_dict(self);
892
14.9k
    return Py_XNewRef(d);
893
14.9k
}
894
895
/*[clinic input]
896
@critical_section
897
@setter
898
function.__annotations__
899
[clinic start generated code]*/
900
901
static int
902
function___annotations___set_impl(PyFunctionObject *self, PyObject *value)
903
/*[clinic end generated code: output=a61795d4a95eede4 input=5302641f686f0463]*/
904
7.37k
{
905
7.37k
    if (value == Py_None)
906
0
        value = NULL;
907
    /* Legal to del f.func_annotations.
908
     * Can only set func_annotations to NULL (through C api)
909
     * or a dict. */
910
7.37k
    if (value != NULL && !PyDict_Check(value)) {
911
0
        PyErr_SetString(PyExc_TypeError,
912
0
            "__annotations__ must be set to a dict object");
913
0
        return -1;
914
0
    }
915
7.37k
    Py_XSETREF(self->func_annotations, Py_XNewRef(value));
916
7.37k
    Py_CLEAR(self->func_annotate);
917
7.37k
    return 0;
918
7.37k
}
919
920
/*[clinic input]
921
@critical_section
922
@getter
923
function.__type_params__
924
925
Get the declared type parameters for a function.
926
[clinic start generated code]*/
927
928
static PyObject *
929
function___type_params___get_impl(PyFunctionObject *self)
930
/*[clinic end generated code: output=eb844d7ffca517a8 input=0864721484293724]*/
931
8.15k
{
932
8.15k
    if (self->func_typeparams == NULL) {
933
8.08k
        return PyTuple_New(0);
934
8.08k
    }
935
936
8.15k
    assert(PyTuple_Check(self->func_typeparams));
937
76
    return Py_NewRef(self->func_typeparams);
938
8.15k
}
939
940
/*[clinic input]
941
@critical_section
942
@setter
943
function.__type_params__
944
[clinic start generated code]*/
945
946
static int
947
function___type_params___set_impl(PyFunctionObject *self, PyObject *value)
948
/*[clinic end generated code: output=038b4cda220e56fb input=3862fbd4db2b70e8]*/
949
7.87k
{
950
    /* Not legal to del f.__type_params__ or to set it to anything
951
     * other than a tuple object. */
952
7.87k
    if (value == NULL || !PyTuple_Check(value)) {
953
0
        PyErr_SetString(PyExc_TypeError,
954
0
                        "__type_params__ must be set to a tuple");
955
0
        return -1;
956
0
    }
957
7.87k
    Py_XSETREF(self->func_typeparams, Py_NewRef(value));
958
7.87k
    return 0;
959
7.87k
}
960
961
PyObject *
962
_Py_set_function_type_params(PyThreadState *Py_UNUSED(ignored), PyObject *func,
963
                             PyObject *type_params)
964
24
{
965
24
    assert(PyFunction_Check(func));
966
24
    assert(PyTuple_Check(type_params));
967
24
    PyFunctionObject *f = (PyFunctionObject *)func;
968
24
    Py_XSETREF(f->func_typeparams, Py_NewRef(type_params));
969
24
    return Py_NewRef(func);
970
24
}
971
972
static PyGetSetDef func_getsetlist[] = {
973
    {"__code__", func_get_code, func_set_code},
974
    {"__defaults__", func_get_defaults, func_set_defaults},
975
    {"__kwdefaults__", func_get_kwdefaults, func_set_kwdefaults},
976
    FUNCTION___ANNOTATIONS___GETSETDEF
977
    FUNCTION___ANNOTATE___GETSETDEF
978
    {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict},
979
    {"__name__", func_get_name, func_set_name},
980
    {"__qualname__", func_get_qualname, func_set_qualname},
981
    FUNCTION___TYPE_PARAMS___GETSETDEF
982
    {NULL} /* Sentinel */
983
};
984
985
/* function.__new__() maintains the following invariants for closures.
986
   The closure must correspond to the free variables of the code object.
987
988
   if len(code.co_freevars) == 0:
989
       closure = NULL
990
   else:
991
       len(closure) == len(code.co_freevars)
992
   for every elt in closure, type(elt) == cell
993
*/
994
995
/*[clinic input]
996
@classmethod
997
function.__new__ as func_new
998
    code: object(type="PyCodeObject *", subclass_of="&PyCode_Type")
999
        a code object
1000
    globals: object(subclass_of="&PyDict_Type")
1001
        the globals dictionary
1002
    name: object = None
1003
        a string that overrides the name from the code object
1004
    argdefs as defaults: object = None
1005
        a tuple that specifies the default argument values
1006
    closure: object = None
1007
        a tuple that supplies the bindings for free variables
1008
    kwdefaults: object = None
1009
        a dictionary that specifies the default keyword argument values
1010
1011
Create a function object.
1012
[clinic start generated code]*/
1013
1014
static PyObject *
1015
func_new_impl(PyTypeObject *type, PyCodeObject *code, PyObject *globals,
1016
              PyObject *name, PyObject *defaults, PyObject *closure,
1017
              PyObject *kwdefaults)
1018
/*[clinic end generated code: output=de72f4c22ac57144 input=20c9c9f04ad2d3f2]*/
1019
84
{
1020
84
    PyFunctionObject *newfunc;
1021
84
    Py_ssize_t nclosure;
1022
1023
84
    if (name != Py_None && !PyUnicode_Check(name)) {
1024
0
        PyErr_SetString(PyExc_TypeError,
1025
0
                        "arg 3 (name) must be None or string");
1026
0
        return NULL;
1027
0
    }
1028
84
    if (defaults != Py_None && !PyTuple_Check(defaults)) {
1029
0
        PyErr_SetString(PyExc_TypeError,
1030
0
                        "arg 4 (defaults) must be None or tuple");
1031
0
        return NULL;
1032
0
    }
1033
84
    if (!PyTuple_Check(closure)) {
1034
0
        if (code->co_nfreevars && closure == Py_None) {
1035
0
            PyErr_SetString(PyExc_TypeError,
1036
0
                            "arg 5 (closure) must be tuple");
1037
0
            return NULL;
1038
0
        }
1039
0
        else if (closure != Py_None) {
1040
0
            PyErr_SetString(PyExc_TypeError,
1041
0
                "arg 5 (closure) must be None or tuple");
1042
0
            return NULL;
1043
0
        }
1044
0
    }
1045
84
    if (kwdefaults != Py_None && !PyDict_Check(kwdefaults)) {
1046
0
        PyErr_SetString(PyExc_TypeError,
1047
0
                        "arg 6 (kwdefaults) must be None or dict");
1048
0
        return NULL;
1049
0
    }
1050
1051
    /* check that the closure is well-formed */
1052
84
    nclosure = closure == Py_None ? 0 : PyTuple_GET_SIZE(closure);
1053
84
    if (code->co_nfreevars != nclosure)
1054
0
        return PyErr_Format(PyExc_ValueError,
1055
0
                            "%U requires closure of length %d, not %zd",
1056
0
                            code->co_name, code->co_nfreevars, nclosure);
1057
84
    if (nclosure) {
1058
84
        Py_ssize_t i;
1059
168
        for (i = 0; i < nclosure; i++) {
1060
84
            PyObject *o = PyTuple_GET_ITEM(closure, i);
1061
84
            if (!PyCell_Check(o)) {
1062
0
                return PyErr_Format(PyExc_TypeError,
1063
0
                    "arg 5 (closure) expected cell, found %s",
1064
0
                                    Py_TYPE(o)->tp_name);
1065
0
            }
1066
84
        }
1067
84
    }
1068
84
    if (PySys_Audit("function.__new__", "O", code) < 0) {
1069
0
        return NULL;
1070
0
    }
1071
1072
84
    newfunc = (PyFunctionObject *)PyFunction_New((PyObject *)code,
1073
84
                                                 globals);
1074
84
    if (newfunc == NULL) {
1075
0
        return NULL;
1076
0
    }
1077
84
    if (name != Py_None) {
1078
0
        Py_SETREF(newfunc->func_name, Py_NewRef(name));
1079
0
    }
1080
84
    if (defaults != Py_None) {
1081
0
        newfunc->func_defaults = Py_NewRef(defaults);
1082
0
    }
1083
84
    if (closure != Py_None) {
1084
84
        newfunc->func_closure = Py_NewRef(closure);
1085
84
    }
1086
84
    if (kwdefaults != Py_None) {
1087
0
        newfunc->func_kwdefaults = Py_NewRef(kwdefaults);
1088
0
    }
1089
1090
84
    return (PyObject *)newfunc;
1091
84
}
1092
1093
static int
1094
func_clear(PyObject *self)
1095
18.2M
{
1096
18.2M
    PyFunctionObject *op = _PyFunction_CAST(self);
1097
18.2M
    func_clear_version(_PyInterpreterState_GET(), op);
1098
18.2M
    PyObject *globals = op->func_globals;
1099
18.2M
    op->func_globals = NULL;
1100
18.2M
    if (globals != NULL) {
1101
18.2M
        _Py_DECREF_DICT(globals);
1102
18.2M
    }
1103
18.2M
    PyObject *builtins = op->func_builtins;
1104
18.2M
    op->func_builtins = NULL;
1105
18.2M
    if (builtins != NULL) {
1106
18.2M
        _Py_DECREF_BUILTINS(builtins);
1107
18.2M
    }
1108
18.2M
    Py_CLEAR(op->func_module);
1109
18.2M
    Py_CLEAR(op->func_defaults);
1110
18.2M
    Py_CLEAR(op->func_kwdefaults);
1111
18.2M
    Py_CLEAR(op->func_doc);
1112
18.2M
    Py_CLEAR(op->func_dict);
1113
18.2M
    Py_CLEAR(op->func_closure);
1114
18.2M
    Py_CLEAR(op->func_annotations);
1115
18.2M
    Py_CLEAR(op->func_annotate);
1116
18.2M
    Py_CLEAR(op->func_typeparams);
1117
    // Don't Py_CLEAR(op->func_code), since code is always required
1118
    // to be non-NULL. Similarly, name and qualname shouldn't be NULL.
1119
    // However, name and qualname could be str subclasses, so they
1120
    // could have reference cycles. The solution is to replace them
1121
    // with a genuinely immutable string.
1122
18.2M
    Py_SETREF(op->func_name, &_Py_STR(empty));
1123
18.2M
    Py_SETREF(op->func_qualname, &_Py_STR(empty));
1124
18.2M
    return 0;
1125
18.2M
}
1126
1127
static void
1128
func_dealloc(PyObject *self)
1129
18.2M
{
1130
18.2M
    PyFunctionObject *op = _PyFunction_CAST(self);
1131
18.2M
    _PyObject_ResurrectStart(self);
1132
18.2M
    handle_func_event(PyFunction_EVENT_DESTROY, op, NULL);
1133
18.2M
    if (_PyObject_ResurrectEnd(self)) {
1134
0
        return;
1135
0
    }
1136
18.2M
    _PyObject_GC_UNTRACK(op);
1137
18.2M
    FT_CLEAR_WEAKREFS(self, op->func_weakreflist);
1138
18.2M
    (void)func_clear((PyObject*)op);
1139
    // These aren't cleared by func_clear().
1140
18.2M
    _Py_DECREF_CODE((PyCodeObject *)op->func_code);
1141
18.2M
    Py_DECREF(op->func_name);
1142
18.2M
    Py_DECREF(op->func_qualname);
1143
18.2M
    PyObject_GC_Del(op);
1144
18.2M
}
1145
1146
static PyObject*
1147
func_repr(PyObject *self)
1148
0
{
1149
0
    PyFunctionObject *op = _PyFunction_CAST(self);
1150
0
    return PyUnicode_FromFormat("<function %U at %p>",
1151
0
                                op->func_qualname, op);
1152
0
}
1153
1154
static int
1155
func_traverse(PyObject *self, visitproc visit, void *arg)
1156
6.08M
{
1157
6.08M
    PyFunctionObject *f = _PyFunction_CAST(self);
1158
6.08M
    Py_VISIT(f->func_code);
1159
6.08M
    Py_VISIT(f->func_globals);
1160
6.08M
    Py_VISIT(f->func_builtins);
1161
6.08M
    Py_VISIT(f->func_module);
1162
6.08M
    Py_VISIT(f->func_defaults);
1163
6.08M
    Py_VISIT(f->func_kwdefaults);
1164
6.08M
    Py_VISIT(f->func_doc);
1165
6.08M
    Py_VISIT(f->func_name);
1166
6.08M
    Py_VISIT(f->func_dict);
1167
6.08M
    Py_VISIT(f->func_closure);
1168
6.08M
    Py_VISIT(f->func_annotations);
1169
6.08M
    Py_VISIT(f->func_annotate);
1170
6.08M
    Py_VISIT(f->func_typeparams);
1171
6.08M
    Py_VISIT(f->func_qualname);
1172
6.08M
    return 0;
1173
6.08M
}
1174
1175
/* Bind a function to an object */
1176
static PyObject *
1177
func_descr_get(PyObject *func, PyObject *obj, PyObject *type)
1178
24.9M
{
1179
24.9M
    if (obj == Py_None || obj == NULL) {
1180
7.42k
        return Py_NewRef(func);
1181
7.42k
    }
1182
24.9M
    return PyMethod_New(func, obj);
1183
24.9M
}
1184
1185
PyTypeObject PyFunction_Type = {
1186
    PyVarObject_HEAD_INIT(&PyType_Type, 0)
1187
    "function",
1188
    sizeof(PyFunctionObject),
1189
    0,
1190
    func_dealloc,                               /* tp_dealloc */
1191
    offsetof(PyFunctionObject, vectorcall),     /* tp_vectorcall_offset */
1192
    0,                                          /* tp_getattr */
1193
    0,                                          /* tp_setattr */
1194
    0,                                          /* tp_as_async */
1195
    func_repr,                                  /* tp_repr */
1196
    0,                                          /* tp_as_number */
1197
    0,                                          /* tp_as_sequence */
1198
    0,                                          /* tp_as_mapping */
1199
    0,                                          /* tp_hash */
1200
    PyVectorcall_Call,                          /* tp_call */
1201
    0,                                          /* tp_str */
1202
    0,                                          /* tp_getattro */
1203
    0,                                          /* tp_setattro */
1204
    0,                                          /* tp_as_buffer */
1205
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC |
1206
    Py_TPFLAGS_HAVE_VECTORCALL |
1207
    Py_TPFLAGS_METHOD_DESCRIPTOR,               /* tp_flags */
1208
    func_new__doc__,                            /* tp_doc */
1209
    func_traverse,                              /* tp_traverse */
1210
    func_clear,                                 /* tp_clear */
1211
    0,                                          /* tp_richcompare */
1212
    offsetof(PyFunctionObject, func_weakreflist), /* tp_weaklistoffset */
1213
    0,                                          /* tp_iter */
1214
    0,                                          /* tp_iternext */
1215
    0,                                          /* tp_methods */
1216
    func_memberlist,                            /* tp_members */
1217
    func_getsetlist,                            /* tp_getset */
1218
    0,                                          /* tp_base */
1219
    0,                                          /* tp_dict */
1220
    func_descr_get,                             /* tp_descr_get */
1221
    0,                                          /* tp_descr_set */
1222
    offsetof(PyFunctionObject, func_dict),      /* tp_dictoffset */
1223
    0,                                          /* tp_init */
1224
    0,                                          /* tp_alloc */
1225
    func_new,                                   /* tp_new */
1226
};
1227
1228
1229
int
1230
_PyFunction_VerifyStateless(PyThreadState *tstate, PyObject *func)
1231
0
{
1232
0
    assert(!PyErr_Occurred());
1233
0
    assert(PyFunction_Check(func));
1234
1235
    // Check the globals.
1236
0
    PyObject *globalsns = PyFunction_GET_GLOBALS(func);
1237
0
    if (globalsns != NULL && !PyDict_Check(globalsns)) {
1238
0
        _PyErr_Format(tstate, PyExc_TypeError,
1239
0
                      "unsupported globals %R", globalsns);
1240
0
        return -1;
1241
0
    }
1242
    // Check the builtins.
1243
0
    PyObject *builtinsns = _PyFunction_GET_BUILTINS(func);
1244
0
    if (builtinsns != NULL && !PyDict_Check(builtinsns)) {
1245
0
        _PyErr_Format(tstate, PyExc_TypeError,
1246
0
                      "unsupported builtins %R", builtinsns);
1247
0
        return -1;
1248
0
    }
1249
    // Disallow __defaults__.
1250
0
    PyObject *defaults = PyFunction_GET_DEFAULTS(func);
1251
0
    if (defaults != NULL) {
1252
0
        assert(PyTuple_Check(defaults));  // per PyFunction_New()
1253
0
        if (PyTuple_GET_SIZE(defaults) > 0) {
1254
0
            _PyErr_SetString(tstate, PyExc_ValueError,
1255
0
                             "defaults not supported");
1256
0
            return -1;
1257
0
        }
1258
0
    }
1259
    // Disallow __kwdefaults__.
1260
0
    PyObject *kwdefaults = PyFunction_GET_KW_DEFAULTS(func);
1261
0
    if (kwdefaults != NULL) {
1262
0
        assert(PyDict_Check(kwdefaults));  // per PyFunction_New()
1263
0
        if (PyDict_Size(kwdefaults) > 0) {
1264
0
            _PyErr_SetString(tstate, PyExc_ValueError,
1265
0
                             "keyword defaults not supported");
1266
0
            return -1;
1267
0
        }
1268
0
    }
1269
    // Disallow __closure__.
1270
0
    PyObject *closure = PyFunction_GET_CLOSURE(func);
1271
0
    if (closure != NULL) {
1272
0
        assert(PyTuple_Check(closure));  // per PyFunction_New()
1273
0
        if (PyTuple_GET_SIZE(closure) > 0) {
1274
0
            _PyErr_SetString(tstate, PyExc_ValueError, "closures not supported");
1275
0
            return -1;
1276
0
        }
1277
0
    }
1278
    // Check the code.
1279
0
    PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
1280
0
    if (_PyCode_VerifyStateless(tstate, co, NULL, globalsns, builtinsns) < 0) {
1281
0
        return -1;
1282
0
    }
1283
0
    return 0;
1284
0
}
1285
1286
1287
static int
1288
functools_copy_attr(PyObject *wrapper, PyObject *wrapped, PyObject *name)
1289
20.3k
{
1290
20.3k
    PyObject *value;
1291
20.3k
    int res = PyObject_GetOptionalAttr(wrapped, name, &value);
1292
20.3k
    if (value != NULL) {
1293
20.3k
        res = PyObject_SetAttr(wrapper, name, value);
1294
20.3k
        Py_DECREF(value);
1295
20.3k
    }
1296
20.3k
    return res;
1297
20.3k
}
1298
1299
// Similar to functools.wraps(wrapper, wrapped)
1300
static int
1301
functools_wraps(PyObject *wrapper, PyObject *wrapped)
1302
5.08k
{
1303
5.08k
#define COPY_ATTR(ATTR) \
1304
20.3k
    do { \
1305
20.3k
        if (functools_copy_attr(wrapper, wrapped, &_Py_ID(ATTR)) < 0) { \
1306
0
            return -1; \
1307
0
        } \
1308
20.3k
    } while (0) \
1309
5.08k
1310
5.08k
    COPY_ATTR(__module__);
1311
5.08k
    COPY_ATTR(__name__);
1312
5.08k
    COPY_ATTR(__qualname__);
1313
5.08k
    COPY_ATTR(__doc__);
1314
5.08k
    return 0;
1315
1316
5.08k
#undef COPY_ATTR
1317
5.08k
}
1318
1319
// Used for wrapping __annotations__ and __annotate__ on classmethod
1320
// and staticmethod objects.
1321
static PyObject *
1322
descriptor_get_wrapped_attribute(PyObject *wrapped, PyObject *obj, PyObject *name)
1323
0
{
1324
0
    PyObject *dict = PyObject_GenericGetDict(obj, NULL);
1325
0
    if (dict == NULL) {
1326
0
        return NULL;
1327
0
    }
1328
0
    PyObject *res;
1329
0
    if (PyDict_GetItemRef(dict, name, &res) < 0) {
1330
0
        Py_DECREF(dict);
1331
0
        return NULL;
1332
0
    }
1333
0
    if (res != NULL) {
1334
0
        Py_DECREF(dict);
1335
0
        return res;
1336
0
    }
1337
0
    res = PyObject_GetAttr(wrapped, name);
1338
0
    if (res == NULL) {
1339
0
        Py_DECREF(dict);
1340
0
        return NULL;
1341
0
    }
1342
0
    if (PyDict_SetItem(dict, name, res) < 0) {
1343
0
        Py_DECREF(dict);
1344
0
        Py_DECREF(res);
1345
0
        return NULL;
1346
0
    }
1347
0
    Py_DECREF(dict);
1348
0
    return res;
1349
0
}
1350
1351
static int
1352
descriptor_set_wrapped_attribute(PyObject *oobj, PyObject *name, PyObject *value,
1353
                                 char *type_name)
1354
0
{
1355
0
    PyObject *dict = PyObject_GenericGetDict(oobj, NULL);
1356
0
    if (dict == NULL) {
1357
0
        return -1;
1358
0
    }
1359
0
    if (value == NULL) {
1360
0
        if (PyDict_DelItem(dict, name) < 0) {
1361
0
            if (PyErr_ExceptionMatches(PyExc_KeyError)) {
1362
0
                PyErr_Clear();
1363
0
                PyErr_Format(PyExc_AttributeError,
1364
0
                             "'%.200s' object has no attribute '%U'",
1365
0
                             type_name, name);
1366
0
                Py_DECREF(dict);
1367
0
                return -1;
1368
0
            }
1369
0
            else {
1370
0
                Py_DECREF(dict);
1371
0
                return -1;
1372
0
            }
1373
0
        }
1374
0
        Py_DECREF(dict);
1375
0
        return 0;
1376
0
    }
1377
0
    else {
1378
0
        Py_DECREF(dict);
1379
0
        return PyDict_SetItem(dict, name, value);
1380
0
    }
1381
0
}
1382
1383
1384
/* Class method object */
1385
1386
/* A class method receives the class as implicit first argument,
1387
   just like an instance method receives the instance.
1388
   To declare a class method, use this idiom:
1389
1390
     class C:
1391
         @classmethod
1392
         def f(cls, arg1, arg2, argN):
1393
             ...
1394
1395
   It can be called either on the class (e.g. C.f()) or on an instance
1396
   (e.g. C().f()); the instance is ignored except for its class.
1397
   If a class method is called for a derived class, the derived class
1398
   object is passed as the implied first argument.
1399
1400
   Class methods are different than C++ or Java static methods.
1401
   If you want those, see static methods below.
1402
*/
1403
1404
typedef struct {
1405
    PyObject_HEAD
1406
    PyObject *cm_callable;
1407
    PyObject *cm_dict;
1408
} classmethod;
1409
1410
#define _PyClassMethod_CAST(cm) \
1411
802k
    (assert(PyObject_TypeCheck((cm), &PyClassMethod_Type)), \
1412
802k
     _Py_CAST(classmethod*, cm))
1413
1414
static void
1415
cm_dealloc(PyObject *self)
1416
69
{
1417
69
    classmethod *cm = _PyClassMethod_CAST(self);
1418
69
    _PyObject_GC_UNTRACK((PyObject *)cm);
1419
69
    Py_XDECREF(cm->cm_callable);
1420
69
    Py_XDECREF(cm->cm_dict);
1421
69
    Py_TYPE(cm)->tp_free((PyObject *)cm);
1422
69
}
1423
1424
static int
1425
cm_traverse(PyObject *self, visitproc visit, void *arg)
1426
134k
{
1427
134k
    classmethod *cm = _PyClassMethod_CAST(self);
1428
134k
    Py_VISIT(cm->cm_callable);
1429
134k
    Py_VISIT(cm->cm_dict);
1430
134k
    return 0;
1431
134k
}
1432
1433
static int
1434
cm_clear(PyObject *self)
1435
46
{
1436
46
    classmethod *cm = _PyClassMethod_CAST(self);
1437
46
    Py_CLEAR(cm->cm_callable);
1438
46
    Py_CLEAR(cm->cm_dict);
1439
46
    return 0;
1440
46
}
1441
1442
1443
static PyObject *
1444
cm_descr_get(PyObject *self, PyObject *obj, PyObject *type)
1445
18.7M
{
1446
18.7M
    classmethod *cm = (classmethod *)self;
1447
18.7M
    if (type == NULL)
1448
0
        type = (PyObject *)(Py_TYPE(obj));
1449
18.7M
    return PyMethod_New(cm->cm_callable, type);
1450
18.7M
}
1451
1452
static int
1453
cm_set_callable(classmethod *cm, PyObject *callable)
1454
6.35k
{
1455
6.35k
    assert(callable != NULL);
1456
6.35k
    if (cm->cm_callable == callable) {
1457
        // cm_init() sets the same callable than cm_new()
1458
3.13k
        return 0;
1459
3.13k
    }
1460
1461
3.21k
    Py_XSETREF(cm->cm_callable, Py_NewRef(callable));
1462
3.21k
    return functools_wraps((PyObject *)cm, cm->cm_callable);
1463
6.35k
}
1464
1465
static PyObject *
1466
cm_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
1467
3.13k
{
1468
3.13k
    if (!_PyArg_NoKeywords("classmethod", kwds)) {
1469
0
        return NULL;
1470
0
    }
1471
3.13k
    PyObject *callable;  // borrowed ref
1472
3.13k
    if (!PyArg_UnpackTuple(args, "classmethod", 1, 1, &callable)) {
1473
0
        return NULL;
1474
0
    }
1475
1476
3.13k
    classmethod *cm = (classmethod *)PyType_GenericAlloc(type, 0);
1477
3.13k
    if (cm == NULL) {
1478
0
        return NULL;
1479
0
    }
1480
3.13k
    _PyObject_SetDeferredRefcount((PyObject *)cm);
1481
3.13k
    if (cm_set_callable(cm, callable) < 0) {
1482
0
        Py_DECREF(cm);
1483
0
        return NULL;
1484
0
    }
1485
3.13k
    return (PyObject *)cm;
1486
3.13k
}
1487
1488
static int
1489
cm_init(PyObject *self, PyObject *args, PyObject *kwds)
1490
3.13k
{
1491
3.13k
    if (!_PyArg_NoKeywords("classmethod", kwds)) {
1492
0
        return -1;
1493
0
    }
1494
3.13k
    PyObject *callable;  // borrowed ref
1495
3.13k
    if (!PyArg_UnpackTuple(args, "classmethod", 1, 1, &callable)) {
1496
0
        return -1;
1497
0
    }
1498
1499
3.13k
    classmethod *cm = (classmethod *)self;
1500
3.13k
    return cm_set_callable(cm, callable);
1501
3.13k
}
1502
1503
static PyMemberDef cm_memberlist[] = {
1504
    {"__func__", _Py_T_OBJECT, offsetof(classmethod, cm_callable), Py_READONLY},
1505
    {"__wrapped__", _Py_T_OBJECT, offsetof(classmethod, cm_callable), Py_READONLY},
1506
    {NULL}  /* Sentinel */
1507
};
1508
1509
static PyObject *
1510
cm_get___isabstractmethod__(PyObject *self, void *closure)
1511
1.32k
{
1512
1.32k
    classmethod *cm = _PyClassMethod_CAST(self);
1513
1.32k
    int res = _PyObject_IsAbstract(cm->cm_callable);
1514
1.32k
    if (res == -1) {
1515
0
        return NULL;
1516
0
    }
1517
1.32k
    else if (res) {
1518
0
        Py_RETURN_TRUE;
1519
0
    }
1520
1.32k
    Py_RETURN_FALSE;
1521
1.32k
}
1522
1523
static PyObject *
1524
cm_get___annotations__(PyObject *self, void *closure)
1525
0
{
1526
0
    classmethod *cm = _PyClassMethod_CAST(self);
1527
0
    return descriptor_get_wrapped_attribute(cm->cm_callable, self, &_Py_ID(__annotations__));
1528
0
}
1529
1530
static int
1531
cm_set___annotations__(PyObject *self, PyObject *value, void *closure)
1532
0
{
1533
0
    return descriptor_set_wrapped_attribute(self, &_Py_ID(__annotations__), value, "classmethod");
1534
0
}
1535
1536
static PyObject *
1537
cm_get___annotate__(PyObject *self, void *closure)
1538
0
{
1539
0
    classmethod *cm = _PyClassMethod_CAST(self);
1540
0
    return descriptor_get_wrapped_attribute(cm->cm_callable, self, &_Py_ID(__annotate__));
1541
0
}
1542
1543
static int
1544
cm_set___annotate__(PyObject *self, PyObject *value, void *closure)
1545
0
{
1546
0
    return descriptor_set_wrapped_attribute(self, &_Py_ID(__annotate__), value, "classmethod");
1547
0
}
1548
1549
1550
static PyGetSetDef cm_getsetlist[] = {
1551
    {"__isabstractmethod__", cm_get___isabstractmethod__, NULL, NULL, NULL},
1552
    {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict, NULL, NULL},
1553
    {"__annotations__", cm_get___annotations__, cm_set___annotations__, NULL, NULL},
1554
    {"__annotate__", cm_get___annotate__, cm_set___annotate__, NULL, NULL},
1555
    {NULL} /* Sentinel */
1556
};
1557
1558
static PyMethodDef cm_methodlist[] = {
1559
    {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, NULL},
1560
    {NULL} /* Sentinel */
1561
};
1562
1563
static PyObject*
1564
cm_repr(PyObject *self)
1565
0
{
1566
0
    classmethod *cm = _PyClassMethod_CAST(self);
1567
0
    return PyUnicode_FromFormat("<classmethod(%R)>", cm->cm_callable);
1568
0
}
1569
1570
PyDoc_STRVAR(classmethod_doc,
1571
"classmethod(function, /)\n\
1572
--\n\
1573
\n\
1574
Convert a function to be a class method.\n\
1575
\n\
1576
A class method receives the class as implicit first argument,\n\
1577
just like an instance method receives the instance.\n\
1578
To declare a class method, use this idiom:\n\
1579
\n\
1580
  class C:\n\
1581
      @classmethod\n\
1582
      def f(cls, arg1, arg2, argN):\n\
1583
          ...\n\
1584
\n\
1585
It can be called either on the class (e.g. C.f()) or on an instance\n\
1586
(e.g. C().f()).  The instance is ignored except for its class.\n\
1587
If a class method is called for a derived class, the derived class\n\
1588
object is passed as the implied first argument.\n\
1589
\n\
1590
Class methods are different than C++ or Java static methods.\n\
1591
If you want those, see the staticmethod builtin.");
1592
1593
PyTypeObject PyClassMethod_Type = {
1594
    PyVarObject_HEAD_INIT(&PyType_Type, 0)
1595
    "classmethod",
1596
    sizeof(classmethod),
1597
    0,
1598
    cm_dealloc,                                 /* tp_dealloc */
1599
    0,                                          /* tp_vectorcall_offset */
1600
    0,                                          /* tp_getattr */
1601
    0,                                          /* tp_setattr */
1602
    0,                                          /* tp_as_async */
1603
    cm_repr,                                    /* tp_repr */
1604
    0,                                          /* tp_as_number */
1605
    0,                                          /* tp_as_sequence */
1606
    0,                                          /* tp_as_mapping */
1607
    0,                                          /* tp_hash */
1608
    0,                                          /* tp_call */
1609
    0,                                          /* tp_str */
1610
    0,                                          /* tp_getattro */
1611
    0,                                          /* tp_setattro */
1612
    0,                                          /* tp_as_buffer */
1613
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
1614
    classmethod_doc,                            /* tp_doc */
1615
    cm_traverse,                                /* tp_traverse */
1616
    cm_clear,                                   /* tp_clear */
1617
    0,                                          /* tp_richcompare */
1618
    0,                                          /* tp_weaklistoffset */
1619
    0,                                          /* tp_iter */
1620
    0,                                          /* tp_iternext */
1621
    cm_methodlist,                              /* tp_methods */
1622
    cm_memberlist,                              /* tp_members */
1623
    cm_getsetlist,                              /* tp_getset */
1624
    0,                                          /* tp_base */
1625
    0,                                          /* tp_dict */
1626
    cm_descr_get,                               /* tp_descr_get */
1627
    0,                                          /* tp_descr_set */
1628
    offsetof(classmethod, cm_dict),             /* tp_dictoffset */
1629
    cm_init,                                    /* tp_init */
1630
    PyType_GenericAlloc,                        /* tp_alloc */
1631
    cm_new,                                     /* tp_new */
1632
    PyObject_GC_Del,                            /* tp_free */
1633
};
1634
1635
PyObject *
1636
PyClassMethod_New(PyObject *callable)
1637
81
{
1638
81
    classmethod *cm = (classmethod *)
1639
81
        PyType_GenericAlloc(&PyClassMethod_Type, 0);
1640
81
    if (cm == NULL) {
1641
0
        return NULL;
1642
0
    }
1643
81
    if (cm_set_callable(cm, callable) < 0) {
1644
0
        Py_DECREF(cm);
1645
0
        return NULL;
1646
0
    }
1647
81
    return (PyObject *)cm;
1648
81
}
1649
1650
1651
/* Static method object */
1652
1653
/* A static method does not receive an implicit first argument.
1654
   To declare a static method, use this idiom:
1655
1656
     class C:
1657
         @staticmethod
1658
         def f(arg1, arg2, argN):
1659
             ...
1660
1661
   It can be called either on the class (e.g. C.f()) or on an instance
1662
   (e.g. C().f()). Both the class and the instance are ignored, and
1663
   neither is passed implicitly as the first argument to the method.
1664
1665
   Static methods in Python are similar to those found in Java or C++.
1666
   For a more advanced concept, see class methods above.
1667
*/
1668
1669
typedef struct {
1670
    PyObject_HEAD
1671
    PyObject *sm_callable;
1672
    PyObject *sm_dict;
1673
} staticmethod;
1674
1675
#define _PyStaticMethod_CAST(cm) \
1676
17.0M
    (assert(PyObject_TypeCheck((cm), &PyStaticMethod_Type)), \
1677
17.0M
     _Py_CAST(staticmethod*, cm))
1678
1679
static void
1680
sm_dealloc(PyObject *self)
1681
118
{
1682
118
    staticmethod *sm = _PyStaticMethod_CAST(self);
1683
118
    _PyObject_GC_UNTRACK((PyObject *)sm);
1684
118
    Py_XDECREF(sm->sm_callable);
1685
118
    Py_XDECREF(sm->sm_dict);
1686
118
    Py_TYPE(sm)->tp_free((PyObject *)sm);
1687
118
}
1688
1689
static int
1690
sm_traverse(PyObject *self, visitproc visit, void *arg)
1691
63.4k
{
1692
63.4k
    staticmethod *sm = _PyStaticMethod_CAST(self);
1693
63.4k
    Py_VISIT(sm->sm_callable);
1694
63.4k
    Py_VISIT(sm->sm_dict);
1695
63.4k
    return 0;
1696
63.4k
}
1697
1698
static int
1699
sm_clear(PyObject *self)
1700
0
{
1701
0
    staticmethod *sm = _PyStaticMethod_CAST(self);
1702
0
    Py_CLEAR(sm->sm_callable);
1703
0
    Py_CLEAR(sm->sm_dict);
1704
0
    return 0;
1705
0
}
1706
1707
static PyObject *
1708
sm_descr_get(PyObject *self, PyObject *obj, PyObject *type)
1709
14.5k
{
1710
14.5k
    staticmethod *sm = (staticmethod *)self;
1711
14.5k
    return Py_NewRef(sm->sm_callable);
1712
14.5k
}
1713
1714
static int
1715
sm_set_callable(staticmethod *sm, PyObject *callable)
1716
2.77k
{
1717
2.77k
    assert(callable != NULL);
1718
2.77k
    if (sm->sm_callable == callable) {
1719
        // sm_init() sets the same callable than sm_new()
1720
905
        return 0;
1721
905
    }
1722
1723
1.86k
    Py_XSETREF(sm->sm_callable, Py_NewRef(callable));
1724
1.86k
    return functools_wraps((PyObject *)sm, sm->sm_callable);
1725
2.77k
}
1726
1727
static PyObject *
1728
sm_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
1729
905
{
1730
905
    if (!_PyArg_NoKeywords("staticmethod", kwds)) {
1731
0
        return NULL;
1732
0
    }
1733
905
    PyObject *callable;  // borrowed ref
1734
905
    if (!PyArg_UnpackTuple(args, "staticmethod", 1, 1, &callable)) {
1735
0
        return NULL;
1736
0
    }
1737
1738
905
    staticmethod *sm = (staticmethod *)PyType_GenericAlloc(type, 0);
1739
905
    if (sm == NULL) {
1740
0
        return NULL;
1741
0
    }
1742
905
    _PyObject_SetDeferredRefcount((PyObject *)sm);
1743
905
    if (sm_set_callable(sm, callable) < 0) {
1744
0
        Py_DECREF(sm);
1745
0
        return NULL;
1746
0
    }
1747
905
    return (PyObject *)sm;
1748
905
}
1749
1750
static int
1751
sm_init(PyObject *self, PyObject *args, PyObject *kwds)
1752
905
{
1753
905
    if (!_PyArg_NoKeywords("staticmethod", kwds)) {
1754
0
        return -1;
1755
0
    }
1756
905
    PyObject *callable;  // borrowed ref
1757
905
    if (!PyArg_UnpackTuple(args, "staticmethod", 1, 1, &callable)) {
1758
0
        return -1;
1759
0
    }
1760
1761
905
    staticmethod *sm = (staticmethod *)self;
1762
905
    return sm_set_callable(sm, callable);
1763
905
}
1764
1765
static PyObject*
1766
sm_call(PyObject *callable, PyObject *args, PyObject *kwargs)
1767
0
{
1768
0
    staticmethod *sm = (staticmethod *)callable;
1769
0
    return PyObject_Call(sm->sm_callable, args, kwargs);
1770
0
}
1771
1772
static PyMemberDef sm_memberlist[] = {
1773
    {"__func__", _Py_T_OBJECT, offsetof(staticmethod, sm_callable), Py_READONLY},
1774
    {"__wrapped__", _Py_T_OBJECT, offsetof(staticmethod, sm_callable), Py_READONLY},
1775
    {NULL}  /* Sentinel */
1776
};
1777
1778
static PyObject *
1779
sm_get___isabstractmethod__(PyObject *self, void *closure)
1780
77
{
1781
77
    staticmethod *sm = _PyStaticMethod_CAST(self);
1782
77
    int res = _PyObject_IsAbstract(sm->sm_callable);
1783
77
    if (res == -1) {
1784
0
        return NULL;
1785
0
    }
1786
77
    else if (res) {
1787
0
        Py_RETURN_TRUE;
1788
0
    }
1789
77
    Py_RETURN_FALSE;
1790
77
}
1791
1792
static PyObject *
1793
sm_get___annotations__(PyObject *self, void *closure)
1794
0
{
1795
0
    staticmethod *sm = _PyStaticMethod_CAST(self);
1796
0
    return descriptor_get_wrapped_attribute(sm->sm_callable, self, &_Py_ID(__annotations__));
1797
0
}
1798
1799
static int
1800
sm_set___annotations__(PyObject *self, PyObject *value, void *closure)
1801
0
{
1802
0
    return descriptor_set_wrapped_attribute(self, &_Py_ID(__annotations__), value, "staticmethod");
1803
0
}
1804
1805
static PyObject *
1806
sm_get___annotate__(PyObject *self, void *closure)
1807
0
{
1808
0
    staticmethod *sm = _PyStaticMethod_CAST(self);
1809
0
    return descriptor_get_wrapped_attribute(sm->sm_callable, self, &_Py_ID(__annotate__));
1810
0
}
1811
1812
static int
1813
sm_set___annotate__(PyObject *self, PyObject *value, void *closure)
1814
0
{
1815
0
    return descriptor_set_wrapped_attribute(self, &_Py_ID(__annotate__), value, "staticmethod");
1816
0
}
1817
1818
static PyGetSetDef sm_getsetlist[] = {
1819
    {"__isabstractmethod__", sm_get___isabstractmethod__, NULL, NULL, NULL},
1820
    {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict, NULL, NULL},
1821
    {"__annotations__", sm_get___annotations__, sm_set___annotations__, NULL, NULL},
1822
    {"__annotate__", sm_get___annotate__, sm_set___annotate__, NULL, NULL},
1823
    {NULL} /* Sentinel */
1824
};
1825
1826
static PyMethodDef sm_methodlist[] = {
1827
    {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, NULL},
1828
    {NULL} /* Sentinel */
1829
};
1830
1831
static PyObject*
1832
sm_repr(PyObject *self)
1833
0
{
1834
0
    staticmethod *sm = _PyStaticMethod_CAST(self);
1835
0
    return PyUnicode_FromFormat("<staticmethod(%R)>", sm->sm_callable);
1836
0
}
1837
1838
PyDoc_STRVAR(staticmethod_doc,
1839
"staticmethod(function, /)\n\
1840
--\n\
1841
\n\
1842
Convert a function to be a static method.\n\
1843
\n\
1844
A static method does not receive an implicit first argument.\n\
1845
To declare a static method, use this idiom:\n\
1846
\n\
1847
     class C:\n\
1848
         @staticmethod\n\
1849
         def f(arg1, arg2, argN):\n\
1850
             ...\n\
1851
\n\
1852
It can be called either on the class (e.g. C.f()) or on an instance\n\
1853
(e.g. C().f()). Both the class and the instance are ignored, and\n\
1854
neither is passed implicitly as the first argument to the method.\n\
1855
\n\
1856
Static methods in Python are similar to those found in Java or C++.\n\
1857
For a more advanced concept, see the classmethod builtin.");
1858
1859
PyTypeObject PyStaticMethod_Type = {
1860
    PyVarObject_HEAD_INIT(&PyType_Type, 0)
1861
    "staticmethod",
1862
    sizeof(staticmethod),
1863
    0,
1864
    sm_dealloc,                                 /* tp_dealloc */
1865
    0,                                          /* tp_vectorcall_offset */
1866
    0,                                          /* tp_getattr */
1867
    0,                                          /* tp_setattr */
1868
    0,                                          /* tp_as_async */
1869
    sm_repr,                                    /* tp_repr */
1870
    0,                                          /* tp_as_number */
1871
    0,                                          /* tp_as_sequence */
1872
    0,                                          /* tp_as_mapping */
1873
    0,                                          /* tp_hash */
1874
    sm_call,                                    /* tp_call */
1875
    0,                                          /* tp_str */
1876
    0,                                          /* tp_getattro */
1877
    0,                                          /* tp_setattro */
1878
    0,                                          /* tp_as_buffer */
1879
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
1880
    staticmethod_doc,                           /* tp_doc */
1881
    sm_traverse,                                /* tp_traverse */
1882
    sm_clear,                                   /* tp_clear */
1883
    0,                                          /* tp_richcompare */
1884
    0,                                          /* tp_weaklistoffset */
1885
    0,                                          /* tp_iter */
1886
    0,                                          /* tp_iternext */
1887
    sm_methodlist,                              /* tp_methods */
1888
    sm_memberlist,                              /* tp_members */
1889
    sm_getsetlist,                              /* tp_getset */
1890
    0,                                          /* tp_base */
1891
    0,                                          /* tp_dict */
1892
    sm_descr_get,                               /* tp_descr_get */
1893
    0,                                          /* tp_descr_set */
1894
    offsetof(staticmethod, sm_dict),            /* tp_dictoffset */
1895
    sm_init,                                    /* tp_init */
1896
    PyType_GenericAlloc,                        /* tp_alloc */
1897
    sm_new,                                     /* tp_new */
1898
    PyObject_GC_Del,                            /* tp_free */
1899
};
1900
1901
PyObject *
1902
PyStaticMethod_New(PyObject *callable)
1903
961
{
1904
961
    staticmethod *sm = (staticmethod *)
1905
961
        PyType_GenericAlloc(&PyStaticMethod_Type, 0);
1906
961
    if (sm == NULL) {
1907
0
        return NULL;
1908
0
    }
1909
961
    _PyObject_SetDeferredRefcount((PyObject *)sm);
1910
961
    if (sm_set_callable(sm, callable) < 0) {
1911
0
        Py_DECREF(sm);
1912
0
        return NULL;
1913
0
    }
1914
961
    return (PyObject *)sm;
1915
961
}
1916
1917
PyObject *
1918
_PyClassMethod_GetFunc(PyObject *self)
1919
667k
{
1920
667k
    classmethod *cm = _PyClassMethod_CAST(self);
1921
667k
    return cm->cm_callable;
1922
667k
}
1923
1924
PyObject *
1925
_PyStaticMethod_GetFunc(PyObject *self)
1926
17.0M
{
1927
    staticmethod *sm = _PyStaticMethod_CAST(self);
1928
17.0M
    return sm->sm_callable;
1929
17.0M
}