blob: 956cbbc1b78e8ba9a87b0ef528db4fbea904e131 [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"
Tim Peters6d6c1a32001-08-02 04:15:00 +00006#include "eval.h"
Guido van Rossum3f5da241990-12-20 15:06:42 +00007#include "structmember.h"
Guido van Rossum85a5fbb1990-10-14 12:07:46 +00008
Guido van Rossumc0b618a1997-05-02 03:12:38 +00009PyObject *
Fred Drakeee238b92000-07-09 06:03:25 +000010PyFunction_New(PyObject *code, PyObject *globals)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000011{
Neil Schemenauere83c00e2001-08-29 23:54:21 +000012 PyFunctionObject *op = PyObject_GC_New(PyFunctionObject,
Guido van Rossumc0b618a1997-05-02 03:12:38 +000013 &PyFunction_Type);
Martin v. Löwis321c9ab2004-03-23 18:40:15 +000014 static PyObject *__name__ = 0;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000015 if (op != NULL) {
Guido van Rossumc0b618a1997-05-02 03:12:38 +000016 PyObject *doc;
17 PyObject *consts;
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +000018 PyObject *module;
Fred Drakedb81e8d2001-03-23 04:19:27 +000019 op->func_weakreflist = NULL;
Guido van Rossumc0b618a1997-05-02 03:12:38 +000020 Py_INCREF(code);
Guido van Rossum846e4311990-11-18 17:44:06 +000021 op->func_code = code;
Guido van Rossumc0b618a1997-05-02 03:12:38 +000022 Py_INCREF(globals);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000023 op->func_globals = globals;
Guido van Rossumc0b618a1997-05-02 03:12:38 +000024 op->func_name = ((PyCodeObject *)code)->co_name;
25 Py_INCREF(op->func_name);
Guido van Rossum2271bf71995-07-18 14:30:34 +000026 op->func_defaults = NULL; /* No default arguments */
Guido van Rossum4f72a782006-10-27 23:31:49 +000027 op->func_kwdefaults = NULL; /* No keyword only defaults */
Jeremy Hylton64949cb2001-01-25 20:06:59 +000028 op->func_closure = NULL;
Guido van Rossumc0b618a1997-05-02 03:12:38 +000029 consts = ((PyCodeObject *)code)->co_consts;
30 if (PyTuple_Size(consts) >= 1) {
31 doc = PyTuple_GetItem(consts, 0);
Guido van Rossumec5b7762000-04-27 20:14:13 +000032 if (!PyString_Check(doc) && !PyUnicode_Check(doc))
Guido van Rossumc0b618a1997-05-02 03:12:38 +000033 doc = Py_None;
Guido van Rossum5bd38051995-01-07 12:01:30 +000034 }
35 else
Guido van Rossumc0b618a1997-05-02 03:12:38 +000036 doc = Py_None;
37 Py_INCREF(doc);
Guido van Rossum5bd38051995-01-07 12:01:30 +000038 op->func_doc = doc;
Barry Warsawd6a9e842001-01-15 20:40:19 +000039 op->func_dict = NULL;
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +000040 op->func_module = NULL;
Neal Norwitzc1505362006-12-28 06:47:50 +000041 op->func_annotations = NULL;
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +000042
43 /* __module__: If module name is in globals, use it.
44 Otherwise, use None.
45 */
Martin v. Löwis321c9ab2004-03-23 18:40:15 +000046 if (!__name__) {
47 __name__ = PyString_InternFromString("__name__");
48 if (!__name__) {
49 Py_DECREF(op);
50 return NULL;
51 }
52 }
53 module = PyDict_GetItem(globals, __name__);
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +000054 if (module) {
55 Py_INCREF(module);
56 op->func_module = module;
57 }
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000058 }
Barry Warsawd6a9e842001-01-15 20:40:19 +000059 else
60 return NULL;
Neil Schemenauere83c00e2001-08-29 23:54:21 +000061 _PyObject_GC_TRACK(op);
Guido van Rossumc0b618a1997-05-02 03:12:38 +000062 return (PyObject *)op;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000063}
64
Guido van Rossumc0b618a1997-05-02 03:12:38 +000065PyObject *
Fred Drakeee238b92000-07-09 06:03:25 +000066PyFunction_GetCode(PyObject *op)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000067{
Guido van Rossumc0b618a1997-05-02 03:12:38 +000068 if (!PyFunction_Check(op)) {
69 PyErr_BadInternalCall();
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000070 return NULL;
71 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +000072 return ((PyFunctionObject *) op) -> func_code;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000073}
74
Guido van Rossumc0b618a1997-05-02 03:12:38 +000075PyObject *
Fred Drakeee238b92000-07-09 06:03:25 +000076PyFunction_GetGlobals(PyObject *op)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000077{
Guido van Rossumc0b618a1997-05-02 03:12:38 +000078 if (!PyFunction_Check(op)) {
79 PyErr_BadInternalCall();
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000080 return NULL;
81 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +000082 return ((PyFunctionObject *) op) -> func_globals;
Guido van Rossum85a5fbb1990-10-14 12:07:46 +000083}
84
Guido van Rossumc0b618a1997-05-02 03:12:38 +000085PyObject *
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +000086PyFunction_GetModule(PyObject *op)
87{
88 if (!PyFunction_Check(op)) {
89 PyErr_BadInternalCall();
90 return NULL;
91 }
92 return ((PyFunctionObject *) op) -> func_module;
93}
94
95PyObject *
Fred Drakeee238b92000-07-09 06:03:25 +000096PyFunction_GetDefaults(PyObject *op)
Guido van Rossum1d5735e1994-08-30 08:27:36 +000097{
Guido van Rossumc0b618a1997-05-02 03:12:38 +000098 if (!PyFunction_Check(op)) {
99 PyErr_BadInternalCall();
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000100 return NULL;
101 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000102 return ((PyFunctionObject *) op) -> func_defaults;
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000103}
104
105int
Fred Drakeee238b92000-07-09 06:03:25 +0000106PyFunction_SetDefaults(PyObject *op, PyObject *defaults)
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000107{
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000108 if (!PyFunction_Check(op)) {
109 PyErr_BadInternalCall();
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000110 return -1;
111 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000112 if (defaults == Py_None)
Guido van Rossum2271bf71995-07-18 14:30:34 +0000113 defaults = NULL;
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000114 else if (defaults && PyTuple_Check(defaults)) {
115 Py_INCREF(defaults);
Guido van Rossum1109fbc1998-04-10 22:16:39 +0000116 }
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000117 else {
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000118 PyErr_SetString(PyExc_SystemError, "non-tuple default args");
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000119 return -1;
120 }
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000121 Py_XDECREF(((PyFunctionObject *) op) -> func_defaults);
122 ((PyFunctionObject *) op) -> func_defaults = defaults;
Guido van Rossum1d5735e1994-08-30 08:27:36 +0000123 return 0;
124}
125
Jeremy Hylton64949cb2001-01-25 20:06:59 +0000126PyObject *
Guido van Rossum4f72a782006-10-27 23:31:49 +0000127PyFunction_GetKwDefaults(PyObject *op)
128{
129 if (!PyFunction_Check(op)) {
130 PyErr_BadInternalCall();
131 return NULL;
132 }
133 return ((PyFunctionObject *) op) -> func_kwdefaults;
134}
135
136int
137PyFunction_SetKwDefaults(PyObject *op, PyObject *defaults)
138{
139 if (!PyFunction_Check(op)) {
140 PyErr_BadInternalCall();
141 return -1;
142 }
143 if (defaults == Py_None)
144 defaults = NULL;
145 else if (defaults && PyDict_Check(defaults)) {
146 Py_INCREF(defaults);
147 }
148 else {
149 PyErr_SetString(PyExc_SystemError,
150 "non-dict keyword only default args");
151 return -1;
152 }
153 Py_XDECREF(((PyFunctionObject *)op) -> func_kwdefaults);
154 ((PyFunctionObject *) op) -> func_kwdefaults = defaults;
155 return 0;
156}
157
158PyObject *
Jeremy Hylton64949cb2001-01-25 20:06:59 +0000159PyFunction_GetClosure(PyObject *op)
160{
161 if (!PyFunction_Check(op)) {
162 PyErr_BadInternalCall();
163 return NULL;
164 }
165 return ((PyFunctionObject *) op) -> func_closure;
166}
167
168int
169PyFunction_SetClosure(PyObject *op, PyObject *closure)
170{
171 if (!PyFunction_Check(op)) {
172 PyErr_BadInternalCall();
173 return -1;
174 }
175 if (closure == Py_None)
176 closure = NULL;
177 else if (PyTuple_Check(closure)) {
Thomas Wouters0e3f5912006-08-11 14:57:12 +0000178 Py_INCREF(closure);
Jeremy Hylton64949cb2001-01-25 20:06:59 +0000179 }
180 else {
Jeremy Hylton3e0055f2005-10-20 19:59:25 +0000181 PyErr_Format(PyExc_SystemError,
182 "expected tuple for closure, got '%.100s'",
183 closure->ob_type->tp_name);
Jeremy Hylton64949cb2001-01-25 20:06:59 +0000184 return -1;
185 }
186 Py_XDECREF(((PyFunctionObject *) op) -> func_closure);
187 ((PyFunctionObject *) op) -> func_closure = closure;
188 return 0;
189}
190
Neal Norwitzc1505362006-12-28 06:47:50 +0000191PyObject *
192PyFunction_GetAnnotations(PyObject *op)
193{
194 if (!PyFunction_Check(op)) {
195 PyErr_BadInternalCall();
196 return NULL;
197 }
198 return ((PyFunctionObject *) op) -> func_annotations;
199}
200
201int
202PyFunction_SetAnnotations(PyObject *op, PyObject *annotations)
203{
204 if (!PyFunction_Check(op)) {
205 PyErr_BadInternalCall();
206 return -1;
207 }
208 if (annotations == Py_None)
209 annotations = NULL;
210 else if (annotations && PyDict_Check(annotations)) {
211 Py_INCREF(annotations);
212 }
213 else {
214 PyErr_SetString(PyExc_SystemError,
215 "non-dict annotations");
216 return -1;
217 }
218 Py_XDECREF(((PyFunctionObject *)op) -> func_annotations);
219 ((PyFunctionObject *) op) -> func_annotations = annotations;
220 return 0;
221}
222
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000223/* Methods */
224
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000225#define OFF(x) offsetof(PyFunctionObject, x)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000226
Guido van Rossum6f799372001-09-20 20:46:19 +0000227static PyMemberDef func_memberlist[] = {
Neal Norwitz221085d2007-02-25 20:55:47 +0000228 {"__closure__", T_OBJECT, OFF(func_closure),
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000229 RESTRICTED|READONLY},
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000230 {"__doc__", T_OBJECT, OFF(func_doc), WRITE_RESTRICTED},
Neal Norwitz221085d2007-02-25 20:55:47 +0000231 {"__globals__", T_OBJECT, OFF(func_globals),
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000232 RESTRICTED|READONLY},
Guido van Rossum6b29c012003-02-18 17:18:35 +0000233 {"__module__", T_OBJECT, OFF(func_module), WRITE_RESTRICTED},
Barry Warsaw0395fdd2001-01-19 19:53:29 +0000234 {NULL} /* Sentinel */
Guido van Rossum3f5da241990-12-20 15:06:42 +0000235};
236
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000237static int
238restricted(void)
Guido van Rossum3f5da241990-12-20 15:06:42 +0000239{
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000240 if (!PyEval_GetRestricted())
241 return 0;
242 PyErr_SetString(PyExc_RuntimeError,
243 "function attributes not accessible in restricted mode");
244 return 1;
245}
246
247static PyObject *
248func_get_dict(PyFunctionObject *op)
249{
250 if (restricted())
Guido van Rossum10393b11995-01-10 10:39:49 +0000251 return NULL;
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000252 if (op->func_dict == NULL) {
253 op->func_dict = PyDict_New();
254 if (op->func_dict == NULL)
Barry Warsaw142865c2001-08-14 18:23:58 +0000255 return NULL;
256 }
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000257 Py_INCREF(op->func_dict);
258 return op->func_dict;
Guido van Rossum3f5da241990-12-20 15:06:42 +0000259}
260
Guido van Rossum0dabace1998-05-22 00:55:34 +0000261static int
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000262func_set_dict(PyFunctionObject *op, PyObject *value)
Guido van Rossum0dabace1998-05-22 00:55:34 +0000263{
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000264 PyObject *tmp;
Barry Warsawd6a9e842001-01-15 20:40:19 +0000265
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000266 if (restricted())
267 return -1;
268 /* It is illegal to del f.func_dict */
269 if (value == NULL) {
270 PyErr_SetString(PyExc_TypeError,
271 "function's dictionary may not be deleted");
Guido van Rossum0dabace1998-05-22 00:55:34 +0000272 return -1;
273 }
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000274 /* Can only set func_dict to a dictionary */
275 if (!PyDict_Check(value)) {
276 PyErr_SetString(PyExc_TypeError,
Barry Warsaw142865c2001-08-14 18:23:58 +0000277 "setting function's dictionary to a non-dict");
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000278 return -1;
Barry Warsawd6a9e842001-01-15 20:40:19 +0000279 }
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000280 tmp = op->func_dict;
281 Py_INCREF(value);
282 op->func_dict = value;
283 Py_XDECREF(tmp);
284 return 0;
Guido van Rossum0dabace1998-05-22 00:55:34 +0000285}
286
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000287static PyObject *
288func_get_code(PyFunctionObject *op)
289{
290 if (restricted())
291 return NULL;
292 Py_INCREF(op->func_code);
293 return op->func_code;
294}
295
296static int
297func_set_code(PyFunctionObject *op, PyObject *value)
298{
299 PyObject *tmp;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000300 Py_ssize_t nfree, nclosure;
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000301
302 if (restricted())
303 return -1;
304 /* Not legal to del f.func_code or to set it to anything
305 * other than a code object. */
306 if (value == NULL || !PyCode_Check(value)) {
307 PyErr_SetString(PyExc_TypeError,
Neal Norwitz221085d2007-02-25 20:55:47 +0000308 "__code__ must be set to a code object");
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000309 return -1;
310 }
Armin Rigo89a39462004-10-28 16:32:00 +0000311 nfree = PyCode_GetNumFree((PyCodeObject *)value);
312 nclosure = (op->func_closure == NULL ? 0 :
313 PyTuple_GET_SIZE(op->func_closure));
314 if (nclosure != nfree) {
315 PyErr_Format(PyExc_ValueError,
Martin v. Löwis2c95cc62006-02-16 06:54:25 +0000316 "%s() requires a code object with %zd free vars,"
317 " not %zd",
Armin Rigo89a39462004-10-28 16:32:00 +0000318 PyString_AsString(op->func_name),
Martin v. Löwise0e89f72006-02-16 06:59:22 +0000319 nclosure, nfree);
Armin Rigo89a39462004-10-28 16:32:00 +0000320 return -1;
321 }
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000322 tmp = op->func_code;
323 Py_INCREF(value);
324 op->func_code = value;
325 Py_DECREF(tmp);
326 return 0;
327}
328
329static PyObject *
Michael W. Hudson5e897952004-08-12 18:12:44 +0000330func_get_name(PyFunctionObject *op)
331{
Michael W. Hudson5e897952004-08-12 18:12:44 +0000332 Py_INCREF(op->func_name);
333 return op->func_name;
334}
335
336static int
337func_set_name(PyFunctionObject *op, PyObject *value)
338{
339 PyObject *tmp;
340
341 if (restricted())
342 return -1;
343 /* Not legal to del f.func_name or to set it to anything
344 * other than a string object. */
345 if (value == NULL || !PyString_Check(value)) {
346 PyErr_SetString(PyExc_TypeError,
Neal Norwitz221085d2007-02-25 20:55:47 +0000347 "__name__ must be set to a string object");
Michael W. Hudson5e897952004-08-12 18:12:44 +0000348 return -1;
349 }
350 tmp = op->func_name;
351 Py_INCREF(value);
352 op->func_name = value;
353 Py_DECREF(tmp);
354 return 0;
355}
356
357static PyObject *
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000358func_get_defaults(PyFunctionObject *op)
359{
360 if (restricted())
361 return NULL;
362 if (op->func_defaults == NULL) {
363 Py_INCREF(Py_None);
364 return Py_None;
365 }
366 Py_INCREF(op->func_defaults);
367 return op->func_defaults;
368}
369
370static int
371func_set_defaults(PyFunctionObject *op, PyObject *value)
372{
373 PyObject *tmp;
374
375 if (restricted())
376 return -1;
377 /* Legal to del f.func_defaults.
378 * Can only set func_defaults to NULL or a tuple. */
379 if (value == Py_None)
380 value = NULL;
381 if (value != NULL && !PyTuple_Check(value)) {
382 PyErr_SetString(PyExc_TypeError,
Neal Norwitz221085d2007-02-25 20:55:47 +0000383 "__defaults__ must be set to a tuple object");
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000384 return -1;
385 }
386 tmp = op->func_defaults;
387 Py_XINCREF(value);
388 op->func_defaults = value;
389 Py_XDECREF(tmp);
390 return 0;
391}
392
Guido van Rossum4f72a782006-10-27 23:31:49 +0000393static PyObject *
394func_get_kwdefaults(PyFunctionObject *op)
395{
396 if (restricted())
397 return NULL;
398 if (op->func_kwdefaults == NULL) {
399 Py_INCREF(Py_None);
400 return Py_None;
401 }
402 Py_INCREF(op->func_kwdefaults);
403 return op->func_kwdefaults;
404}
405
406static int
407func_set_kwdefaults(PyFunctionObject *op, PyObject *value)
408{
409 PyObject *tmp;
410
411 if (restricted())
412 return -1;
413
414 if (value == Py_None)
415 value = NULL;
416 /* Legal to del f.func_defaults.
417 * Can only set func_kwdefaults to NULL or a dict. */
418 if (value != NULL && !PyDict_Check(value)) {
419 PyErr_SetString(PyExc_TypeError,
Neal Norwitz221085d2007-02-25 20:55:47 +0000420 "__kwdefaults__ must be set to a dict object");
Guido van Rossum4f72a782006-10-27 23:31:49 +0000421 return -1;
422 }
423 tmp = op->func_kwdefaults;
424 Py_XINCREF(value);
425 op->func_kwdefaults = value;
426 Py_XDECREF(tmp);
427 return 0;
428}
429
Neal Norwitzc1505362006-12-28 06:47:50 +0000430static PyObject *
431func_get_annotations(PyFunctionObject *op)
432{
433 if (op->func_annotations == NULL) {
434 op->func_annotations = PyDict_New();
435 if (op->func_annotations == NULL)
436 return NULL;
437 }
438 Py_INCREF(op->func_annotations);
439 return op->func_annotations;
440}
441
442static int
443func_set_annotations(PyFunctionObject *op, PyObject *value)
444{
445 PyObject *tmp;
446
447 if (value == Py_None)
448 value = NULL;
449 /* Legal to del f.func_annotations.
450 * Can only set func_annotations to NULL (through C api)
451 * or a dict. */
452 if (value != NULL && !PyDict_Check(value)) {
453 PyErr_SetString(PyExc_TypeError,
Neal Norwitz221085d2007-02-25 20:55:47 +0000454 "__annotations__ must be set to a dict object");
Neal Norwitzc1505362006-12-28 06:47:50 +0000455 return -1;
456 }
457 tmp = op->func_annotations;
458 Py_XINCREF(value);
459 op->func_annotations = value;
460 Py_XDECREF(tmp);
461 return 0;
462}
463
Guido van Rossum32d34c82001-09-20 21:45:26 +0000464static PyGetSetDef func_getsetlist[] = {
Neal Norwitz221085d2007-02-25 20:55:47 +0000465 {"__code__", (getter)func_get_code, (setter)func_set_code},
466 {"__defaults__", (getter)func_get_defaults,
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000467 (setter)func_set_defaults},
Neal Norwitz221085d2007-02-25 20:55:47 +0000468 {"__kwdefaults__", (getter)func_get_kwdefaults,
Guido van Rossum4f72a782006-10-27 23:31:49 +0000469 (setter)func_set_kwdefaults},
Neal Norwitz221085d2007-02-25 20:55:47 +0000470 {"__annotations__", (getter)func_get_annotations,
Neal Norwitzc1505362006-12-28 06:47:50 +0000471 (setter)func_set_annotations},
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000472 {"__dict__", (getter)func_get_dict, (setter)func_set_dict},
Michael W. Hudson5e897952004-08-12 18:12:44 +0000473 {"__name__", (getter)func_get_name, (setter)func_set_name},
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000474 {NULL} /* Sentinel */
475};
476
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000477PyDoc_STRVAR(func_doc,
Jeremy Hyltondf3f7932002-07-11 18:30:27 +0000478"function(code, globals[, name[, argdefs[, closure]]])\n\
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000479\n\
480Create a function object from a code object and a dictionary.\n\
481The optional name string overrides the name from the code object.\n\
Jeremy Hyltondf3f7932002-07-11 18:30:27 +0000482The optional argdefs tuple specifies the default argument values.\n\
483The optional closure tuple supplies the bindings for free variables.");
484
485/* func_new() maintains the following invariants for closures. The
486 closure must correspond to the free variables of the code object.
487
488 if len(code.co_freevars) == 0:
489 closure = NULL
490 else:
491 len(closure) == len(code.co_freevars)
492 for every elt in closure, type(elt) == cell
493*/
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000494
495static PyObject *
496func_new(PyTypeObject* type, PyObject* args, PyObject* kw)
497{
Jeremy Hyltondf3f7932002-07-11 18:30:27 +0000498 PyCodeObject *code;
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000499 PyObject *globals;
500 PyObject *name = Py_None;
501 PyObject *defaults = Py_None;
Jeremy Hyltondf3f7932002-07-11 18:30:27 +0000502 PyObject *closure = Py_None;
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000503 PyFunctionObject *newfunc;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000504 Py_ssize_t nfree, nclosure;
Martin v. Löwis15e62742006-02-27 16:46:16 +0000505 static char *kwlist[] = {"code", "globals", "name",
Raymond Hettinger86578452003-05-06 09:01:41 +0000506 "argdefs", "closure", 0};
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000507
Raymond Hettinger86578452003-05-06 09:01:41 +0000508 if (!PyArg_ParseTupleAndKeywords(args, kw, "O!O!|OOO:function",
509 kwlist,
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000510 &PyCode_Type, &code,
511 &PyDict_Type, &globals,
Jeremy Hyltondf3f7932002-07-11 18:30:27 +0000512 &name, &defaults, &closure))
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000513 return NULL;
514 if (name != Py_None && !PyString_Check(name)) {
515 PyErr_SetString(PyExc_TypeError,
516 "arg 3 (name) must be None or string");
517 return NULL;
518 }
Jeremy Hyltondf3f7932002-07-11 18:30:27 +0000519 if (defaults != Py_None && !PyTuple_Check(defaults)) {
520 PyErr_SetString(PyExc_TypeError,
521 "arg 4 (defaults) must be None or tuple");
522 return NULL;
523 }
524 nfree = PyTuple_GET_SIZE(code->co_freevars);
525 if (!PyTuple_Check(closure)) {
526 if (nfree && closure == Py_None) {
527 PyErr_SetString(PyExc_TypeError,
528 "arg 5 (closure) must be tuple");
529 return NULL;
530 }
531 else if (closure != Py_None) {
532 PyErr_SetString(PyExc_TypeError,
533 "arg 5 (closure) must be None or tuple");
534 return NULL;
535 }
536 }
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000537
Jeremy Hyltondf3f7932002-07-11 18:30:27 +0000538 /* check that the closure is well-formed */
539 nclosure = closure == Py_None ? 0 : PyTuple_GET_SIZE(closure);
540 if (nfree != nclosure)
541 return PyErr_Format(PyExc_ValueError,
Martin v. Löwis2c95cc62006-02-16 06:54:25 +0000542 "%s requires closure of length %zd, not %zd",
Jeremy Hyltondf3f7932002-07-11 18:30:27 +0000543 PyString_AS_STRING(code->co_name),
Martin v. Löwise0e89f72006-02-16 06:59:22 +0000544 nfree, nclosure);
Jeremy Hyltondf3f7932002-07-11 18:30:27 +0000545 if (nclosure) {
Martin v. Löwis18e16552006-02-15 17:27:45 +0000546 Py_ssize_t i;
Jeremy Hyltondf3f7932002-07-11 18:30:27 +0000547 for (i = 0; i < nclosure; i++) {
548 PyObject *o = PyTuple_GET_ITEM(closure, i);
549 if (!PyCell_Check(o)) {
550 return PyErr_Format(PyExc_TypeError,
551 "arg 5 (closure) expected cell, found %s",
552 o->ob_type->tp_name);
553 }
554 }
555 }
556
557 newfunc = (PyFunctionObject *)PyFunction_New((PyObject *)code,
558 globals);
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000559 if (newfunc == NULL)
560 return NULL;
Jeremy Hyltondf3f7932002-07-11 18:30:27 +0000561
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000562 if (name != Py_None) {
Jeremy Hyltondf3f7932002-07-11 18:30:27 +0000563 Py_INCREF(name);
564 Py_DECREF(newfunc->func_name);
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000565 newfunc->func_name = name;
566 }
567 if (defaults != Py_None) {
Jeremy Hyltondf3f7932002-07-11 18:30:27 +0000568 Py_INCREF(defaults);
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000569 newfunc->func_defaults = defaults;
570 }
Jeremy Hyltondf3f7932002-07-11 18:30:27 +0000571 if (closure != Py_None) {
572 Py_INCREF(closure);
573 newfunc->func_closure = closure;
574 }
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000575
576 return (PyObject *)newfunc;
577}
578
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000579static void
Fred Drakeee238b92000-07-09 06:03:25 +0000580func_dealloc(PyFunctionObject *op)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000581{
Neil Schemenauere83c00e2001-08-29 23:54:21 +0000582 _PyObject_GC_UNTRACK(op);
Fred Drakec916f5a2001-10-26 17:56:51 +0000583 if (op->func_weakreflist != NULL)
584 PyObject_ClearWeakRefs((PyObject *) op);
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000585 Py_DECREF(op->func_code);
586 Py_DECREF(op->func_globals);
Jeremy Hylton4f0dcc92003-01-31 18:33:18 +0000587 Py_XDECREF(op->func_module);
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000588 Py_DECREF(op->func_name);
589 Py_XDECREF(op->func_defaults);
590 Py_XDECREF(op->func_doc);
Barry Warsawd6a9e842001-01-15 20:40:19 +0000591 Py_XDECREF(op->func_dict);
Jeremy Hyltona52e8fe2001-03-01 06:06:37 +0000592 Py_XDECREF(op->func_closure);
Neal Norwitzc1505362006-12-28 06:47:50 +0000593 Py_XDECREF(op->func_annotations);
Neil Schemenauere83c00e2001-08-29 23:54:21 +0000594 PyObject_GC_Del(op);
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000595}
596
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000597static PyObject*
Fred Drakeee238b92000-07-09 06:03:25 +0000598func_repr(PyFunctionObject *op)
Guido van Rossum9bfef441993-03-29 10:43:31 +0000599{
Barry Warsaw7ce36942001-08-24 18:34:26 +0000600 return PyString_FromFormat("<function %s at %p>",
601 PyString_AsString(op->func_name),
602 op);
Guido van Rossum9bfef441993-03-29 10:43:31 +0000603}
604
Guido van Rossum2e8f8a31993-11-05 10:20:10 +0000605static int
Jeremy Hylton8caad492000-06-23 14:18:11 +0000606func_traverse(PyFunctionObject *f, visitproc visit, void *arg)
607{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000608 Py_VISIT(f->func_code);
609 Py_VISIT(f->func_globals);
610 Py_VISIT(f->func_module);
611 Py_VISIT(f->func_defaults);
612 Py_VISIT(f->func_doc);
613 Py_VISIT(f->func_name);
614 Py_VISIT(f->func_dict);
615 Py_VISIT(f->func_closure);
Neal Norwitzc1505362006-12-28 06:47:50 +0000616 Py_VISIT(f->func_annotations);
Jeremy Hylton8caad492000-06-23 14:18:11 +0000617 return 0;
618}
619
Tim Peters6d6c1a32001-08-02 04:15:00 +0000620static PyObject *
621function_call(PyObject *func, PyObject *arg, PyObject *kw)
622{
623 PyObject *result;
624 PyObject *argdefs;
625 PyObject **d, **k;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000626 Py_ssize_t nk, nd;
Tim Peters6d6c1a32001-08-02 04:15:00 +0000627
628 argdefs = PyFunction_GET_DEFAULTS(func);
629 if (argdefs != NULL && PyTuple_Check(argdefs)) {
630 d = &PyTuple_GET_ITEM((PyTupleObject *)argdefs, 0);
631 nd = PyTuple_Size(argdefs);
632 }
633 else {
634 d = NULL;
635 nd = 0;
636 }
637
638 if (kw != NULL && PyDict_Check(kw)) {
Martin v. Löwis18e16552006-02-15 17:27:45 +0000639 Py_ssize_t pos, i;
Tim Peters6d6c1a32001-08-02 04:15:00 +0000640 nk = PyDict_Size(kw);
641 k = PyMem_NEW(PyObject *, 2*nk);
642 if (k == NULL) {
643 PyErr_NoMemory();
Tim Peters6d6c1a32001-08-02 04:15:00 +0000644 return NULL;
645 }
646 pos = i = 0;
647 while (PyDict_Next(kw, &pos, &k[i], &k[i+1]))
648 i += 2;
649 nk = i/2;
650 /* XXX This is broken if the caller deletes dict items! */
651 }
652 else {
653 k = NULL;
654 nk = 0;
655 }
656
657 result = PyEval_EvalCodeEx(
658 (PyCodeObject *)PyFunction_GET_CODE(func),
659 PyFunction_GET_GLOBALS(func), (PyObject *)NULL,
660 &PyTuple_GET_ITEM(arg, 0), PyTuple_Size(arg),
661 k, nk, d, nd,
Guido van Rossum4f72a782006-10-27 23:31:49 +0000662 PyFunction_GET_KW_DEFAULTS(func),
Tim Peters6d6c1a32001-08-02 04:15:00 +0000663 PyFunction_GET_CLOSURE(func));
664
665 if (k != NULL)
666 PyMem_DEL(k);
667
668 return result;
669}
670
671/* Bind a function to an object */
672static PyObject *
673func_descr_get(PyObject *func, PyObject *obj, PyObject *type)
674{
675 if (obj == Py_None)
676 obj = NULL;
677 return PyMethod_New(func, obj, type);
678}
679
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000680PyTypeObject PyFunction_Type = {
681 PyObject_HEAD_INIT(&PyType_Type)
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000682 0,
683 "function",
Neil Schemenauere83c00e2001-08-29 23:54:21 +0000684 sizeof(PyFunctionObject),
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000685 0,
Tim Peters6d6c1a32001-08-02 04:15:00 +0000686 (destructor)func_dealloc, /* tp_dealloc */
687 0, /* tp_print */
688 0, /* tp_getattr */
689 0, /* tp_setattr */
690 0, /* tp_compare */
691 (reprfunc)func_repr, /* tp_repr */
692 0, /* tp_as_number */
693 0, /* tp_as_sequence */
694 0, /* tp_as_mapping */
695 0, /* tp_hash */
696 function_call, /* tp_call */
697 0, /* tp_str */
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000698 PyObject_GenericGetAttr, /* tp_getattro */
699 PyObject_GenericSetAttr, /* tp_setattro */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000700 0, /* tp_as_buffer */
Neil Schemenauere83c00e2001-08-29 23:54:21 +0000701 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC,/* tp_flags */
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000702 func_doc, /* tp_doc */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000703 (traverseproc)func_traverse, /* tp_traverse */
704 0, /* tp_clear */
705 0, /* tp_richcompare */
Fred Drakedb81e8d2001-03-23 04:19:27 +0000706 offsetof(PyFunctionObject, func_weakreflist), /* tp_weaklistoffset */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000707 0, /* tp_iter */
708 0, /* tp_iternext */
709 0, /* tp_methods */
710 func_memberlist, /* tp_members */
Guido van Rossumd9d1d4a2001-09-17 23:46:56 +0000711 func_getsetlist, /* tp_getset */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000712 0, /* tp_base */
713 0, /* tp_dict */
714 func_descr_get, /* tp_descr_get */
715 0, /* tp_descr_set */
716 offsetof(PyFunctionObject, func_dict), /* tp_dictoffset */
Guido van Rossumbea18cc2002-06-14 20:41:17 +0000717 0, /* tp_init */
718 0, /* tp_alloc */
719 func_new, /* tp_new */
Guido van Rossum85a5fbb1990-10-14 12:07:46 +0000720};
Tim Peters6d6c1a32001-08-02 04:15:00 +0000721
722
723/* Class method object */
724
725/* A class method receives the class as implicit first argument,
726 just like an instance method receives the instance.
727 To declare a class method, use this idiom:
728
729 class C:
730 def f(cls, arg1, arg2, ...): ...
731 f = classmethod(f)
732
733 It can be called either on the class (e.g. C.f()) or on an instance
734 (e.g. C().f()); the instance is ignored except for its class.
735 If a class method is called for a derived class, the derived class
736 object is passed as the implied first argument.
737
738 Class methods are different than C++ or Java static methods.
739 If you want those, see static methods below.
740*/
741
742typedef struct {
743 PyObject_HEAD
744 PyObject *cm_callable;
745} classmethod;
746
747static void
748cm_dealloc(classmethod *cm)
749{
Jeremy Hylton400d8ee2003-04-08 21:28:47 +0000750 _PyObject_GC_UNTRACK((PyObject *)cm);
Tim Peters6d6c1a32001-08-02 04:15:00 +0000751 Py_XDECREF(cm->cm_callable);
Guido van Rossum9475a232001-10-05 20:51:39 +0000752 cm->ob_type->tp_free((PyObject *)cm);
Tim Peters6d6c1a32001-08-02 04:15:00 +0000753}
754
Jeremy Hylton400d8ee2003-04-08 21:28:47 +0000755static int
756cm_traverse(classmethod *cm, visitproc visit, void *arg)
757{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000758 Py_VISIT(cm->cm_callable);
759 return 0;
Jeremy Hylton400d8ee2003-04-08 21:28:47 +0000760}
761
762static int
763cm_clear(classmethod *cm)
764{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000765 Py_CLEAR(cm->cm_callable);
Jeremy Hylton400d8ee2003-04-08 21:28:47 +0000766 return 0;
767}
768
769
Tim Peters6d6c1a32001-08-02 04:15:00 +0000770static PyObject *
771cm_descr_get(PyObject *self, PyObject *obj, PyObject *type)
772{
773 classmethod *cm = (classmethod *)self;
774
775 if (cm->cm_callable == NULL) {
776 PyErr_SetString(PyExc_RuntimeError,
777 "uninitialized classmethod object");
778 return NULL;
779 }
Guido van Rossum7e305482002-03-18 03:09:06 +0000780 if (type == NULL)
781 type = (PyObject *)(obj->ob_type);
Tim Peters6d6c1a32001-08-02 04:15:00 +0000782 return PyMethod_New(cm->cm_callable,
783 type, (PyObject *)(type->ob_type));
784}
785
786static int
787cm_init(PyObject *self, PyObject *args, PyObject *kwds)
788{
789 classmethod *cm = (classmethod *)self;
790 PyObject *callable;
791
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000792 if (!PyArg_UnpackTuple(args, "classmethod", 1, 1, &callable))
Tim Peters6d6c1a32001-08-02 04:15:00 +0000793 return -1;
Georg Brandld02db402006-02-21 22:13:44 +0000794 if (!_PyArg_NoKeywords("classmethod", kwds))
795 return -1;
Raymond Hettingerbe971532003-06-18 01:13:41 +0000796 if (!PyCallable_Check(callable)) {
797 PyErr_Format(PyExc_TypeError, "'%s' object is not callable",
798 callable->ob_type->tp_name);
799 return -1;
800 }
801
Tim Peters6d6c1a32001-08-02 04:15:00 +0000802 Py_INCREF(callable);
803 cm->cm_callable = callable;
804 return 0;
805}
806
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000807PyDoc_STRVAR(classmethod_doc,
Guido van Rossum33c1a882001-12-17 02:53:53 +0000808"classmethod(function) -> method\n\
809\n\
810Convert a function to be a class method.\n\
811\n\
812A class method receives the class as implicit first argument,\n\
813just like an instance method receives the instance.\n\
814To declare a class method, use this idiom:\n\
815\n\
816 class C:\n\
817 def f(cls, arg1, arg2, ...): ...\n\
818 f = classmethod(f)\n\
819\n\
820It can be called either on the class (e.g. C.f()) or on an instance\n\
821(e.g. C().f()). The instance is ignored except for its class.\n\
822If a class method is called for a derived class, the derived class\n\
823object is passed as the implied first argument.\n\
Sjoerd Mullender564980b2001-12-17 11:39:56 +0000824\n\
Guido van Rossum33c1a882001-12-17 02:53:53 +0000825Class methods are different than C++ or Java static methods.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000826If you want those, see the staticmethod builtin.");
Guido van Rossum33c1a882001-12-17 02:53:53 +0000827
Tim Peters6d6c1a32001-08-02 04:15:00 +0000828PyTypeObject PyClassMethod_Type = {
829 PyObject_HEAD_INIT(&PyType_Type)
830 0,
831 "classmethod",
832 sizeof(classmethod),
833 0,
834 (destructor)cm_dealloc, /* tp_dealloc */
835 0, /* tp_print */
836 0, /* tp_getattr */
837 0, /* tp_setattr */
838 0, /* tp_compare */
839 0, /* tp_repr */
840 0, /* tp_as_number */
841 0, /* tp_as_sequence */
842 0, /* tp_as_mapping */
843 0, /* tp_hash */
844 0, /* tp_call */
845 0, /* tp_str */
846 PyObject_GenericGetAttr, /* tp_getattro */
847 0, /* tp_setattro */
848 0, /* tp_as_buffer */
Jeremy Hylton400d8ee2003-04-08 21:28:47 +0000849 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
Guido van Rossum33c1a882001-12-17 02:53:53 +0000850 classmethod_doc, /* tp_doc */
Jeremy Hylton400d8ee2003-04-08 21:28:47 +0000851 (traverseproc)cm_traverse, /* tp_traverse */
852 (inquiry)cm_clear, /* tp_clear */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000853 0, /* tp_richcompare */
854 0, /* tp_weaklistoffset */
855 0, /* tp_iter */
856 0, /* tp_iternext */
857 0, /* tp_methods */
858 0, /* tp_members */
859 0, /* tp_getset */
860 0, /* tp_base */
861 0, /* tp_dict */
862 cm_descr_get, /* tp_descr_get */
863 0, /* tp_descr_set */
864 0, /* tp_dictoffset */
865 cm_init, /* tp_init */
866 PyType_GenericAlloc, /* tp_alloc */
867 PyType_GenericNew, /* tp_new */
Jeremy Hylton400d8ee2003-04-08 21:28:47 +0000868 PyObject_GC_Del, /* tp_free */
Tim Peters6d6c1a32001-08-02 04:15:00 +0000869};
870
871PyObject *
872PyClassMethod_New(PyObject *callable)
873{
874 classmethod *cm = (classmethod *)
875 PyType_GenericAlloc(&PyClassMethod_Type, 0);
876 if (cm != NULL) {
877 Py_INCREF(callable);
878 cm->cm_callable = callable;
879 }
880 return (PyObject *)cm;
881}
882
883
884/* Static method object */
885
886/* A static method does not receive an implicit first argument.
887 To declare a static method, use this idiom:
888
889 class C:
890 def f(arg1, arg2, ...): ...
891 f = staticmethod(f)
892
893 It can be called either on the class (e.g. C.f()) or on an instance
894 (e.g. C().f()); the instance is ignored except for its class.
895
896 Static methods in Python are similar to those found in Java or C++.
897 For a more advanced concept, see class methods above.
898*/
899
900typedef struct {
901 PyObject_HEAD
902 PyObject *sm_callable;
903} staticmethod;
904
905static void
906sm_dealloc(staticmethod *sm)
907{
Jeremy Hylton400d8ee2003-04-08 21:28:47 +0000908 _PyObject_GC_UNTRACK((PyObject *)sm);
Tim Peters6d6c1a32001-08-02 04:15:00 +0000909 Py_XDECREF(sm->sm_callable);
Guido van Rossum9475a232001-10-05 20:51:39 +0000910 sm->ob_type->tp_free((PyObject *)sm);
Tim Peters6d6c1a32001-08-02 04:15:00 +0000911}
912
Jeremy Hylton400d8ee2003-04-08 21:28:47 +0000913static int
914sm_traverse(staticmethod *sm, visitproc visit, void *arg)
915{
Thomas Wouters49fd7fa2006-04-21 10:40:58 +0000916 Py_VISIT(sm->sm_callable);
917 return 0;
Jeremy Hylton400d8ee2003-04-08 21:28:47 +0000918}
919
920static int
921sm_clear(staticmethod *sm)
922{
923 Py_XDECREF(sm->sm_callable);
924 sm->sm_callable = NULL;
925
926 return 0;
927}
928
Tim Peters6d6c1a32001-08-02 04:15:00 +0000929static PyObject *
930sm_descr_get(PyObject *self, PyObject *obj, PyObject *type)
931{
932 staticmethod *sm = (staticmethod *)self;
933
934 if (sm->sm_callable == NULL) {
935 PyErr_SetString(PyExc_RuntimeError,
936 "uninitialized staticmethod object");
937 return NULL;
938 }
939 Py_INCREF(sm->sm_callable);
940 return sm->sm_callable;
941}
942
943static int
944sm_init(PyObject *self, PyObject *args, PyObject *kwds)
945{
946 staticmethod *sm = (staticmethod *)self;
947 PyObject *callable;
948
Raymond Hettingerea3fdf42002-12-29 16:33:45 +0000949 if (!PyArg_UnpackTuple(args, "staticmethod", 1, 1, &callable))
Tim Peters6d6c1a32001-08-02 04:15:00 +0000950 return -1;
Georg Brandld02db402006-02-21 22:13:44 +0000951 if (!_PyArg_NoKeywords("staticmethod", kwds))
952 return -1;
Tim Peters6d6c1a32001-08-02 04:15:00 +0000953 Py_INCREF(callable);
954 sm->sm_callable = callable;
955 return 0;
956}
957
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000958PyDoc_STRVAR(staticmethod_doc,
Guido van Rossum33c1a882001-12-17 02:53:53 +0000959"staticmethod(function) -> method\n\
960\n\
961Convert a function to be a static method.\n\
962\n\
963A static method does not receive an implicit first argument.\n\
964To declare a static method, use this idiom:\n\
965\n\
966 class C:\n\
967 def f(arg1, arg2, ...): ...\n\
968 f = staticmethod(f)\n\
969\n\
970It can be called either on the class (e.g. C.f()) or on an instance\n\
971(e.g. C().f()). The instance is ignored except for its class.\n\
972\n\
973Static methods in Python are similar to those found in Java or C++.\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +0000974For a more advanced concept, see the classmethod builtin.");
Guido van Rossum33c1a882001-12-17 02:53:53 +0000975
Tim Peters6d6c1a32001-08-02 04:15:00 +0000976PyTypeObject PyStaticMethod_Type = {
977 PyObject_HEAD_INIT(&PyType_Type)
978 0,
979 "staticmethod",
980 sizeof(staticmethod),
981 0,
982 (destructor)sm_dealloc, /* tp_dealloc */
983 0, /* tp_print */
984 0, /* tp_getattr */
985 0, /* tp_setattr */
986 0, /* tp_compare */
987 0, /* tp_repr */
988 0, /* tp_as_number */
989 0, /* tp_as_sequence */
990 0, /* tp_as_mapping */
991 0, /* tp_hash */
992 0, /* tp_call */
993 0, /* tp_str */
994 PyObject_GenericGetAttr, /* tp_getattro */
995 0, /* tp_setattro */
996 0, /* tp_as_buffer */
Jeremy Hylton400d8ee2003-04-08 21:28:47 +0000997 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
Guido van Rossum33c1a882001-12-17 02:53:53 +0000998 staticmethod_doc, /* tp_doc */
Jeremy Hylton400d8ee2003-04-08 21:28:47 +0000999 (traverseproc)sm_traverse, /* tp_traverse */
1000 (inquiry)sm_clear, /* tp_clear */
Tim Peters6d6c1a32001-08-02 04:15:00 +00001001 0, /* tp_richcompare */
1002 0, /* tp_weaklistoffset */
1003 0, /* tp_iter */
1004 0, /* tp_iternext */
1005 0, /* tp_methods */
1006 0, /* tp_members */
1007 0, /* tp_getset */
1008 0, /* tp_base */
1009 0, /* tp_dict */
1010 sm_descr_get, /* tp_descr_get */
1011 0, /* tp_descr_set */
1012 0, /* tp_dictoffset */
1013 sm_init, /* tp_init */
1014 PyType_GenericAlloc, /* tp_alloc */
1015 PyType_GenericNew, /* tp_new */
Jeremy Hylton400d8ee2003-04-08 21:28:47 +00001016 PyObject_GC_Del, /* tp_free */
Tim Peters6d6c1a32001-08-02 04:15:00 +00001017};
1018
1019PyObject *
1020PyStaticMethod_New(PyObject *callable)
1021{
1022 staticmethod *sm = (staticmethod *)
1023 PyType_GenericAlloc(&PyStaticMethod_Type, 0);
1024 if (sm != NULL) {
1025 Py_INCREF(callable);
1026 sm->sm_callable = callable;
1027 }
1028 return (PyObject *)sm;
1029}