From ebe95fdabb42b02ff7eecab6bc9637cf5ccf1d2c Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Thu, 9 Jun 2016 16:02:15 +0300 Subject: [PATCH] Issue #26305: Argument Clinic now escapes braces. No need to double them. --- Modules/cmathmodule.c | 14 +++++++------- Tools/clinic/clinic.py | 27 ++++++++++++++------------- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/Modules/cmathmodule.c b/Modules/cmathmodule.c index 7f6c2c9df4f..82ea589e738 100644 --- a/Modules/cmathmodule.c +++ b/Modules/cmathmodule.c @@ -27,20 +27,20 @@ class Py_complex_protected_return_converter(CReturnConverter): self.declare(data) data.return_conversion.append(""" PyFPE_END_PROTECT(_return_value); -if (errno == EDOM) {{ +if (errno == EDOM) { PyErr_SetString(PyExc_ValueError, "math domain error"); goto exit; -}} -else if (errno == ERANGE) {{ +} +else if (errno == ERANGE) { PyErr_SetString(PyExc_OverflowError, "math range error"); goto exit; -}} -else {{ +} +else { return_value = PyComplex_FromCComplex(_return_value); -}} +} """.strip()) [python start generated code]*/ -/*[python end generated code: output=da39a3ee5e6b4b0d input=231019039a6fbb9a]*/ +/*[python end generated code: output=da39a3ee5e6b4b0d input=345daa075b1028e7]*/ #if (FLT_RADIX != 2 && FLT_RADIX != 16) #error "Modules/cmathmodule.c expects FLT_RADIX to be 2 or 16" diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py index 1d030bddd8f..1d851da9561 100755 --- a/Tools/clinic/clinic.py +++ b/Tools/clinic/clinic.py @@ -176,6 +176,13 @@ def rstrip_lines(s): text.pop() return output() +def format_escape(s): + # double up curly-braces, this string will be used + # as part of a format_map() template later + s = s.replace('{', '{{') + s = s.replace('}', '}}') + return s + def linear_format(s, **kwargs): """ Perform str.format-like substitution, except: @@ -996,7 +1003,7 @@ class CLanguage(Language): count_min = sys.maxsize count_max = -1 - add("switch (PyTuple_GET_SIZE(args)) {{\n") + add("switch (PyTuple_GET_SIZE(args)) {\n") for subset in permute_optional_groups(left, required, right): count = len(subset) count_min = min(count_min, count) @@ -1012,7 +1019,6 @@ class CLanguage(Language): d = {} d['count'] = count d['name'] = f.name - d['groups'] = sorted(group_ids) d['format_units'] = "".join(p.converter.format_unit for p in subset) parse_arguments = [] @@ -1039,8 +1045,8 @@ class CLanguage(Language): s = ' PyErr_SetString(PyExc_TypeError, "{} requires {} to {} arguments");\n' add(s.format(f.full_name, count_min, count_max)) add(' goto exit;\n') - add("}}") - template_dict['option_group_parsing'] = output() + add("}") + template_dict['option_group_parsing'] = format_escape(output()) def render_function(self, clinic, f): if not f: @@ -1135,7 +1141,7 @@ class CLanguage(Language): f.return_converter.render(f, data) template_dict['impl_return_type'] = f.return_converter.type - template_dict['declarations'] = "\n".join(data.declarations) + template_dict['declarations'] = format_escape("\n".join(data.declarations)) template_dict['initializers'] = "\n\n".join(data.initializers) template_dict['modifications'] = '\n\n'.join(data.modifications) template_dict['keywords'] = '"' + '", "'.join(data.keywords) + '"' @@ -1143,8 +1149,8 @@ class CLanguage(Language): template_dict['parse_arguments'] = ', '.join(data.parse_arguments) template_dict['impl_parameters'] = ", ".join(data.impl_parameters) template_dict['impl_arguments'] = ", ".join(data.impl_arguments) - template_dict['return_conversion'] = "".join(data.return_conversion).rstrip() - template_dict['cleanup'] = "".join(data.cleanup) + template_dict['return_conversion'] = format_escape("".join(data.return_conversion).rstrip()) + template_dict['cleanup'] = format_escape("".join(data.cleanup)) template_dict['return_value'] = data.return_value # used by unpack tuple code generator @@ -2439,12 +2445,7 @@ class CConverter(metaclass=CConverterAutoRegister): declaration.append('\nPy_ssize_clean_t ') declaration.append(self.length_name()) declaration.append(';') - s = "".join(declaration) - # double up curly-braces, this string will be used - # as part of a format_map() template later - s = s.replace("{", "{{") - s = s.replace("}", "}}") - return s + return "".join(declaration) def initialize(self): """