diff -r 967f368b7f75 Tools/clinic/clinic.py --- a/Tools/clinic/clinic.py Sun Jan 19 00:38:36 2014 +0200 +++ b/Tools/clinic/clinic.py Tue Jan 21 14:08:43 2014 +0200 @@ -1879,7 +1879,7 @@ # Only used by format units ending with '#'. length = False - def __init__(self, name, function, default=unspecified, *, c_default=None, py_default=None, annotation=unspecified, **kwargs): + def __init__(self, name, function, default=unspecified, *, c_default=None, py_default=None, annotation=unspecified, c_name=None, **kwargs): self.function = function self.name = name @@ -1898,6 +1898,9 @@ if annotation != unspecified: fail("The 'annotation' parameter is not currently permitted.") + + self.c_name = ensure_legal_c_identifier(c_name if c_name is not None else name) + self.converter_init(**kwargs) def converter_init(self): @@ -1913,7 +1916,6 @@ """ self.parameter = parameter original_name = self.name - name = ensure_legal_c_identifier(original_name) # declarations d = self.declaration() @@ -1922,10 +1924,10 @@ # initializers initializers = self.initialize() if initializers: - data.initializers.append('/* initializers for ' + name + ' */\n' + initializers.rstrip()) + data.initializers.append('/* initializers for ' + self.c_name + ' */\n' + initializers.rstrip()) # impl_arguments - s = ("&" if self.impl_by_reference else "") + name + s = ("&" if self.impl_by_reference else "") + self.c_name data.impl_arguments.append(s) if self.length: data.impl_arguments.append(self.length_name()) @@ -1951,13 +1953,13 @@ # cleanup cleanup = self.cleanup() if cleanup: - data.cleanup.append('/* Cleanup for ' + name + ' */\n' + cleanup.rstrip() + "\n") + data.cleanup.append('/* Cleanup for ' + self.c_name + ' */\n' + cleanup.rstrip() + "\n") def length_name(self): """Computes the name of the associated "length" variable.""" if not self.length: return None - return ensure_legal_c_identifier(self.name) + "_length" + return self.c_name + "_length" # Why is this one broken out separately? # For "positional-only" function parsing, @@ -1973,8 +1975,7 @@ elif self.subclass_of: list.append(self.subclass_of) - legal_name = ensure_legal_c_identifier(self.name) - s = ("&" if self.parse_by_reference else "") + legal_name + s = ("&" if self.parse_by_reference else "") + self.c_name list.append(s) if self.length: @@ -1995,7 +1996,7 @@ prototype.append(" ") if by_reference: prototype.append('*') - prototype.append(ensure_legal_c_identifier(self.name)) + prototype.append(self.c_name) return "".join(prototype) def declaration(self): @@ -2323,8 +2324,7 @@ self.format_unit = format_unit def cleanup(self): - name = ensure_legal_c_identifier(self.name) - return "".join(["if (", name, ".obj)\n PyBuffer_Release(&", name, ");\n"]) + return "".join(["if (", self.c_name, ".obj)\n PyBuffer_Release(&", self.c_name, ");\n"]) class self_converter(CConverter): @@ -2337,18 +2337,18 @@ f = self.function if f.kind in (CALLABLE, METHOD_INIT): if f.cls: - self.name = "self" + self.name = self.c_name = "self" else: - self.name = "module" + self.name = self.c_name = "module" self.type = "PyModuleDef *" elif f.kind == STATIC_METHOD: - self.name = "null" + self.name = self.c_name = "null" self.type = "void *" elif f.kind == CLASS_METHOD: - self.name = "cls" + self.name = self.c_name = "cls" self.type = "PyTypeObject *" elif f.kind == METHOD_NEW: - self.name = "type" + self.name = self.c_name = "type" self.type = "PyTypeObject *" if type: