Skip to content

Commit

Permalink
bpo-38787: Fix Argument Clinic defining_class_converter (GH-20074)
Browse files Browse the repository at this point in the history
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.
  • Loading branch information
vstinner authored May 13, 2020
1 parent a15c9b3 commit 97e1568
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions Tools/clinic/clinic.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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'),
Expand Down

0 comments on commit 97e1568

Please sign in to comment.