/src/cpython/Objects/clinic/descrobject.c.h
Line | Count | Source (jump to first uncovered line) |
1 | | /*[clinic input] |
2 | | preserve |
3 | | [clinic start generated code]*/ |
4 | | |
5 | | #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
6 | | # include "pycore_gc.h" // PyGC_Head |
7 | | # include "pycore_runtime.h" // _Py_ID() |
8 | | #endif |
9 | | #include "pycore_modsupport.h" // _PyArg_UnpackKeywords() |
10 | | |
11 | | PyDoc_STRVAR(mappingproxy_new__doc__, |
12 | | "mappingproxy(mapping)\n" |
13 | | "--\n" |
14 | | "\n" |
15 | | "Read-only proxy of a mapping."); |
16 | | |
17 | | static PyObject * |
18 | | mappingproxy_new_impl(PyTypeObject *type, PyObject *mapping); |
19 | | |
20 | | static PyObject * |
21 | | mappingproxy_new(PyTypeObject *type, PyObject *args, PyObject *kwargs) |
22 | 63 | { |
23 | 63 | PyObject *return_value = NULL; |
24 | 63 | #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
25 | | |
26 | 63 | #define NUM_KEYWORDS 1 |
27 | 63 | static struct { |
28 | 63 | PyGC_Head _this_is_not_used; |
29 | 63 | PyObject_VAR_HEAD |
30 | 63 | Py_hash_t ob_hash; |
31 | 63 | PyObject *ob_item[NUM_KEYWORDS]; |
32 | 63 | } _kwtuple = { |
33 | 63 | .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
34 | 63 | .ob_hash = -1, |
35 | 63 | .ob_item = { &_Py_ID(mapping), }, |
36 | 63 | }; |
37 | 63 | #undef NUM_KEYWORDS |
38 | 63 | #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
39 | | |
40 | | #else // !Py_BUILD_CORE |
41 | | # define KWTUPLE NULL |
42 | | #endif // !Py_BUILD_CORE |
43 | | |
44 | 63 | static const char * const _keywords[] = {"mapping", NULL}; |
45 | 63 | static _PyArg_Parser _parser = { |
46 | 63 | .keywords = _keywords, |
47 | 63 | .fname = "mappingproxy", |
48 | 63 | .kwtuple = KWTUPLE, |
49 | 63 | }; |
50 | 63 | #undef KWTUPLE |
51 | 63 | PyObject *argsbuf[1]; |
52 | 63 | PyObject * const *fastargs; |
53 | 63 | Py_ssize_t nargs = PyTuple_GET_SIZE(args); |
54 | 63 | PyObject *mapping; |
55 | | |
56 | 63 | fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, |
57 | 63 | /*minpos*/ 1, /*maxpos*/ 1, /*minkw*/ 0, /*varpos*/ 0, argsbuf); |
58 | 63 | if (!fastargs) { |
59 | 0 | goto exit; |
60 | 0 | } |
61 | 63 | mapping = fastargs[0]; |
62 | 63 | return_value = mappingproxy_new_impl(type, mapping); |
63 | | |
64 | 63 | exit: |
65 | 63 | return return_value; |
66 | 63 | } |
67 | | |
68 | | PyDoc_STRVAR(property_init__doc__, |
69 | | "property(fget=None, fset=None, fdel=None, doc=None)\n" |
70 | | "--\n" |
71 | | "\n" |
72 | | "Property attribute.\n" |
73 | | "\n" |
74 | | " fget\n" |
75 | | " function to be used for getting an attribute value\n" |
76 | | " fset\n" |
77 | | " function to be used for setting an attribute value\n" |
78 | | " fdel\n" |
79 | | " function to be used for del\'ing an attribute\n" |
80 | | " doc\n" |
81 | | " docstring\n" |
82 | | "\n" |
83 | | "Typical use is to define a managed attribute x:\n" |
84 | | "\n" |
85 | | "class C(object):\n" |
86 | | " def getx(self): return self._x\n" |
87 | | " def setx(self, value): self._x = value\n" |
88 | | " def delx(self): del self._x\n" |
89 | | " x = property(getx, setx, delx, \"I\'m the \'x\' property.\")\n" |
90 | | "\n" |
91 | | "Decorators make defining new properties or modifying existing ones easy:\n" |
92 | | "\n" |
93 | | "class C(object):\n" |
94 | | " @property\n" |
95 | | " def x(self):\n" |
96 | | " \"I am the \'x\' property.\"\n" |
97 | | " return self._x\n" |
98 | | " @x.setter\n" |
99 | | " def x(self, value):\n" |
100 | | " self._x = value\n" |
101 | | " @x.deleter\n" |
102 | | " def x(self):\n" |
103 | | " del self._x"); |
104 | | |
105 | | static int |
106 | | property_init_impl(propertyobject *self, PyObject *fget, PyObject *fset, |
107 | | PyObject *fdel, PyObject *doc); |
108 | | |
109 | | static int |
110 | | property_init(PyObject *self, PyObject *args, PyObject *kwargs) |
111 | 951 | { |
112 | 951 | int return_value = -1; |
113 | 951 | #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE) |
114 | | |
115 | 951 | #define NUM_KEYWORDS 4 |
116 | 951 | static struct { |
117 | 951 | PyGC_Head _this_is_not_used; |
118 | 951 | PyObject_VAR_HEAD |
119 | 951 | Py_hash_t ob_hash; |
120 | 951 | PyObject *ob_item[NUM_KEYWORDS]; |
121 | 951 | } _kwtuple = { |
122 | 951 | .ob_base = PyVarObject_HEAD_INIT(&PyTuple_Type, NUM_KEYWORDS) |
123 | 951 | .ob_hash = -1, |
124 | 951 | .ob_item = { &_Py_ID(fget), &_Py_ID(fset), &_Py_ID(fdel), &_Py_ID(doc), }, |
125 | 951 | }; |
126 | 951 | #undef NUM_KEYWORDS |
127 | 951 | #define KWTUPLE (&_kwtuple.ob_base.ob_base) |
128 | | |
129 | | #else // !Py_BUILD_CORE |
130 | | # define KWTUPLE NULL |
131 | | #endif // !Py_BUILD_CORE |
132 | | |
133 | 951 | static const char * const _keywords[] = {"fget", "fset", "fdel", "doc", NULL}; |
134 | 951 | static _PyArg_Parser _parser = { |
135 | 951 | .keywords = _keywords, |
136 | 951 | .fname = "property", |
137 | 951 | .kwtuple = KWTUPLE, |
138 | 951 | }; |
139 | 951 | #undef KWTUPLE |
140 | 951 | PyObject *argsbuf[4]; |
141 | 951 | PyObject * const *fastargs; |
142 | 951 | Py_ssize_t nargs = PyTuple_GET_SIZE(args); |
143 | 951 | Py_ssize_t noptargs = nargs + (kwargs ? PyDict_GET_SIZE(kwargs) : 0) - 0; |
144 | 951 | PyObject *fget = NULL; |
145 | 951 | PyObject *fset = NULL; |
146 | 951 | PyObject *fdel = NULL; |
147 | 951 | PyObject *doc = NULL; |
148 | | |
149 | 951 | fastargs = _PyArg_UnpackKeywords(_PyTuple_CAST(args)->ob_item, nargs, kwargs, NULL, &_parser, |
150 | 951 | /*minpos*/ 0, /*maxpos*/ 4, /*minkw*/ 0, /*varpos*/ 0, argsbuf); |
151 | 951 | if (!fastargs) { |
152 | 0 | goto exit; |
153 | 0 | } |
154 | 951 | if (!noptargs) { |
155 | 0 | goto skip_optional_pos; |
156 | 0 | } |
157 | 951 | if (fastargs[0]) { |
158 | 951 | fget = fastargs[0]; |
159 | 951 | if (!--noptargs) { |
160 | 859 | goto skip_optional_pos; |
161 | 859 | } |
162 | 951 | } |
163 | 92 | if (fastargs[1]) { |
164 | 92 | fset = fastargs[1]; |
165 | 92 | if (!--noptargs) { |
166 | 2 | goto skip_optional_pos; |
167 | 2 | } |
168 | 92 | } |
169 | 90 | if (fastargs[2]) { |
170 | 90 | fdel = fastargs[2]; |
171 | 90 | if (!--noptargs) { |
172 | 0 | goto skip_optional_pos; |
173 | 0 | } |
174 | 90 | } |
175 | 90 | doc = fastargs[3]; |
176 | 951 | skip_optional_pos: |
177 | 951 | return_value = property_init_impl((propertyobject *)self, fget, fset, fdel, doc); |
178 | | |
179 | 951 | exit: |
180 | 951 | return return_value; |
181 | 951 | } |
182 | | /*[clinic end generated code: output=2e8df497abc4f915 input=a9049054013a1b77]*/ |