2 /* Function object implementation */
7 #include "structmember.h"
10 PyFunction_New(PyObject
*code
, PyObject
*globals
)
12 PyFunctionObject
*op
= PyObject_GC_New(PyFunctionObject
,
14 static PyObject
*__name__
= 0;
19 op
->func_weakreflist
= NULL
;
23 op
->func_globals
= globals
;
24 op
->func_name
= ((PyCodeObject
*)code
)->co_name
;
25 Py_INCREF(op
->func_name
);
26 op
->func_defaults
= NULL
; /* No default arguments */
27 op
->func_closure
= NULL
;
28 consts
= ((PyCodeObject
*)code
)->co_consts
;
29 if (PyTuple_Size(consts
) >= 1) {
30 doc
= PyTuple_GetItem(consts
, 0);
31 if (!PyString_Check(doc
) && !PyUnicode_Check(doc
))
39 op
->func_module
= NULL
;
41 /* __module__: If module name is in globals, use it.
45 __name__
= PyString_InternFromString("__name__");
51 module
= PyDict_GetItem(globals
, __name__
);
54 op
->func_module
= module
;
59 _PyObject_GC_TRACK(op
);
60 return (PyObject
*)op
;
64 PyFunction_GetCode(PyObject
*op
)
66 if (!PyFunction_Check(op
)) {
67 PyErr_BadInternalCall();
70 return ((PyFunctionObject
*) op
) -> func_code
;
74 PyFunction_GetGlobals(PyObject
*op
)
76 if (!PyFunction_Check(op
)) {
77 PyErr_BadInternalCall();
80 return ((PyFunctionObject
*) op
) -> func_globals
;
84 PyFunction_GetModule(PyObject
*op
)
86 if (!PyFunction_Check(op
)) {
87 PyErr_BadInternalCall();
90 return ((PyFunctionObject
*) op
) -> func_module
;
94 PyFunction_GetDefaults(PyObject
*op
)
96 if (!PyFunction_Check(op
)) {
97 PyErr_BadInternalCall();
100 return ((PyFunctionObject
*) op
) -> func_defaults
;
104 PyFunction_SetDefaults(PyObject
*op
, PyObject
*defaults
)
106 if (!PyFunction_Check(op
)) {
107 PyErr_BadInternalCall();
110 if (defaults
== Py_None
)
112 else if (defaults
&& PyTuple_Check(defaults
)) {
116 PyErr_SetString(PyExc_SystemError
, "non-tuple default args");
119 Py_XDECREF(((PyFunctionObject
*) op
) -> func_defaults
);
120 ((PyFunctionObject
*) op
) -> func_defaults
= defaults
;
125 PyFunction_GetClosure(PyObject
*op
)
127 if (!PyFunction_Check(op
)) {
128 PyErr_BadInternalCall();
131 return ((PyFunctionObject
*) op
) -> func_closure
;
135 PyFunction_SetClosure(PyObject
*op
, PyObject
*closure
)
137 if (!PyFunction_Check(op
)) {
138 PyErr_BadInternalCall();
141 if (closure
== Py_None
)
143 else if (PyTuple_Check(closure
)) {
147 PyErr_Format(PyExc_SystemError
,
148 "expected tuple for closure, got '%.100s'",
149 closure
->ob_type
->tp_name
);
152 Py_XDECREF(((PyFunctionObject
*) op
) -> func_closure
);
153 ((PyFunctionObject
*) op
) -> func_closure
= closure
;
159 #define OFF(x) offsetof(PyFunctionObject, x)
161 static PyMemberDef func_memberlist
[] = {
162 {"func_closure", T_OBJECT
, OFF(func_closure
),
163 RESTRICTED
|READONLY
},
164 {"__closure__", T_OBJECT
, OFF(func_closure
),
165 RESTRICTED
|READONLY
},
166 {"func_doc", T_OBJECT
, OFF(func_doc
), PY_WRITE_RESTRICTED
},
167 {"__doc__", T_OBJECT
, OFF(func_doc
), PY_WRITE_RESTRICTED
},
168 {"func_globals", T_OBJECT
, OFF(func_globals
),
169 RESTRICTED
|READONLY
},
170 {"__globals__", T_OBJECT
, OFF(func_globals
),
171 RESTRICTED
|READONLY
},
172 {"__module__", T_OBJECT
, OFF(func_module
), PY_WRITE_RESTRICTED
},
173 {NULL
} /* Sentinel */
179 if (!PyEval_GetRestricted())
181 PyErr_SetString(PyExc_RuntimeError
,
182 "function attributes not accessible in restricted mode");
187 func_get_dict(PyFunctionObject
*op
)
191 if (op
->func_dict
== NULL
) {
192 op
->func_dict
= PyDict_New();
193 if (op
->func_dict
== NULL
)
196 Py_INCREF(op
->func_dict
);
197 return op
->func_dict
;
201 func_set_dict(PyFunctionObject
*op
, PyObject
*value
)
207 /* It is illegal to del f.func_dict */
209 PyErr_SetString(PyExc_TypeError
,
210 "function's dictionary may not be deleted");
213 /* Can only set func_dict to a dictionary */
214 if (!PyDict_Check(value
)) {
215 PyErr_SetString(PyExc_TypeError
,
216 "setting function's dictionary to a non-dict");
221 op
->func_dict
= value
;
227 func_get_code(PyFunctionObject
*op
)
231 Py_INCREF(op
->func_code
);
232 return op
->func_code
;
236 func_set_code(PyFunctionObject
*op
, PyObject
*value
)
239 Py_ssize_t nfree
, nclosure
;
243 /* Not legal to del f.func_code or to set it to anything
244 * other than a code object. */
245 if (value
== NULL
|| !PyCode_Check(value
)) {
246 PyErr_SetString(PyExc_TypeError
,
247 "__code__ must be set to a code object");
250 nfree
= PyCode_GetNumFree((PyCodeObject
*)value
);
251 nclosure
= (op
->func_closure
== NULL
? 0 :
252 PyTuple_GET_SIZE(op
->func_closure
));
253 if (nclosure
!= nfree
) {
254 PyErr_Format(PyExc_ValueError
,
255 "%s() requires a code object with %zd free vars,"
257 PyString_AsString(op
->func_name
),
263 op
->func_code
= value
;
269 func_get_name(PyFunctionObject
*op
)
271 Py_INCREF(op
->func_name
);
272 return op
->func_name
;
276 func_set_name(PyFunctionObject
*op
, PyObject
*value
)
282 /* Not legal to del f.func_name or to set it to anything
283 * other than a string object. */
284 if (value
== NULL
|| !PyString_Check(value
)) {
285 PyErr_SetString(PyExc_TypeError
,
286 "__name__ must be set to a string object");
291 op
->func_name
= value
;
297 func_get_defaults(PyFunctionObject
*op
)
301 if (op
->func_defaults
== NULL
) {
305 Py_INCREF(op
->func_defaults
);
306 return op
->func_defaults
;
310 func_set_defaults(PyFunctionObject
*op
, PyObject
*value
)
316 /* Legal to del f.func_defaults.
317 * Can only set func_defaults to NULL or a tuple. */
318 if (value
== Py_None
)
320 if (value
!= NULL
&& !PyTuple_Check(value
)) {
321 PyErr_SetString(PyExc_TypeError
,
322 "__defaults__ must be set to a tuple object");
325 tmp
= op
->func_defaults
;
327 op
->func_defaults
= value
;
332 static PyGetSetDef func_getsetlist
[] = {
333 {"func_code", (getter
)func_get_code
, (setter
)func_set_code
},
334 {"__code__", (getter
)func_get_code
, (setter
)func_set_code
},
335 {"func_defaults", (getter
)func_get_defaults
,
336 (setter
)func_set_defaults
},
337 {"__defaults__", (getter
)func_get_defaults
,
338 (setter
)func_set_defaults
},
339 {"func_dict", (getter
)func_get_dict
, (setter
)func_set_dict
},
340 {"__dict__", (getter
)func_get_dict
, (setter
)func_set_dict
},
341 {"func_name", (getter
)func_get_name
, (setter
)func_set_name
},
342 {"__name__", (getter
)func_get_name
, (setter
)func_set_name
},
343 {NULL
} /* Sentinel */
346 PyDoc_STRVAR(func_doc
,
347 "function(code, globals[, name[, argdefs[, closure]]])\n\
349 Create a function object from a code object and a dictionary.\n\
350 The optional name string overrides the name from the code object.\n\
351 The optional argdefs tuple specifies the default argument values.\n\
352 The optional closure tuple supplies the bindings for free variables.");
354 /* func_new() maintains the following invariants for closures. The
355 closure must correspond to the free variables of the code object.
357 if len(code.co_freevars) == 0:
360 len(closure) == len(code.co_freevars)
361 for every elt in closure, type(elt) == cell
365 func_new(PyTypeObject
* type
, PyObject
* args
, PyObject
* kw
)
369 PyObject
*name
= Py_None
;
370 PyObject
*defaults
= Py_None
;
371 PyObject
*closure
= Py_None
;
372 PyFunctionObject
*newfunc
;
373 Py_ssize_t nfree
, nclosure
;
374 static char *kwlist
[] = {"code", "globals", "name",
375 "argdefs", "closure", 0};
377 if (!PyArg_ParseTupleAndKeywords(args
, kw
, "O!O!|OOO:function",
380 &PyDict_Type
, &globals
,
381 &name
, &defaults
, &closure
))
383 if (name
!= Py_None
&& !PyString_Check(name
)) {
384 PyErr_SetString(PyExc_TypeError
,
385 "arg 3 (name) must be None or string");
388 if (defaults
!= Py_None
&& !PyTuple_Check(defaults
)) {
389 PyErr_SetString(PyExc_TypeError
,
390 "arg 4 (defaults) must be None or tuple");
393 nfree
= PyTuple_GET_SIZE(code
->co_freevars
);
394 if (!PyTuple_Check(closure
)) {
395 if (nfree
&& closure
== Py_None
) {
396 PyErr_SetString(PyExc_TypeError
,
397 "arg 5 (closure) must be tuple");
400 else if (closure
!= Py_None
) {
401 PyErr_SetString(PyExc_TypeError
,
402 "arg 5 (closure) must be None or tuple");
407 /* check that the closure is well-formed */
408 nclosure
= closure
== Py_None
? 0 : PyTuple_GET_SIZE(closure
);
409 if (nfree
!= nclosure
)
410 return PyErr_Format(PyExc_ValueError
,
411 "%s requires closure of length %zd, not %zd",
412 PyString_AS_STRING(code
->co_name
),
416 for (i
= 0; i
< nclosure
; i
++) {
417 PyObject
*o
= PyTuple_GET_ITEM(closure
, i
);
418 if (!PyCell_Check(o
)) {
419 return PyErr_Format(PyExc_TypeError
,
420 "arg 5 (closure) expected cell, found %s",
421 o
->ob_type
->tp_name
);
426 newfunc
= (PyFunctionObject
*)PyFunction_New((PyObject
*)code
,
431 if (name
!= Py_None
) {
433 Py_DECREF(newfunc
->func_name
);
434 newfunc
->func_name
= name
;
436 if (defaults
!= Py_None
) {
438 newfunc
->func_defaults
= defaults
;
440 if (closure
!= Py_None
) {
442 newfunc
->func_closure
= closure
;
445 return (PyObject
*)newfunc
;
449 func_dealloc(PyFunctionObject
*op
)
451 _PyObject_GC_UNTRACK(op
);
452 if (op
->func_weakreflist
!= NULL
)
453 PyObject_ClearWeakRefs((PyObject
*) op
);
454 Py_DECREF(op
->func_code
);
455 Py_DECREF(op
->func_globals
);
456 Py_XDECREF(op
->func_module
);
457 Py_DECREF(op
->func_name
);
458 Py_XDECREF(op
->func_defaults
);
459 Py_XDECREF(op
->func_doc
);
460 Py_XDECREF(op
->func_dict
);
461 Py_XDECREF(op
->func_closure
);
466 func_repr(PyFunctionObject
*op
)
468 return PyString_FromFormat("<function %s at %p>",
469 PyString_AsString(op
->func_name
),
474 func_traverse(PyFunctionObject
*f
, visitproc visit
, void *arg
)
476 Py_VISIT(f
->func_code
);
477 Py_VISIT(f
->func_globals
);
478 Py_VISIT(f
->func_module
);
479 Py_VISIT(f
->func_defaults
);
480 Py_VISIT(f
->func_doc
);
481 Py_VISIT(f
->func_name
);
482 Py_VISIT(f
->func_dict
);
483 Py_VISIT(f
->func_closure
);
488 function_call(PyObject
*func
, PyObject
*arg
, PyObject
*kw
)
492 PyObject
*kwtuple
= NULL
;
496 argdefs
= PyFunction_GET_DEFAULTS(func
);
497 if (argdefs
!= NULL
&& PyTuple_Check(argdefs
)) {
498 d
= &PyTuple_GET_ITEM((PyTupleObject
*)argdefs
, 0);
499 nd
= PyTuple_GET_SIZE(argdefs
);
506 if (kw
!= NULL
&& PyDict_Check(kw
)) {
508 nk
= PyDict_Size(kw
);
509 kwtuple
= PyTuple_New(2*nk
);
512 k
= &PyTuple_GET_ITEM(kwtuple
, 0);
514 while (PyDict_Next(kw
, &pos
, &k
[i
], &k
[i
+1])) {
526 result
= PyEval_EvalCodeEx(
527 (PyCodeObject
*)PyFunction_GET_CODE(func
),
528 PyFunction_GET_GLOBALS(func
), (PyObject
*)NULL
,
529 &PyTuple_GET_ITEM(arg
, 0), PyTuple_GET_SIZE(arg
),
531 PyFunction_GET_CLOSURE(func
));
538 /* Bind a function to an object */
540 func_descr_get(PyObject
*func
, PyObject
*obj
, PyObject
*type
)
544 return PyMethod_New(func
, obj
, type
);
547 PyTypeObject PyFunction_Type
= {
548 PyVarObject_HEAD_INIT(&PyType_Type
, 0)
550 sizeof(PyFunctionObject
),
552 (destructor
)func_dealloc
, /* tp_dealloc */
557 (reprfunc
)func_repr
, /* tp_repr */
558 0, /* tp_as_number */
559 0, /* tp_as_sequence */
560 0, /* tp_as_mapping */
562 function_call
, /* tp_call */
564 PyObject_GenericGetAttr
, /* tp_getattro */
565 PyObject_GenericSetAttr
, /* tp_setattro */
566 0, /* tp_as_buffer */
567 Py_TPFLAGS_DEFAULT
| Py_TPFLAGS_HAVE_GC
,/* tp_flags */
568 func_doc
, /* tp_doc */
569 (traverseproc
)func_traverse
, /* tp_traverse */
571 0, /* tp_richcompare */
572 offsetof(PyFunctionObject
, func_weakreflist
), /* tp_weaklistoffset */
576 func_memberlist
, /* tp_members */
577 func_getsetlist
, /* tp_getset */
580 func_descr_get
, /* tp_descr_get */
581 0, /* tp_descr_set */
582 offsetof(PyFunctionObject
, func_dict
), /* tp_dictoffset */
585 func_new
, /* tp_new */
589 /* Class method object */
591 /* A class method receives the class as implicit first argument,
592 just like an instance method receives the instance.
593 To declare a class method, use this idiom:
596 def f(cls, arg1, arg2, ...): ...
599 It can be called either on the class (e.g. C.f()) or on an instance
600 (e.g. C().f()); the instance is ignored except for its class.
601 If a class method is called for a derived class, the derived class
602 object is passed as the implied first argument.
604 Class methods are different than C++ or Java static methods.
605 If you want those, see static methods below.
610 PyObject
*cm_callable
;
614 cm_dealloc(classmethod
*cm
)
616 _PyObject_GC_UNTRACK((PyObject
*)cm
);
617 Py_XDECREF(cm
->cm_callable
);
618 Py_TYPE(cm
)->tp_free((PyObject
*)cm
);
622 cm_traverse(classmethod
*cm
, visitproc visit
, void *arg
)
624 Py_VISIT(cm
->cm_callable
);
629 cm_clear(classmethod
*cm
)
631 Py_CLEAR(cm
->cm_callable
);
637 cm_descr_get(PyObject
*self
, PyObject
*obj
, PyObject
*type
)
639 classmethod
*cm
= (classmethod
*)self
;
641 if (cm
->cm_callable
== NULL
) {
642 PyErr_SetString(PyExc_RuntimeError
,
643 "uninitialized classmethod object");
647 type
= (PyObject
*)(Py_TYPE(obj
));
648 return PyMethod_New(cm
->cm_callable
,
649 type
, (PyObject
*)(Py_TYPE(type
)));
653 cm_init(PyObject
*self
, PyObject
*args
, PyObject
*kwds
)
655 classmethod
*cm
= (classmethod
*)self
;
658 if (!PyArg_UnpackTuple(args
, "classmethod", 1, 1, &callable
))
660 if (!_PyArg_NoKeywords("classmethod", kwds
))
662 if (!PyCallable_Check(callable
)) {
663 PyErr_Format(PyExc_TypeError
, "'%s' object is not callable",
664 callable
->ob_type
->tp_name
);
669 cm
->cm_callable
= callable
;
673 static PyMemberDef cm_memberlist
[] = {
674 {"__func__", T_OBJECT
, offsetof(classmethod
, cm_callable
), READONLY
},
675 {NULL
} /* Sentinel */
678 PyDoc_STRVAR(classmethod_doc
,
679 "classmethod(function) -> method\n\
681 Convert a function to be a class method.\n\
683 A class method receives the class as implicit first argument,\n\
684 just like an instance method receives the instance.\n\
685 To declare a class method, use this idiom:\n\
688 def f(cls, arg1, arg2, ...): ...\n\
689 f = classmethod(f)\n\
691 It can be called either on the class (e.g. C.f()) or on an instance\n\
692 (e.g. C().f()). The instance is ignored except for its class.\n\
693 If a class method is called for a derived class, the derived class\n\
694 object is passed as the implied first argument.\n\
696 Class methods are different than C++ or Java static methods.\n\
697 If you want those, see the staticmethod builtin.");
699 PyTypeObject PyClassMethod_Type
= {
700 PyVarObject_HEAD_INIT(&PyType_Type
, 0)
704 (destructor
)cm_dealloc
, /* tp_dealloc */
710 0, /* tp_as_number */
711 0, /* tp_as_sequence */
712 0, /* tp_as_mapping */
716 PyObject_GenericGetAttr
, /* tp_getattro */
718 0, /* tp_as_buffer */
719 Py_TPFLAGS_DEFAULT
| Py_TPFLAGS_BASETYPE
| Py_TPFLAGS_HAVE_GC
,
720 classmethod_doc
, /* tp_doc */
721 (traverseproc
)cm_traverse
, /* tp_traverse */
722 (inquiry
)cm_clear
, /* tp_clear */
723 0, /* tp_richcompare */
724 0, /* tp_weaklistoffset */
728 cm_memberlist
, /* tp_members */
732 cm_descr_get
, /* tp_descr_get */
733 0, /* tp_descr_set */
734 0, /* tp_dictoffset */
735 cm_init
, /* tp_init */
736 PyType_GenericAlloc
, /* tp_alloc */
737 PyType_GenericNew
, /* tp_new */
738 PyObject_GC_Del
, /* tp_free */
742 PyClassMethod_New(PyObject
*callable
)
744 classmethod
*cm
= (classmethod
*)
745 PyType_GenericAlloc(&PyClassMethod_Type
, 0);
748 cm
->cm_callable
= callable
;
750 return (PyObject
*)cm
;
754 /* Static method object */
756 /* A static method does not receive an implicit first argument.
757 To declare a static method, use this idiom:
760 def f(arg1, arg2, ...): ...
763 It can be called either on the class (e.g. C.f()) or on an instance
764 (e.g. C().f()); the instance is ignored except for its class.
766 Static methods in Python are similar to those found in Java or C++.
767 For a more advanced concept, see class methods above.
772 PyObject
*sm_callable
;
776 sm_dealloc(staticmethod
*sm
)
778 _PyObject_GC_UNTRACK((PyObject
*)sm
);
779 Py_XDECREF(sm
->sm_callable
);
780 Py_TYPE(sm
)->tp_free((PyObject
*)sm
);
784 sm_traverse(staticmethod
*sm
, visitproc visit
, void *arg
)
786 Py_VISIT(sm
->sm_callable
);
791 sm_clear(staticmethod
*sm
)
793 Py_XDECREF(sm
->sm_callable
);
794 sm
->sm_callable
= NULL
;
800 sm_descr_get(PyObject
*self
, PyObject
*obj
, PyObject
*type
)
802 staticmethod
*sm
= (staticmethod
*)self
;
804 if (sm
->sm_callable
== NULL
) {
805 PyErr_SetString(PyExc_RuntimeError
,
806 "uninitialized staticmethod object");
809 Py_INCREF(sm
->sm_callable
);
810 return sm
->sm_callable
;
814 sm_init(PyObject
*self
, PyObject
*args
, PyObject
*kwds
)
816 staticmethod
*sm
= (staticmethod
*)self
;
819 if (!PyArg_UnpackTuple(args
, "staticmethod", 1, 1, &callable
))
821 if (!_PyArg_NoKeywords("staticmethod", kwds
))
824 sm
->sm_callable
= callable
;
828 static PyMemberDef sm_memberlist
[] = {
829 {"__func__", T_OBJECT
, offsetof(staticmethod
, sm_callable
), READONLY
},
830 {NULL
} /* Sentinel */
833 PyDoc_STRVAR(staticmethod_doc
,
834 "staticmethod(function) -> method\n\
836 Convert a function to be a static method.\n\
838 A static method does not receive an implicit first argument.\n\
839 To declare a static method, use this idiom:\n\
842 def f(arg1, arg2, ...): ...\n\
843 f = staticmethod(f)\n\
845 It can be called either on the class (e.g. C.f()) or on an instance\n\
846 (e.g. C().f()). The instance is ignored except for its class.\n\
848 Static methods in Python are similar to those found in Java or C++.\n\
849 For a more advanced concept, see the classmethod builtin.");
851 PyTypeObject PyStaticMethod_Type
= {
852 PyVarObject_HEAD_INIT(&PyType_Type
, 0)
854 sizeof(staticmethod
),
856 (destructor
)sm_dealloc
, /* tp_dealloc */
862 0, /* tp_as_number */
863 0, /* tp_as_sequence */
864 0, /* tp_as_mapping */
868 PyObject_GenericGetAttr
, /* tp_getattro */
870 0, /* tp_as_buffer */
871 Py_TPFLAGS_DEFAULT
| Py_TPFLAGS_BASETYPE
| Py_TPFLAGS_HAVE_GC
,
872 staticmethod_doc
, /* tp_doc */
873 (traverseproc
)sm_traverse
, /* tp_traverse */
874 (inquiry
)sm_clear
, /* tp_clear */
875 0, /* tp_richcompare */
876 0, /* tp_weaklistoffset */
880 sm_memberlist
, /* tp_members */
884 sm_descr_get
, /* tp_descr_get */
885 0, /* tp_descr_set */
886 0, /* tp_dictoffset */
887 sm_init
, /* tp_init */
888 PyType_GenericAlloc
, /* tp_alloc */
889 PyType_GenericNew
, /* tp_new */
890 PyObject_GC_Del
, /* tp_free */
894 PyStaticMethod_New(PyObject
*callable
)
896 staticmethod
*sm
= (staticmethod
*)
897 PyType_GenericAlloc(&PyStaticMethod_Type
, 0);
900 sm
->sm_callable
= callable
;
902 return (PyObject
*)sm
;