blob: e440258d7de542fd2255727819eb67e94ca61590 [file] [log] [blame]
Guido van Rossumf70e43a1991-02-19 12:39:46 +00001
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00002/* Function object implementation */
3
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004#include "Python.h"
Jeremy Hylton3e0055f2005-10-20 19:59:25 +00005#include "code.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00006#include "structmember.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00007
Guido van Rossumc0b618a1997-05-02 03:12:38 +00008PyObject *
Antoine Pitrou86a36b52011-11-25 18:56:07 +01009PyFunction_NewWithQualName(PyObject *code, PyObject *globals, PyObject *qualname)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000010{
Victor Stinner4d1f5d62013-07-22 23:02:05 +020011 PyFunctionObject *op;
12 PyObject *doc, *consts, *module;
13 static PyObject *__name__ = NULL;
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +000014
Victor Stinner34f96b82013-07-22 23:04:55 +020015 if (__name__ == NULL) {
16 __name__ = PyUnicode_InternFromString("__name__");
17 if (__name__ == NULL)
18 return NULL;
19 }
20
Victor Stinner4d1f5d62013-07-22 23:02:05 +020021 op = PyObject_GC_New(PyFunctionObject, &PyFunction_Type);
22 if (op == NULL)
23 return NULL;
24
25 op->func_weakreflist = NULL;
26 Py_INCREF(code);
27 op->func_code = code;
28 Py_INCREF(globals);
29 op->func_globals = globals;
30 op->func_name = ((PyCodeObject *)code)->co_name;
31 Py_INCREF(op->func_name);
32 op->func_defaults = NULL; /* No default arguments */
33 op->func_kwdefaults = NULL; /* No keyword only defaults */
34 op->func_closure = NULL;
Victor Stinner34f96b82013-07-22 23:04:55 +020035
Victor Stinner4d1f5d62013-07-22 23:02:05 +020036 consts = ((PyCodeObject *)code)->co_consts;
37 if (PyTuple_Size(consts) >= 1) {
38 doc = PyTuple_GetItem(consts, 0);
39 if (!PyUnicode_Check(doc))
40 doc = Py_None;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000041 }
42 else
Victor Stinner4d1f5d62013-07-22 23:02:05 +020043 doc = Py_None;
44 Py_INCREF(doc);
45 op->func_doc = doc;
Victor Stinner34f96b82013-07-22 23:04:55 +020046
Victor Stinner4d1f5d62013-07-22 23:02:05 +020047 op->func_dict = NULL;
48 op->func_module = NULL;
49 op->func_annotations = NULL;
50
51 /* __module__: If module name is in globals, use it.
Victor Stinner34f96b82013-07-22 23:04:55 +020052 Otherwise, use None. */
Victor Stinner4d1f5d62013-07-22 23:02:05 +020053 module = PyDict_GetItem(globals, __name__);
54 if (module) {
55 Py_INCREF(module);
56 op->func_module = module;
57 }
58 if (qualname)
59 op->func_qualname = qualname;
60 else
61 op->func_qualname = op->func_name;
62 Py_INCREF(op->func_qualname);
63
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000064 _PyObject_GC_TRACK(op);
65 return (PyObject *)op;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000066}
67
Guido van Rossumc0b618a1997-05-02 03:12:38 +000068PyObject *
Antoine Pitrou86a36b52011-11-25 18:56:07 +010069PyFunction_New(PyObject *code, PyObject *globals)
70{
71 return PyFunction_NewWithQualName(code, globals, NULL);
72}
73
74PyObject *
Fred Drakeee238b92000-07-09 06:03:25 +000075PyFunction_GetCode(PyObject *op)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000076{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000077 if (!PyFunction_Check(op)) {
78 PyErr_BadInternalCall();
79 return NULL;
80 }
81 return ((PyFunctionObject *) op) -> func_code;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000082}
83
Guido van Rossumc0b618a1997-05-02 03:12:38 +000084PyObject *
Fred Drakeee238b92000-07-09 06:03:25 +000085PyFunction_GetGlobals(PyObject *op)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000086{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000087 if (!PyFunction_Check(op)) {
88 PyErr_BadInternalCall();
89 return NULL;
90 }
91 return ((PyFunctionObject *) op) -> func_globals;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000092}
93
Guido van Rossumc0b618a1997-05-02 03:12:38 +000094PyObject *
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +000095PyFunction_GetModule(PyObject *op)
96{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000097 if (!PyFunction_Check(op)) {
98 PyErr_BadInternalCall();
99 return NULL;
100 }
101 return ((PyFunctionObject *) op) -> func_module;
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +0000102}
103
104PyObject *
Fred Drakeee238b92000-07-09 06:03:25 +0000105PyFunction_GetDefaults(PyObject *op)
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000106{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000107 if (!PyFunction_Check(op)) {
108 PyErr_BadInternalCall();
109 return NULL;
110 }
111 return ((PyFunctionObject *) op) -> func_defaults;
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000112}
113
114int
Fred Drakeee238b92000-07-09 06:03:25 +0000115PyFunction_SetDefaults(PyObject *op, PyObject *defaults)
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000116{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000117 if (!PyFunction_Check(op)) {
118 PyErr_BadInternalCall();
119 return -1;
120 }
121 if (defaults == Py_None)
122 defaults = NULL;
123 else if (defaults && PyTuple_Check(defaults)) {
124 Py_INCREF(defaults);
125 }
126 else {
127 PyErr_SetString(PyExc_SystemError, "non-tuple default args");
128 return -1;
129 }
Serhiy Storchaka48842712016-04-06 09:45:48 +0300130 Py_XSETREF(((PyFunctionObject *)op)->func_defaults, defaults);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000131 return 0;
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000132}
133
Jeremy Hylton64949cb2001-01-25 20:06:59 +0000134PyObject *
Guido van Rossum4f72a782006-10-27 23:31:49 +0000135PyFunction_GetKwDefaults(PyObject *op)
136{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000137 if (!PyFunction_Check(op)) {
138 PyErr_BadInternalCall();
139 return NULL;
140 }
141 return ((PyFunctionObject *) op) -> func_kwdefaults;
Guido van Rossum4f72a782006-10-27 23:31:49 +0000142}
143
144int
145PyFunction_SetKwDefaults(PyObject *op, PyObject *defaults)
146{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000147 if (!PyFunction_Check(op)) {
148 PyErr_BadInternalCall();
149 return -1;
150 }
151 if (defaults == Py_None)
152 defaults = NULL;
153 else if (defaults && PyDict_Check(defaults)) {
154 Py_INCREF(defaults);
155 }
156 else {
157 PyErr_SetString(PyExc_SystemError,
158 "non-dict keyword only default args");
159 return -1;
160 }
Serhiy Storchaka48842712016-04-06 09:45:48 +0300161 Py_XSETREF(((PyFunctionObject *)op)->func_kwdefaults, defaults);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000162 return 0;
Guido van Rossum4f72a782006-10-27 23:31:49 +0000163}
164
165PyObject *
Jeremy Hylton64949cb2001-01-25 20:06:59 +0000166PyFunction_GetClosure(PyObject *op)
167{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000168 if (!PyFunction_Check(op)) {
169 PyErr_BadInternalCall();
170 return NULL;
171 }
172 return ((PyFunctionObject *) op) -> func_closure;
Jeremy Hylton64949cb2001-01-25 20:06:59 +0000173}
174
175int
176PyFunction_SetClosure(PyObject *op, PyObject *closure)
177{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000178 if (!PyFunction_Check(op)) {
179 PyErr_BadInternalCall();
180 return -1;
181 }
182 if (closure == Py_None)
183 closure = NULL;
184 else if (PyTuple_Check(closure)) {
185 Py_INCREF(closure);
186 }
187 else {
188 PyErr_Format(PyExc_SystemError,
189 "expected tuple for closure, got '%.100s'",
190 closure->ob_type->tp_name);
191 return -1;
192 }
Serhiy Storchaka48842712016-04-06 09:45:48 +0300193 Py_XSETREF(((PyFunctionObject *)op)->func_closure, closure);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000194 return 0;
Jeremy Hylton64949cb2001-01-25 20:06:59 +0000195}
196
Neal Norwitzc1505362006-12-28 06:47:50 +0000197PyObject *
198PyFunction_GetAnnotations(PyObject *op)
199{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000200 if (!PyFunction_Check(op)) {
201 PyErr_BadInternalCall();
202 return NULL;
203 }
204 return ((PyFunctionObject *) op) -> func_annotations;
Neal Norwitzc1505362006-12-28 06:47:50 +0000205}
206
207int
208PyFunction_SetAnnotations(PyObject *op, PyObject *annotations)
209{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000210 if (!PyFunction_Check(op)) {
211 PyErr_BadInternalCall();
212 return -1;
213 }
214 if (annotations == Py_None)
215 annotations = NULL;
216 else if (annotations && PyDict_Check(annotations)) {
217 Py_INCREF(annotations);
218 }
219 else {
220 PyErr_SetString(PyExc_SystemError,
221 "non-dict annotations");
222 return -1;
223 }
Serhiy Storchaka48842712016-04-06 09:45:48 +0300224 Py_XSETREF(((PyFunctionObject *)op)->func_annotations, annotations);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000225 return 0;
Neal Norwitzc1505362006-12-28 06:47:50 +0000226}
227
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000228/* Methods */
229
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000230#define OFF(x) offsetof(PyFunctionObject, x)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000231
Guido van Rossum6f799372001-09-20 20:46:19 +0000232static PyMemberDef func_memberlist[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000233 {"__closure__", T_OBJECT, OFF(func_closure),
234 RESTRICTED|READONLY},
235 {"__doc__", T_OBJECT, OFF(func_doc), PY_WRITE_RESTRICTED},
236 {"__globals__", T_OBJECT, OFF(func_globals),
237 RESTRICTED|READONLY},
238 {"__module__", T_OBJECT, OFF(func_module), PY_WRITE_RESTRICTED},
239 {NULL} /* Sentinel */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000240};
241
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000242static PyObject *
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000243func_get_code(PyFunctionObject *op)
244{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000245 Py_INCREF(op->func_code);
246 return op->func_code;
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000247}
248
249static int
250func_set_code(PyFunctionObject *op, PyObject *value)
251{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000252 Py_ssize_t nfree, nclosure;
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000253
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000254 /* Not legal to del f.func_code or to set it to anything
255 * other than a code object. */
256 if (value == NULL || !PyCode_Check(value)) {
257 PyErr_SetString(PyExc_TypeError,
258 "__code__ must be set to a code object");
259 return -1;
260 }
261 nfree = PyCode_GetNumFree((PyCodeObject *)value);
262 nclosure = (op->func_closure == NULL ? 0 :
263 PyTuple_GET_SIZE(op->func_closure));
264 if (nclosure != nfree) {
265 PyErr_Format(PyExc_ValueError,
266 "%U() requires a code object with %zd free vars,"
267 " not %zd",
268 op->func_name,
269 nclosure, nfree);
270 return -1;
271 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000272 Py_INCREF(value);
Serhiy Storchakaec397562016-04-06 09:50:03 +0300273 Py_XSETREF(op->func_code, value);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000274 return 0;
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000275}
276
277static PyObject *
Michael W. Hudson5e897952004-08-12 18:12:44 +0000278func_get_name(PyFunctionObject *op)
279{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000280 Py_INCREF(op->func_name);
281 return op->func_name;
Michael W. Hudson5e897952004-08-12 18:12:44 +0000282}
283
284static int
285func_set_name(PyFunctionObject *op, PyObject *value)
286{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000287 /* Not legal to del f.func_name or to set it to anything
288 * other than a string object. */
289 if (value == NULL || !PyUnicode_Check(value)) {
290 PyErr_SetString(PyExc_TypeError,
291 "__name__ must be set to a string object");
292 return -1;
293 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000294 Py_INCREF(value);
Serhiy Storchakaec397562016-04-06 09:50:03 +0300295 Py_XSETREF(op->func_name, value);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000296 return 0;
Michael W. Hudson5e897952004-08-12 18:12:44 +0000297}
298
299static PyObject *
Antoine Pitrou86a36b52011-11-25 18:56:07 +0100300func_get_qualname(PyFunctionObject *op)
301{
302 Py_INCREF(op->func_qualname);
303 return op->func_qualname;
304}
305
306static int
307func_set_qualname(PyFunctionObject *op, PyObject *value)
308{
Antoine Pitrou86a36b52011-11-25 18:56:07 +0100309 /* Not legal to del f.__qualname__ or to set it to anything
310 * other than a string object. */
311 if (value == NULL || !PyUnicode_Check(value)) {
312 PyErr_SetString(PyExc_TypeError,
313 "__qualname__ must be set to a string object");
314 return -1;
315 }
Antoine Pitrou86a36b52011-11-25 18:56:07 +0100316 Py_INCREF(value);
Serhiy Storchakaec397562016-04-06 09:50:03 +0300317 Py_XSETREF(op->func_qualname, value);
Antoine Pitrou86a36b52011-11-25 18:56:07 +0100318 return 0;
319}
320
321static PyObject *
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000322func_get_defaults(PyFunctionObject *op)
323{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000324 if (op->func_defaults == NULL) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +0200325 Py_RETURN_NONE;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000326 }
327 Py_INCREF(op->func_defaults);
328 return op->func_defaults;
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000329}
330
331static int
332func_set_defaults(PyFunctionObject *op, PyObject *value)
333{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000334 /* Legal to del f.func_defaults.
335 * Can only set func_defaults to NULL or a tuple. */
336 if (value == Py_None)
337 value = NULL;
338 if (value != NULL && !PyTuple_Check(value)) {
339 PyErr_SetString(PyExc_TypeError,
340 "__defaults__ must be set to a tuple object");
341 return -1;
342 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000343 Py_XINCREF(value);
Serhiy Storchakaec397562016-04-06 09:50:03 +0300344 Py_XSETREF(op->func_defaults, value);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000345 return 0;
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000346}
347
Guido van Rossum4f72a782006-10-27 23:31:49 +0000348static PyObject *
349func_get_kwdefaults(PyFunctionObject *op)
350{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000351 if (op->func_kwdefaults == NULL) {
Serhiy Storchaka228b12e2017-01-23 09:47:21 +0200352 Py_RETURN_NONE;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000353 }
354 Py_INCREF(op->func_kwdefaults);
355 return op->func_kwdefaults;
Guido van Rossum4f72a782006-10-27 23:31:49 +0000356}
357
358static int
359func_set_kwdefaults(PyFunctionObject *op, PyObject *value)
360{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000361 if (value == Py_None)
362 value = NULL;
363 /* Legal to del f.func_kwdefaults.
364 * Can only set func_kwdefaults to NULL or a dict. */
365 if (value != NULL && !PyDict_Check(value)) {
366 PyErr_SetString(PyExc_TypeError,
367 "__kwdefaults__ must be set to a dict object");
368 return -1;
369 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000370 Py_XINCREF(value);
Serhiy Storchakaec397562016-04-06 09:50:03 +0300371 Py_XSETREF(op->func_kwdefaults, value);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000372 return 0;
Guido van Rossum4f72a782006-10-27 23:31:49 +0000373}
374
Neal Norwitzc1505362006-12-28 06:47:50 +0000375static PyObject *
376func_get_annotations(PyFunctionObject *op)
377{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000378 if (op->func_annotations == NULL) {
379 op->func_annotations = PyDict_New();
380 if (op->func_annotations == NULL)
381 return NULL;
382 }
383 Py_INCREF(op->func_annotations);
384 return op->func_annotations;
Neal Norwitzc1505362006-12-28 06:47:50 +0000385}
386
387static int
388func_set_annotations(PyFunctionObject *op, PyObject *value)
389{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000390 if (value == Py_None)
391 value = NULL;
392 /* Legal to del f.func_annotations.
393 * Can only set func_annotations to NULL (through C api)
394 * or a dict. */
395 if (value != NULL && !PyDict_Check(value)) {
396 PyErr_SetString(PyExc_TypeError,
397 "__annotations__ must be set to a dict object");
398 return -1;
399 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000400 Py_XINCREF(value);
Serhiy Storchakaec397562016-04-06 09:50:03 +0300401 Py_XSETREF(op->func_annotations, value);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000402 return 0;
Neal Norwitzc1505362006-12-28 06:47:50 +0000403}
404
Guido van Rossum32d34c82001-09-20 21:45:26 +0000405static PyGetSetDef func_getsetlist[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000406 {"__code__", (getter)func_get_code, (setter)func_set_code},
407 {"__defaults__", (getter)func_get_defaults,
408 (setter)func_set_defaults},
409 {"__kwdefaults__", (getter)func_get_kwdefaults,
410 (setter)func_set_kwdefaults},
411 {"__annotations__", (getter)func_get_annotations,
412 (setter)func_set_annotations},
Benjamin Peterson23d7f122012-02-19 20:02:57 -0500413 {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000414 {"__name__", (getter)func_get_name, (setter)func_set_name},
Antoine Pitrou86a36b52011-11-25 18:56:07 +0100415 {"__qualname__", (getter)func_get_qualname, (setter)func_set_qualname},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000416 {NULL} /* Sentinel */
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000417};
418
Serhiy Storchaka18b250f2017-03-19 08:51:07 +0200419/*[clinic input]
420class function "PyFunctionObject *" "&PyFunction_Type"
421[clinic start generated code]*/
422/*[clinic end generated code: output=da39a3ee5e6b4b0d input=70af9c90aa2e71b0]*/
Jeremy Hyltondf3f7932002-07-11 18:30:27 +0000423
Serhiy Storchaka18b250f2017-03-19 08:51:07 +0200424#include "clinic/funcobject.c.h"
425
426/* function.__new__() maintains the following invariants for closures.
427 The closure must correspond to the free variables of the code object.
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000428
429 if len(code.co_freevars) == 0:
430 closure = NULL
Jeremy Hyltondf3f7932002-07-11 18:30:27 +0000431 else:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000432 len(closure) == len(code.co_freevars)
Jeremy Hyltondf3f7932002-07-11 18:30:27 +0000433 for every elt in closure, type(elt) == cell
434*/
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000435
Serhiy Storchaka18b250f2017-03-19 08:51:07 +0200436/*[clinic input]
437@classmethod
438function.__new__ as func_new
439 code: object(type="PyCodeObject *", subclass_of="&PyCode_Type")
440 a code object
441 globals: object(subclass_of="&PyDict_Type")
442 the globals dictionary
443 name: object = None
444 a string that overrides the name from the code object
445 argdefs as defaults: object = None
446 a tuple that specifies the default argument values
447 closure: object = None
448 a tuple that supplies the bindings for free variables
449
450Create a function object.
451[clinic start generated code]*/
452
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000453static PyObject *
Serhiy Storchaka18b250f2017-03-19 08:51:07 +0200454func_new_impl(PyTypeObject *type, PyCodeObject *code, PyObject *globals,
455 PyObject *name, PyObject *defaults, PyObject *closure)
456/*[clinic end generated code: output=99c6d9da3a24e3be input=93611752fc2daf11]*/
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000457{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000458 PyFunctionObject *newfunc;
459 Py_ssize_t nfree, nclosure;
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000460
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000461 if (name != Py_None && !PyUnicode_Check(name)) {
462 PyErr_SetString(PyExc_TypeError,
463 "arg 3 (name) must be None or string");
464 return NULL;
465 }
466 if (defaults != Py_None && !PyTuple_Check(defaults)) {
467 PyErr_SetString(PyExc_TypeError,
468 "arg 4 (defaults) must be None or tuple");
469 return NULL;
470 }
471 nfree = PyTuple_GET_SIZE(code->co_freevars);
472 if (!PyTuple_Check(closure)) {
473 if (nfree && closure == Py_None) {
474 PyErr_SetString(PyExc_TypeError,
475 "arg 5 (closure) must be tuple");
476 return NULL;
477 }
478 else if (closure != Py_None) {
479 PyErr_SetString(PyExc_TypeError,
480 "arg 5 (closure) must be None or tuple");
481 return NULL;
482 }
483 }
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000484
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000485 /* check that the closure is well-formed */
486 nclosure = closure == Py_None ? 0 : PyTuple_GET_SIZE(closure);
487 if (nfree != nclosure)
488 return PyErr_Format(PyExc_ValueError,
489 "%U requires closure of length %zd, not %zd",
490 code->co_name, nfree, nclosure);
491 if (nclosure) {
492 Py_ssize_t i;
493 for (i = 0; i < nclosure; i++) {
494 PyObject *o = PyTuple_GET_ITEM(closure, i);
495 if (!PyCell_Check(o)) {
496 return PyErr_Format(PyExc_TypeError,
497 "arg 5 (closure) expected cell, found %s",
498 o->ob_type->tp_name);
499 }
500 }
501 }
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000502
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000503 newfunc = (PyFunctionObject *)PyFunction_New((PyObject *)code,
504 globals);
505 if (newfunc == NULL)
506 return NULL;
507
508 if (name != Py_None) {
509 Py_INCREF(name);
Serhiy Storchaka57a01d32016-04-10 18:05:40 +0300510 Py_SETREF(newfunc->func_name, name);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000511 }
512 if (defaults != Py_None) {
513 Py_INCREF(defaults);
514 newfunc->func_defaults = defaults;
515 }
516 if (closure != Py_None) {
517 Py_INCREF(closure);
518 newfunc->func_closure = closure;
519 }
520
521 return (PyObject *)newfunc;
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000522}
523
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000524static void
Fred Drakeee238b92000-07-09 06:03:25 +0000525func_dealloc(PyFunctionObject *op)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000526{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000527 _PyObject_GC_UNTRACK(op);
528 if (op->func_weakreflist != NULL)
529 PyObject_ClearWeakRefs((PyObject *) op);
530 Py_DECREF(op->func_code);
531 Py_DECREF(op->func_globals);
532 Py_XDECREF(op->func_module);
533 Py_DECREF(op->func_name);
534 Py_XDECREF(op->func_defaults);
535 Py_XDECREF(op->func_kwdefaults);
536 Py_XDECREF(op->func_doc);
537 Py_XDECREF(op->func_dict);
538 Py_XDECREF(op->func_closure);
539 Py_XDECREF(op->func_annotations);
Antoine Pitrou86a36b52011-11-25 18:56:07 +0100540 Py_XDECREF(op->func_qualname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000541 PyObject_GC_Del(op);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000542}
543
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000544static PyObject*
Fred Drakeee238b92000-07-09 06:03:25 +0000545func_repr(PyFunctionObject *op)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000546{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000547 return PyUnicode_FromFormat("<function %U at %p>",
Antoine Pitrou86a36b52011-11-25 18:56:07 +0100548 op->func_qualname, op);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000549}
550
Guido van Rossum2e8f8a31993-11-05 10:20:10 +0000551static int
Jeremy Hylton8caad492000-06-23 14:18:11 +0000552func_traverse(PyFunctionObject *f, visitproc visit, void *arg)
553{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000554 Py_VISIT(f->func_code);
555 Py_VISIT(f->func_globals);
556 Py_VISIT(f->func_module);
557 Py_VISIT(f->func_defaults);
558 Py_VISIT(f->func_kwdefaults);
559 Py_VISIT(f->func_doc);
560 Py_VISIT(f->func_name);
561 Py_VISIT(f->func_dict);
562 Py_VISIT(f->func_closure);
563 Py_VISIT(f->func_annotations);
Antoine Pitrou86a36b52011-11-25 18:56:07 +0100564 Py_VISIT(f->func_qualname);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000565 return 0;
Jeremy Hylton8caad492000-06-23 14:18:11 +0000566}
567
Tim Peters6d6c1a32001-08-02 04:15:00 +0000568static PyObject *
Victor Stinner6f7c0ae2017-01-03 01:58:17 +0100569function_call(PyObject *func, PyObject *args, PyObject *kwargs)
Tim Peters6d6c1a32001-08-02 04:15:00 +0000570{
Victor Stinner6f7c0ae2017-01-03 01:58:17 +0100571 PyObject **stack;
572 Py_ssize_t nargs;
Tim Peters6d6c1a32001-08-02 04:15:00 +0000573
Victor Stinner6f7c0ae2017-01-03 01:58:17 +0100574 stack = &PyTuple_GET_ITEM(args, 0);
575 nargs = PyTuple_GET_SIZE(args);
576 return _PyFunction_FastCallDict(func, stack, nargs, kwargs);
Tim Peters6d6c1a32001-08-02 04:15:00 +0000577}
578
579/* Bind a function to an object */
580static PyObject *
581func_descr_get(PyObject *func, PyObject *obj, PyObject *type)
582{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000583 if (obj == Py_None || obj == NULL) {
584 Py_INCREF(func);
585 return func;
586 }
587 return PyMethod_New(func, obj);
Tim Peters6d6c1a32001-08-02 04:15:00 +0000588}
589
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000590PyTypeObject PyFunction_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000591 PyVarObject_HEAD_INIT(&PyType_Type, 0)
592 "function",
593 sizeof(PyFunctionObject),
594 0,
595 (destructor)func_dealloc, /* tp_dealloc */
596 0, /* tp_print */
597 0, /* tp_getattr */
598 0, /* tp_setattr */
599 0, /* tp_reserved */
600 (reprfunc)func_repr, /* tp_repr */
601 0, /* tp_as_number */
602 0, /* tp_as_sequence */
603 0, /* tp_as_mapping */
604 0, /* tp_hash */
605 function_call, /* tp_call */
606 0, /* tp_str */
Benjamin Peterson2cf936f2012-02-19 01:16:13 -0500607 0, /* tp_getattro */
608 0, /* tp_setattro */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000609 0, /* tp_as_buffer */
Serhiy Storchaka18b250f2017-03-19 08:51:07 +0200610 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC, /* tp_flags */
611 func_new__doc__, /* tp_doc */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000612 (traverseproc)func_traverse, /* tp_traverse */
613 0, /* tp_clear */
614 0, /* tp_richcompare */
615 offsetof(PyFunctionObject, func_weakreflist), /* tp_weaklistoffset */
616 0, /* tp_iter */
617 0, /* tp_iternext */
618 0, /* tp_methods */
619 func_memberlist, /* tp_members */
620 func_getsetlist, /* tp_getset */
621 0, /* tp_base */
622 0, /* tp_dict */
623 func_descr_get, /* tp_descr_get */
624 0, /* tp_descr_set */
625 offsetof(PyFunctionObject, func_dict), /* tp_dictoffset */
626 0, /* tp_init */
627 0, /* tp_alloc */
628 func_new, /* tp_new */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000629};
Tim Peters6d6c1a32001-08-02 04:15:00 +0000630
631
632/* Class method object */
633
634/* A class method receives the class as implicit first argument,
635 just like an instance method receives the instance.
636 To declare a class method, use this idiom:
637
638 class C:
Martin Panter6d57fe12016-09-17 03:26:16 +0000639 @classmethod
640 def f(cls, arg1, arg2, ...):
641 ...
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000642
Tim Peters6d6c1a32001-08-02 04:15:00 +0000643 It can be called either on the class (e.g. C.f()) or on an instance
644 (e.g. C().f()); the instance is ignored except for its class.
645 If a class method is called for a derived class, the derived class
646 object is passed as the implied first argument.
647
648 Class methods are different than C++ or Java static methods.
649 If you want those, see static methods below.
650*/
651
652typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000653 PyObject_HEAD
654 PyObject *cm_callable;
Benjamin Peterson01d7eba2012-02-19 01:10:25 -0500655 PyObject *cm_dict;
Tim Peters6d6c1a32001-08-02 04:15:00 +0000656} classmethod;
657
658static void
659cm_dealloc(classmethod *cm)
660{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000661 _PyObject_GC_UNTRACK((PyObject *)cm);
662 Py_XDECREF(cm->cm_callable);
Benjamin Peterson01d7eba2012-02-19 01:10:25 -0500663 Py_XDECREF(cm->cm_dict);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000664 Py_TYPE(cm)->tp_free((PyObject *)cm);
Tim Peters6d6c1a32001-08-02 04:15:00 +0000665}
666
Jeremy Hylton400d8ee2003-04-08 21:28:47 +0000667static int
668cm_traverse(classmethod *cm, visitproc visit, void *arg)
669{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000670 Py_VISIT(cm->cm_callable);
Benjamin Peterson01d7eba2012-02-19 01:10:25 -0500671 Py_VISIT(cm->cm_dict);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000672 return 0;
Jeremy Hylton400d8ee2003-04-08 21:28:47 +0000673}
674
675static int
676cm_clear(classmethod *cm)
677{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000678 Py_CLEAR(cm->cm_callable);
Benjamin Peterson01d7eba2012-02-19 01:10:25 -0500679 Py_CLEAR(cm->cm_dict);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000680 return 0;
Jeremy Hylton400d8ee2003-04-08 21:28:47 +0000681}
682
683
Tim Peters6d6c1a32001-08-02 04:15:00 +0000684static PyObject *
685cm_descr_get(PyObject *self, PyObject *obj, PyObject *type)
686{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000687 classmethod *cm = (classmethod *)self;
Tim Peters6d6c1a32001-08-02 04:15:00 +0000688
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000689 if (cm->cm_callable == NULL) {
690 PyErr_SetString(PyExc_RuntimeError,
691 "uninitialized classmethod object");
692 return NULL;
693 }
694 if (type == NULL)
695 type = (PyObject *)(Py_TYPE(obj));
696 return PyMethod_New(cm->cm_callable, type);
Tim Peters6d6c1a32001-08-02 04:15:00 +0000697}
698
699static int
700cm_init(PyObject *self, PyObject *args, PyObject *kwds)
701{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000702 classmethod *cm = (classmethod *)self;
703 PyObject *callable;
Tim Peters6d6c1a32001-08-02 04:15:00 +0000704
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000705 if (!_PyArg_NoKeywords("classmethod", kwds))
706 return -1;
Sylvain96480882017-07-09 05:45:06 +0200707 if (!PyArg_UnpackTuple(args, "classmethod", 1, 1, &callable))
708 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000709 Py_INCREF(callable);
710 cm->cm_callable = callable;
711 return 0;
Tim Peters6d6c1a32001-08-02 04:15:00 +0000712}
713
Raymond Hettinger2bcde142009-05-29 04:52:27 +0000714static PyMemberDef cm_memberlist[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000715 {"__func__", T_OBJECT, offsetof(classmethod, cm_callable), READONLY},
716 {NULL} /* Sentinel */
Raymond Hettinger2bcde142009-05-29 04:52:27 +0000717};
718
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500719static PyObject *
720cm_get___isabstractmethod__(classmethod *cm, void *closure)
721{
722 int res = _PyObject_IsAbstract(cm->cm_callable);
723 if (res == -1) {
724 return NULL;
725 }
726 else if (res) {
727 Py_RETURN_TRUE;
728 }
729 Py_RETURN_FALSE;
730}
731
732static PyGetSetDef cm_getsetlist[] = {
733 {"__isabstractmethod__",
734 (getter)cm_get___isabstractmethod__, NULL,
735 NULL,
736 NULL},
Benjamin Peterson23d7f122012-02-19 20:02:57 -0500737 {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict, NULL, NULL},
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500738 {NULL} /* Sentinel */
739};
740
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000741PyDoc_STRVAR(classmethod_doc,
Guido van Rossum33c1a882001-12-17 02:53:53 +0000742"classmethod(function) -> method\n\
743\n\
744Convert a function to be a class method.\n\
745\n\
746A class method receives the class as implicit first argument,\n\
747just like an instance method receives the instance.\n\
748To declare a class method, use this idiom:\n\
749\n\
750 class C:\n\
Martin Panter6d57fe12016-09-17 03:26:16 +0000751 @classmethod\n\
752 def f(cls, arg1, arg2, ...):\n\
753 ...\n\
Guido van Rossum33c1a882001-12-17 02:53:53 +0000754\n\
755It can be called either on the class (e.g. C.f()) or on an instance\n\
756(e.g. C().f()). The instance is ignored except for its class.\n\
757If a class method is called for a derived class, the derived class\n\
758object is passed as the implied first argument.\n\
Sjoerd Mullender564980b2001-12-17 11:39:56 +0000759\n\
Guido van Rossum33c1a882001-12-17 02:53:53 +0000760Class methods are different than C++ or Java static methods.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000761If you want those, see the staticmethod builtin.");
Guido van Rossum33c1a882001-12-17 02:53:53 +0000762
Tim Peters6d6c1a32001-08-02 04:15:00 +0000763PyTypeObject PyClassMethod_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000764 PyVarObject_HEAD_INIT(&PyType_Type, 0)
765 "classmethod",
766 sizeof(classmethod),
767 0,
768 (destructor)cm_dealloc, /* tp_dealloc */
769 0, /* tp_print */
770 0, /* tp_getattr */
771 0, /* tp_setattr */
772 0, /* tp_reserved */
773 0, /* tp_repr */
774 0, /* tp_as_number */
775 0, /* tp_as_sequence */
776 0, /* tp_as_mapping */
777 0, /* tp_hash */
778 0, /* tp_call */
779 0, /* tp_str */
Benjamin Peterson2cf936f2012-02-19 01:16:13 -0500780 0, /* tp_getattro */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000781 0, /* tp_setattro */
782 0, /* tp_as_buffer */
783 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
784 classmethod_doc, /* tp_doc */
785 (traverseproc)cm_traverse, /* tp_traverse */
786 (inquiry)cm_clear, /* tp_clear */
787 0, /* tp_richcompare */
788 0, /* tp_weaklistoffset */
789 0, /* tp_iter */
790 0, /* tp_iternext */
791 0, /* tp_methods */
792 cm_memberlist, /* tp_members */
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500793 cm_getsetlist, /* tp_getset */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000794 0, /* tp_base */
795 0, /* tp_dict */
796 cm_descr_get, /* tp_descr_get */
797 0, /* tp_descr_set */
Benjamin Peterson01d7eba2012-02-19 01:10:25 -0500798 offsetof(classmethod, cm_dict), /* tp_dictoffset */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000799 cm_init, /* tp_init */
800 PyType_GenericAlloc, /* tp_alloc */
801 PyType_GenericNew, /* tp_new */
802 PyObject_GC_Del, /* tp_free */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000803};
804
805PyObject *
806PyClassMethod_New(PyObject *callable)
807{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000808 classmethod *cm = (classmethod *)
809 PyType_GenericAlloc(&PyClassMethod_Type, 0);
810 if (cm != NULL) {
811 Py_INCREF(callable);
812 cm->cm_callable = callable;
813 }
814 return (PyObject *)cm;
Tim Peters6d6c1a32001-08-02 04:15:00 +0000815}
816
817
818/* Static method object */
819
820/* A static method does not receive an implicit first argument.
821 To declare a static method, use this idiom:
822
823 class C:
Martin Panter6d57fe12016-09-17 03:26:16 +0000824 @staticmethod
825 def f(arg1, arg2, ...):
826 ...
Tim Peters6d6c1a32001-08-02 04:15:00 +0000827
828 It can be called either on the class (e.g. C.f()) or on an instance
829 (e.g. C().f()); the instance is ignored except for its class.
830
831 Static methods in Python are similar to those found in Java or C++.
832 For a more advanced concept, see class methods above.
833*/
834
835typedef struct {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000836 PyObject_HEAD
837 PyObject *sm_callable;
Benjamin Peterson01d7eba2012-02-19 01:10:25 -0500838 PyObject *sm_dict;
Tim Peters6d6c1a32001-08-02 04:15:00 +0000839} staticmethod;
840
841static void
842sm_dealloc(staticmethod *sm)
843{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000844 _PyObject_GC_UNTRACK((PyObject *)sm);
845 Py_XDECREF(sm->sm_callable);
Benjamin Peterson01d7eba2012-02-19 01:10:25 -0500846 Py_XDECREF(sm->sm_dict);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000847 Py_TYPE(sm)->tp_free((PyObject *)sm);
Tim Peters6d6c1a32001-08-02 04:15:00 +0000848}
849
Jeremy Hylton400d8ee2003-04-08 21:28:47 +0000850static int
851sm_traverse(staticmethod *sm, visitproc visit, void *arg)
852{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000853 Py_VISIT(sm->sm_callable);
Benjamin Peterson01d7eba2012-02-19 01:10:25 -0500854 Py_VISIT(sm->sm_dict);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000855 return 0;
Jeremy Hylton400d8ee2003-04-08 21:28:47 +0000856}
857
858static int
859sm_clear(staticmethod *sm)
860{
Benjamin Peterson496c53d2012-02-19 01:11:56 -0500861 Py_CLEAR(sm->sm_callable);
Benjamin Peterson01d7eba2012-02-19 01:10:25 -0500862 Py_CLEAR(sm->sm_dict);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000863 return 0;
Jeremy Hylton400d8ee2003-04-08 21:28:47 +0000864}
865
Tim Peters6d6c1a32001-08-02 04:15:00 +0000866static PyObject *
867sm_descr_get(PyObject *self, PyObject *obj, PyObject *type)
868{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000869 staticmethod *sm = (staticmethod *)self;
Tim Peters6d6c1a32001-08-02 04:15:00 +0000870
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000871 if (sm->sm_callable == NULL) {
872 PyErr_SetString(PyExc_RuntimeError,
873 "uninitialized staticmethod object");
874 return NULL;
875 }
876 Py_INCREF(sm->sm_callable);
877 return sm->sm_callable;
Tim Peters6d6c1a32001-08-02 04:15:00 +0000878}
879
880static int
881sm_init(PyObject *self, PyObject *args, PyObject *kwds)
882{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000883 staticmethod *sm = (staticmethod *)self;
884 PyObject *callable;
Tim Peters6d6c1a32001-08-02 04:15:00 +0000885
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000886 if (!_PyArg_NoKeywords("staticmethod", kwds))
887 return -1;
Sylvain96480882017-07-09 05:45:06 +0200888 if (!PyArg_UnpackTuple(args, "staticmethod", 1, 1, &callable))
889 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000890 Py_INCREF(callable);
891 sm->sm_callable = callable;
892 return 0;
Tim Peters6d6c1a32001-08-02 04:15:00 +0000893}
894
Raymond Hettinger2bcde142009-05-29 04:52:27 +0000895static PyMemberDef sm_memberlist[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000896 {"__func__", T_OBJECT, offsetof(staticmethod, sm_callable), READONLY},
897 {NULL} /* Sentinel */
Raymond Hettinger2bcde142009-05-29 04:52:27 +0000898};
899
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500900static PyObject *
901sm_get___isabstractmethod__(staticmethod *sm, void *closure)
902{
903 int res = _PyObject_IsAbstract(sm->sm_callable);
904 if (res == -1) {
905 return NULL;
906 }
907 else if (res) {
908 Py_RETURN_TRUE;
909 }
910 Py_RETURN_FALSE;
911}
912
913static PyGetSetDef sm_getsetlist[] = {
914 {"__isabstractmethod__",
915 (getter)sm_get___isabstractmethod__, NULL,
916 NULL,
917 NULL},
Benjamin Peterson23d7f122012-02-19 20:02:57 -0500918 {"__dict__", PyObject_GenericGetDict, PyObject_GenericSetDict, NULL, NULL},
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500919 {NULL} /* Sentinel */
920};
921
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000922PyDoc_STRVAR(staticmethod_doc,
Guido van Rossum33c1a882001-12-17 02:53:53 +0000923"staticmethod(function) -> method\n\
924\n\
925Convert a function to be a static method.\n\
926\n\
927A static method does not receive an implicit first argument.\n\
928To declare a static method, use this idiom:\n\
929\n\
930 class C:\n\
Martin Panter6d57fe12016-09-17 03:26:16 +0000931 @staticmethod\n\
932 def f(arg1, arg2, ...):\n\
933 ...\n\
Guido van Rossum33c1a882001-12-17 02:53:53 +0000934\n\
935It can be called either on the class (e.g. C.f()) or on an instance\n\
936(e.g. C().f()). The instance is ignored except for its class.\n\
937\n\
938Static methods in Python are similar to those found in Java or C++.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000939For a more advanced concept, see the classmethod builtin.");
Guido van Rossum33c1a882001-12-17 02:53:53 +0000940
Tim Peters6d6c1a32001-08-02 04:15:00 +0000941PyTypeObject PyStaticMethod_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000942 PyVarObject_HEAD_INIT(&PyType_Type, 0)
943 "staticmethod",
944 sizeof(staticmethod),
945 0,
946 (destructor)sm_dealloc, /* tp_dealloc */
947 0, /* tp_print */
948 0, /* tp_getattr */
949 0, /* tp_setattr */
950 0, /* tp_reserved */
951 0, /* tp_repr */
952 0, /* tp_as_number */
953 0, /* tp_as_sequence */
954 0, /* tp_as_mapping */
955 0, /* tp_hash */
956 0, /* tp_call */
957 0, /* tp_str */
Benjamin Peterson01d7eba2012-02-19 01:10:25 -0500958 0, /* tp_getattro */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000959 0, /* tp_setattro */
960 0, /* tp_as_buffer */
961 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
962 staticmethod_doc, /* tp_doc */
963 (traverseproc)sm_traverse, /* tp_traverse */
964 (inquiry)sm_clear, /* tp_clear */
965 0, /* tp_richcompare */
966 0, /* tp_weaklistoffset */
967 0, /* tp_iter */
968 0, /* tp_iternext */
969 0, /* tp_methods */
970 sm_memberlist, /* tp_members */
Benjamin Petersonbfebb7b2011-12-15 15:34:02 -0500971 sm_getsetlist, /* tp_getset */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000972 0, /* tp_base */
973 0, /* tp_dict */
974 sm_descr_get, /* tp_descr_get */
975 0, /* tp_descr_set */
Benjamin Peterson01d7eba2012-02-19 01:10:25 -0500976 offsetof(staticmethod, sm_dict), /* tp_dictoffset */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000977 sm_init, /* tp_init */
978 PyType_GenericAlloc, /* tp_alloc */
979 PyType_GenericNew, /* tp_new */
980 PyObject_GC_Del, /* tp_free */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000981};
982
983PyObject *
984PyStaticMethod_New(PyObject *callable)
985{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000986 staticmethod *sm = (staticmethod *)
987 PyType_GenericAlloc(&PyStaticMethod_Type, 0);
988 if (sm != NULL) {
989 Py_INCREF(callable);
990 sm->sm_callable = callable;
991 }
992 return (PyObject *)sm;
Tim Peters6d6c1a32001-08-02 04:15:00 +0000993}