MCPcopy Index your code
hub / github.com/python/cpython / __init__

Method __init__

Tools/clinic/libclinic/parse_args.py:238–294  ·  view source on GitHub ↗
(self, func: Function, codegen: CodeGen)

Source from the content-addressed store, hash-verified

236 parser_body_fields: tuple[str, ...]
237
238 def __init__(self, func: Function, codegen: CodeGen) -> None:
239 self.func = func
240 self.codegen = codegen
241
242 self.parameters = list(self.func.parameters.values())
243 self_parameter = self.parameters.pop(0)
244 if not isinstance(self_parameter.converter, self_converter):
245 raise ValueError("the first parameter must use self_converter")
246 self.self_parameter_converter = self_parameter.converter
247
248 self.requires_defining_class = False
249 if self.parameters and isinstance(self.parameters[0].converter, defining_class_converter):
250 self.requires_defining_class = True
251 del self.parameters[0]
252
253 for i, p in enumerate(self.parameters):
254 if p.is_vararg():
255 self.varpos = p
256 del self.parameters[i]
257 break
258
259 for i, p in enumerate(self.parameters):
260 if p.is_var_keyword():
261 self.var_keyword = p
262 del self.parameters[i]
263 break
264
265 self.converters = [p.converter for p in self.parameters]
266
267 if self.func.critical_section:
268 self.codegen.add_include('pycore_critical_section.h',
269 'Py_BEGIN_CRITICAL_SECTION()')
270
271 # Use fastcall if not disabled, except if in a __new__ or
272 # __init__ method, or if there is a **kwargs parameter.
273 if self.func.disable_fastcall:
274 self.fastcall = False
275 elif self.var_keyword is not None:
276 self.fastcall = False
277 else:
278 self.fastcall = not self.is_new_or_init()
279
280 self.pos_only = 0
281 self.min_pos = 0
282 self.max_pos = 0
283 self.min_kw_only = 0
284 for i, p in enumerate(self.parameters, 1):
285 if p.is_keyword_only():
286 assert not p.is_positional_only()
287 if not p.is_optional():
288 self.min_kw_only = i - self.max_pos
289 else:
290 self.max_pos = i
291 if p.is_positional_only():
292 self.pos_only = i
293 if not p.is_optional():
294 self.min_pos = i
295

Callers

nothing calls this directly

Calls 11

is_new_or_initMethod · 0.95
listClass · 0.85
enumerateFunction · 0.85
is_varargMethod · 0.80
is_var_keywordMethod · 0.80
is_keyword_onlyMethod · 0.80
is_positional_onlyMethod · 0.80
valuesMethod · 0.45
popMethod · 0.45
add_includeMethod · 0.45
is_optionalMethod · 0.45

Tested by

no test coverage detected