MCPcopy Create free account
hub / github.com/python/cpython / parse_arg

Method parse_arg

Tools/clinic/libclinic/converter.py:505–546  ·  view source on GitHub ↗
(self, argname: str, displayname: str, *, limited_capi: bool)

Source from the content-addressed store, hash-verified

503 pass
504
505 def parse_arg(self, argname: str, displayname: str, *, limited_capi: bool) -> str | None:
506 if self.format_unit == 'O&':
507 self.use_converter()
508 return self.format_code("""
509 if (!{converter}({argname}, &{paramname})) {{{{
510 goto exit;
511 }}}}
512 """,
513 argname=argname,
514 converter=self.converter)
515 if self.format_unit == 'O!':
516 cast = '(%s)' % self.type if self.type != 'PyObject *' else ''
517 if self.subclass_of in type_checks:
518 typecheck, typename = type_checks[self.subclass_of]
519 return self.format_code("""
520 if (!{typecheck}({argname})) {{{{
521 {bad_argument}
522 goto exit;
523 }}}}
524 {paramname} = {cast}{argname};
525 """,
526 argname=argname,
527 bad_argument=self.bad_argument(displayname, typename, limited_capi=limited_capi),
528 typecheck=typecheck, typename=typename, cast=cast)
529 return self.format_code("""
530 if (!PyObject_TypeCheck({argname}, {subclass_of})) {{{{
531 {bad_argument}
532 goto exit;
533 }}}}
534 {paramname} = {cast}{argname};
535 """,
536 argname=argname,
537 bad_argument=self.bad_argument(displayname, '({subclass_of})->tp_name',
538 expected_literal=False, limited_capi=limited_capi),
539 subclass_of=self.subclass_of, cast=cast)
540 if self.format_unit == 'O':
541 cast = '(%s)' % self.type if self.type != 'PyObject *' else ''
542 return self.format_code("""
543 {paramname} = {cast}{argname};
544 """,
545 argname=argname, cast=cast)
546 return None
547
548 def set_template_dict(self, template_dict: TemplateDict) -> None:
549 pass

Callers 4

parse_one_argMethod · 0.45
parse_pos_onlyMethod · 0.45
parse_var_keywordMethod · 0.45
parse_generalMethod · 0.45

Calls 3

use_converterMethod · 0.95
format_codeMethod · 0.95
bad_argumentMethod · 0.95

Tested by

no test coverage detected