bpo-38787: Fix Argument Clinic defining_class_converter (GH-20074)

Don't hardcode defining_class parameter name to "cls":

* Define CConverter.set_template_dict(): do nothing by default
* CLanguage.render_function() now calls set_template_dict() on all
  converters.
This commit is contained in:
Victor Stinner 2020-05-14 00:31:31 +02:00 committed by GitHub
parent a15c9b3a05
commit 97e1568325
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -724,7 +724,7 @@ def output_templates(self, f):
parser_prototype_def_class = normalize_snippet("""
static PyObject *
{c_basename}({self_type}{self_name}, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
{c_basename}({self_type}{self_name}, PyTypeObject *{defining_class_name}, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
""")
# parser_body_fields remembers the fields passed in to the
@ -1305,7 +1305,8 @@ def render_function(self, clinic, f):
template_dict['docstring'] = self.docstring_for_c_string(f)
template_dict['self_name'] = template_dict['self_type'] = template_dict['self_type_check'] = ''
f_self.converter.set_template_dict(template_dict)
for converter in converters:
converter.set_template_dict(template_dict)
f.return_converter.render(f, data)
template_dict['impl_return_type'] = f.return_converter.type
@ -2698,6 +2699,10 @@ def parse_arg(self, argname, displayname):
""".format(argname=argname, paramname=self.name, cast=cast)
return None
def set_template_dict(self, template_dict):
pass
type_checks = {
'&PyLong_Type': ('PyLong_Check', 'int'),
'&PyTuple_Type': ('PyTuple_Check', 'tuple'),