From 720da97f59497af1bcd40a82e62254b0a790a006 Mon Sep 17 00:00:00 2001 From: mappu Date: Sun, 25 Aug 2024 12:49:51 +1200 Subject: [PATCH] genbindings: support optional parameters for ctors --- cmd/genbindings/transformoptional.go | 42 ++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/cmd/genbindings/transformoptional.go b/cmd/genbindings/transformoptional.go index 3cf1800..2546442 100644 --- a/cmd/genbindings/transformoptional.go +++ b/cmd/genbindings/transformoptional.go @@ -10,6 +10,10 @@ func astTransformOptional(parsed *CppParsedHeader) { for i, c := range parsed.Classes { anyChange := false + + // Methods + // ``````` + for j, m := range c.Methods { // Search for first optional parameter (they all must be last) @@ -48,6 +52,44 @@ func astTransformOptional(parsed *CppParsedHeader) { c.Methods[j] = m } + // Constructors + // ```````````` + + for j, m := range c.Ctors { + + // Search for first optional parameter (they all must be last) + optionalStart := -1 + for k, p := range m.Parameters { + if p.Optional { + optionalStart = k + break + } + } + if optionalStart == -1 { + continue // There were no optional parameters + } + + anyChange = true + + // Add ctor copies + for x := optionalStart; x < len(m.Parameters); x++ { + dupCtor := CppMethod{ + ReturnType: m.ReturnType, + Parameters: nil, + IsStatic: m.IsStatic, + HasHiddenParams: (x != len(m.Parameters)-1), + } + dupCtor.Parameters = append(dupCtor.Parameters, m.Parameters[0:x+1]...) + c.Ctors = append(c.Ctors, dupCtor) + } + + // Truncate the original ctor's parameters to only the + // mandatory ones + m.Parameters = m.Parameters[0:optionalStart] + m.HasHiddenParams = true + c.Ctors[j] = m + } + if anyChange { parsed.Classes[i] = c }