miqt/cmd/genbindings/transformchildclasses.go

44 lines
1.1 KiB
Go

package main
// takeChildren recursively takes the children of the class.
func takeChildren(c *CppClass) []CppClass {
if len(c.ChildClassdefs) == 0 {
return []CppClass{}
}
var ret []CppClass
for _, child := range c.ChildClassdefs {
ret = append(ret, takeChildren(&child)...)
child.ChildClassdefs = nil
ret = append(ret, child)
}
c.ChildClassdefs = nil
return ret
}
// astTransformChildClasses expands all classes with child class definitions
// into new top-level entries within the header.
func astTransformChildClasses(parsed *CppParsedHeader) {
var taken []CppClass
for i, c := range parsed.Classes {
nestedClasses := takeChildren(&parsed.Classes[i])
taken = append(taken, nestedClasses...)
// Also lift all child typedefs and enums
parsed.Typedefs = append(parsed.Typedefs, c.ChildTypedefs...)
parsed.Enums = append(parsed.Enums, c.ChildEnums...)
for _, nc := range nestedClasses {
parsed.Typedefs = append(parsed.Typedefs, nc.ChildTypedefs...)
parsed.Enums = append(parsed.Enums, nc.ChildEnums...)
}
}
parsed.Classes = append(parsed.Classes, taken...)
}