From c93eb2cd00a8963135900538c69ee99666a1835b Mon Sep 17 00:00:00 2001 From: mappu Date: Fri, 11 Apr 2025 22:20:20 +1200 Subject: [PATCH] genbindings/transform: move "With" names outside the proposedName ctr --- cmd/genbindings/transformoverload.go | 52 +++++++++++++++------------- 1 file changed, 27 insertions(+), 25 deletions(-) diff --git a/cmd/genbindings/transformoverload.go b/cmd/genbindings/transformoverload.go index 55d9c92a..636362a7 100644 --- a/cmd/genbindings/transformoverload.go +++ b/cmd/genbindings/transformoverload.go @@ -29,39 +29,41 @@ func astTransformOverloads(parsed *CppParsedHeader) { // Collision - rename anyChange = true - ctr := 1 - for { + proposedName = (func() (proposedName string) { - if ctr == 1 { - // Fake special-case check - // If this is a 1-argument function, try and name it FooFrom{Type} - // e.g. NewVariantFromFloat - if len(m.Parameters) == 1 { - - // If the parameter has a proper name (i.e. not 'l' or 'param1') - // then go with that - if len(m.Parameters[0].ParameterName) > 1 && !strings.HasPrefix(m.Parameters[0].ParameterName, "param") { - proposedName = originalProposal + "With" + titleCase(m.Parameters[0].ParameterName) - } else { - // Try the type instead - proposedName = originalProposal + "With" + titleCase(m.Parameters[0].renderTypeForMethod()) - } - if _, ok := existing[proposedName]; !ok { - break - } + // Fake special-case check + // If this is a 1-argument function, try and name it FooFrom{Type} + // e.g. NewVariantFromFloat + if len(m.Parameters) == 1 { + // If the parameter has a proper name (i.e. not 'l' or 'param1') + // then go with that + if len(m.Parameters[0].ParameterName) > 1 && !strings.HasPrefix(m.Parameters[0].ParameterName, "param") { + proposedName = originalProposal + "With" + titleCase(m.Parameters[0].ParameterName) + } else { + // Try the type instead + proposedName = originalProposal + "With" + titleCase(m.Parameters[0].renderTypeForMethod()) } - - } else { - proposedName = fmt.Sprintf("%s%d", originalProposal, ctr) if _, ok := existing[proposedName]; !ok { - break + return proposedName } + } - ctr++ // Loop until we have a non-colliding name available - } + // No special naming, have to use a numeric overload + // Numbers start with 2 since the "original" is the first + ctr := 2 + for { + proposedName = fmt.Sprintf("%s%d", originalProposal, ctr) + if _, ok := existing[proposedName]; !ok { + return proposedName + } + ctr++ // Loop until we have a non-colliding name available + } + })() + + // We have identified a final replacement name existing[proposedName] = struct{}{} m.Rename(proposedName) c.Methods[j] = m