diff -r 98678738b7e9 Modules/cmathmodule.c --- a/Modules/cmathmodule.c Sun May 01 20:34:00 2016 +0300 +++ b/Modules/cmathmodule.c Mon May 02 11:44:50 2016 +0300 @@ -27,20 +27,20 @@ class Py_complex_protected_return_conver 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 -r 98678738b7e9 Tools/clinic/clinic.py --- a/Tools/clinic/clinic.py Sun May 01 20:34:00 2016 +0300 +++ b/Tools/clinic/clinic.py Mon May 02 11:44:50 2016 +0300 @@ -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=CConverterAut 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): """