func handleFunctionCursor(cursor clang.Cursor) *Function { fname := cursor.Spelling() f := Function{ Name: fname, CName: fname, Comment: CleanDoxygenComment(cursor.RawCommentText()), IncludeFiles: newIncludeFiles(), Parameters: []FunctionParameter{}, } typ, err := typeFromClangType(cursor.ResultType()) if err != nil { panic(err) } f.ReturnType = typ numParam := int(cursor.NumArguments()) for i := 0; i < numParam; i++ { param := cursor.Argument(uint16(i)) p := FunctionParameter{ CName: param.DisplayName(), } typ, err := typeFromClangType(param.Type()) if err != nil { panic(err) } p.Type = typ p.Name = p.CName if p.Name == "" { p.Name = commonReceiverName(p.Type.GoName) } else { pns := strings.Split(p.Name, "_") for i := range pns { pns[i] = UpperFirstCharacter(pns[i]) } p.Name = LowerFirstCharacter(strings.Join(pns, "")) } if r := ReplaceGoKeywords(p.Name); r != "" { p.Name = r } f.Parameters = append(f.Parameters, p) } return &f }