Zig言語でlibClangを使ってObjective-Cのヘッダファイルをパースする

## 事前準備

`libClang`をリンクするため、事前に`LLVM`をインストールしておく。
当環境は`MacOS`なので`Home Brew`でインストールした。

```
brew install llvm
```

また、以下のパスにヘッダファイルとライブラリのフォルダのシンボリックリンクを張っておく。

```
/usr/local/include/llvm
/usr/local/lib/llvm
```

## 環境

* OS: MacOS 13.3 
* LLVM: 15.0.7_1 [^1]
* zig: 0.11.0-dev.2969+855493bb8 [^2]

[^1]: 2023-6-4時点で16.0.5 が最新。古いバージョンを使っているのは単に入れ直すのが面倒だっただけ
[^2]: 時期的には、2023-5-4頃のバージョン

## ビルドスクリプト(build.zig)

`libClang`がリンクされるよう構成する。

```zig
const std = @import("std");

pub fn build(b: *std.Build) void {
    const target = b.standardTargetOptions(.{});
    const optimize = b.standardOptimizeOption(.{});

    const exe = b.addExecutable(.{
        .name = "parse_applit_ast",
        .root_source_file = .{ .path = "src/main.zig" },
        .target = target,
        .optimize = optimize,
    });
    
    // パスとライブラリ名を設定する
    exe.addLibraryPath("/usr/local/lib/llvm");
    exe.linkSystemLibrary("clang");

    b.installArtifact(exe);
}
```

## ヘッダファイルのzigファイル化

`/usr/local/include/llvm/clang-c/Index.h`をトランスレートしてzigファイル化する。

```
# -I で検索パスを追加しておかないとエラーになる
zig translate-c -I/usr/local/include/llvm /usr/local/include/llvm/clang-c/Index.h > src/clang.zig
```

## 使用する定数をenumに束ねる

元のヘッダファイルでは`enum`だったものが、定数に置き換えられていて扱いづらいため、例示するコードで使用する以下の定数を`enum`に束ね直した。

zigファイル化したヘッダファイルは、

```zig
const clang = @import("clang.zig");
```

でインポートしている。


CXTranslationUnit

```zig
const CXTranslationUnit = enum(c_int) {
    DetailedPreprocessingRecord = clang.CXTranslationUnit_DetailedPreprocessingRecord,
    Incomplete = clang.CXTranslationUnit_Incomplete,
    PrecompiledPreamble = clang.CXTranslationUnit_PrecompiledPreamble,
    CacheCompletionResults = clang.CXTranslationUnit_CacheCompletionResults,
    ForSerialization = clang.CXTranslationUnit_ForSerialization,
    CXXChainedPCH = clang.CXTranslationUnit_CXXChainedPCH,
    SkipFunctionBodies = clang.CXTranslationUnit_SkipFunctionBodies,
    IncludeBriefCommentsInCodeCompletion = clang.CXTranslationUnit_IncludeBriefCommentsInCodeCompletion,
    CreatePreambleOnFirstParse = clang.CXTranslationUnit_CreatePreambleOnFirstParse,
    KeepGoing = clang.CXTranslationUnit_KeepGoing,
    SingleFileParse = clang.CXTranslationUnit_SingleFileParse, //
    LimitSkipFunctionBodiesToPreamble = clang.CXTranslationUnit_LimitSkipFunctionBodiesToPreamble,
    IncludeAttributedTypes = clang.CXTranslationUnit_IncludeAttributedTypes,
    VisitImplicitAttributes = clang.CXTranslationUnit_VisitImplicitAttributes,
    IgnoreNonErrorsFromIncludedFiles = clang.CXTranslationUnit_IgnoreNonErrorsFromIncludedFiles,
    RetainExcludedConditionalBlocks = clang.CXTranslationUnit_RetainExcludedConditionalBlocks,
};
```

CXTranslationUnit はフラグセットとして使用したいため、`std.enums.EnumSet`でラップする。

```zig
const CXTranslationUnitOptions = std.enums.EnumSet(CXTranslationUnit);
```

CXChildVisitResult

```zig
const CXChildVisitResult = enum(c_uint) {
    Break = clang.CXChildVisit_Break,
    Continue = clang.CXChildVisit_Continue,
    Recurse = clang.CXChildVisit_Recurse,
};
```

<details><summary>CXCursorKind (長いので折り畳み)</summary>

```zig
// 同じ定数値に別の名前が割り当てられている箇所はコメントアウトし除外している
const CXCursorKind = enum(c_int) {
    UnexposedDecl = clang.CXCursor_UnexposedDecl,
    StructDecl = clang.CXCursor_StructDecl,
    UnionDecl = clang.CXCursor_UnionDecl,
    ClassDecl = clang.CXCursor_ClassDecl,
    EnumDecl = clang.CXCursor_EnumDecl,
    FieldDecl = clang.CXCursor_FieldDecl,
    EnumConstantDecl = clang.CXCursor_EnumConstantDecl,
    FunctionDecl = clang.CXCursor_FunctionDecl,
    VarDecl = clang.CXCursor_VarDecl,
    ParmDecl = clang.CXCursor_ParmDecl,
    ObjCInterfaceDecl = clang.CXCursor_ObjCInterfaceDecl,
    ObjCCategoryDecl = clang.CXCursor_ObjCCategoryDecl,
    ObjCProtocolDecl = clang.CXCursor_ObjCProtocolDecl,
    ObjCPropertyDecl = clang.CXCursor_ObjCPropertyDecl,
    ObjCIvarDecl = clang.CXCursor_ObjCIvarDecl,
    ObjCInstanceMethodDecl = clang.CXCursor_ObjCInstanceMethodDecl,
    ObjCClassMethodDecl = clang.CXCursor_ObjCClassMethodDecl,
    ObjCImplementationDecl = clang.CXCursor_ObjCImplementationDecl,
    ObjCCategoryImplDecl = clang.CXCursor_ObjCCategoryImplDecl,
    TypedefDecl = clang.CXCursor_TypedefDecl,
    CXXMethod = clang.CXCursor_CXXMethod,
    Namespace = clang.CXCursor_Namespace,
    LinkageSpec = clang.CXCursor_LinkageSpec,
    Constructor = clang.CXCursor_Constructor,
    Destructor = clang.CXCursor_Destructor,
    ConversionFunction = clang.CXCursor_ConversionFunction,
    TemplateTypeParameter = clang.CXCursor_TemplateTypeParameter,
    NonTypeTemplateParameter = clang.CXCursor_NonTypeTemplateParameter,
    TemplateTemplateParameter = clang.CXCursor_TemplateTemplateParameter,
    FunctionTemplate = clang.CXCursor_FunctionTemplate,
    ClassTemplate = clang.CXCursor_ClassTemplate,
    ClassTemplatePartialSpecialization = clang.CXCursor_ClassTemplatePartialSpecialization,
    NamespaceAlias = clang.CXCursor_NamespaceAlias,
    UsingDirective = clang.CXCursor_UsingDirective,
    UsingDeclaration = clang.CXCursor_UsingDeclaration,
    TypeAliasDecl = clang.CXCursor_TypeAliasDecl,
    ObjCSynthesizeDecl = clang.CXCursor_ObjCSynthesizeDecl,
    ObjCDynamicDecl = clang.CXCursor_ObjCDynamicDecl,
    CXXAccessSpecifier = clang.CXCursor_CXXAccessSpecifier,
    // FirstDecl = clang.CXCursor_FirstDecl,
    // LastDecl = clang.CXCursor_LastDecl,
    // FirstRef = clang.CXCursor_FirstRef,
    ObjCSuperClassRef = clang.CXCursor_ObjCSuperClassRef,
    ObjCProtocolRef = clang.CXCursor_ObjCProtocolRef,
    ObjCClassRef = clang.CXCursor_ObjCClassRef,
    TypeRef = clang.CXCursor_TypeRef,
    CXXBaseSpecifier = clang.CXCursor_CXXBaseSpecifier,
    TemplateRef = clang.CXCursor_TemplateRef,
    NamespaceRef = clang.CXCursor_NamespaceRef,
    MemberRef = clang.CXCursor_MemberRef,
    LabelRef = clang.CXCursor_LabelRef,
    OverloadedDeclRef = clang.CXCursor_OverloadedDeclRef,
    VariableRef = clang.CXCursor_VariableRef,
    // LastRef = clang.CXCursor_LastRef,
    // FirstInvalid = clang.CXCursor_FirstInvalid,
    InvalidFile = clang.CXCursor_InvalidFile,
    NoDeclFound = clang.CXCursor_NoDeclFound,
    NotImplemented = clang.CXCursor_NotImplemented,
    InvalidCode = clang.CXCursor_InvalidCode,
    // LastInvalid = clang.CXCursor_LastInvalid,
    // FirstExpr = clang.CXCursor_FirstExpr,
    UnexposedExpr = clang.CXCursor_UnexposedExpr,
    DeclRefExpr = clang.CXCursor_DeclRefExpr,
    MemberRefExpr = clang.CXCursor_MemberRefExpr,
    CallExpr = clang.CXCursor_CallExpr,
    ObjCMessageExpr = clang.CXCursor_ObjCMessageExpr,
    BlockExpr = clang.CXCursor_BlockExpr,
    IntegerLiteral = clang.CXCursor_IntegerLiteral,
    FloatingLiteral = clang.CXCursor_FloatingLiteral,
    ImaginaryLiteral = clang.CXCursor_ImaginaryLiteral,
    StringLiteral = clang.CXCursor_StringLiteral,
    CharacterLiteral = clang.CXCursor_CharacterLiteral,
    ParenExpr = clang.CXCursor_ParenExpr,
    UnaryOperator = clang.CXCursor_UnaryOperator,
    ArraySubscriptExpr = clang.CXCursor_ArraySubscriptExpr,
    BinaryOperator = clang.CXCursor_BinaryOperator,
    CompoundAssignOperator = clang.CXCursor_CompoundAssignOperator,
    ConditionalOperator = clang.CXCursor_ConditionalOperator,
    CStyleCastExpr = clang.CXCursor_CStyleCastExpr,
    CompoundLiteralExpr = clang.CXCursor_CompoundLiteralExpr,
    InitListExpr = clang.CXCursor_InitListExpr,
    AddrLabelExpr = clang.CXCursor_AddrLabelExpr,
    StmtExpr = clang.CXCursor_StmtExpr,
    GenericSelectionExpr = clang.CXCursor_GenericSelectionExpr,
    GNUNullExpr = clang.CXCursor_GNUNullExpr,
    CXXStaticCastExpr = clang.CXCursor_CXXStaticCastExpr,
    CXXDynamicCastExpr = clang.CXCursor_CXXDynamicCastExpr,
    CXXReinterpretCastExpr = clang.CXCursor_CXXReinterpretCastExpr,
    CXXConstCastExpr = clang.CXCursor_CXXConstCastExpr,
    CXXFunctionalCastExpr = clang.CXCursor_CXXFunctionalCastExpr,
    CXXTypeidExpr = clang.CXCursor_CXXTypeidExpr,
    CXXBoolLiteralExpr = clang.CXCursor_CXXBoolLiteralExpr,
    CXXNullPtrLiteralExpr = clang.CXCursor_CXXNullPtrLiteralExpr,
    CXXThisExpr = clang.CXCursor_CXXThisExpr,
    CXXThrowExpr = clang.CXCursor_CXXThrowExpr,
    CXXNewExpr = clang.CXCursor_CXXNewExpr,
    CXXDeleteExpr = clang.CXCursor_CXXDeleteExpr,
    UnaryExpr = clang.CXCursor_UnaryExpr,
    ObjCStringLiteral = clang.CXCursor_ObjCStringLiteral,
    ObjCEncodeExpr = clang.CXCursor_ObjCEncodeExpr,
    ObjCSelectorExpr = clang.CXCursor_ObjCSelectorExpr,
    ObjCProtocolExpr = clang.CXCursor_ObjCProtocolExpr,
    ObjCBridgedCastExpr = clang.CXCursor_ObjCBridgedCastExpr,
    PackExpansionExpr = clang.CXCursor_PackExpansionExpr,
    SizeOfPackExpr = clang.CXCursor_SizeOfPackExpr,
    LambdaExpr = clang.CXCursor_LambdaExpr,
    ObjCBoolLiteralExpr = clang.CXCursor_ObjCBoolLiteralExpr,
    ObjCSelfExpr = clang.CXCursor_ObjCSelfExpr,
    OMPArraySectionExpr = clang.CXCursor_OMPArraySectionExpr,
    ObjCAvailabilityCheckExpr = clang.CXCursor_ObjCAvailabilityCheckExpr,
    FixedPointLiteral = clang.CXCursor_FixedPointLiteral,
    OMPArrayShapingExpr = clang.CXCursor_OMPArrayShapingExpr,
    OMPIteratorExpr = clang.CXCursor_OMPIteratorExpr,
    CXXAddrspaceCastExpr = clang.CXCursor_CXXAddrspaceCastExpr,
    ConceptSpecializationExpr = clang.CXCursor_ConceptSpecializationExpr,
    RequiresExpr = clang.CXCursor_RequiresExpr,
    // LastExpr = clang.CXCursor_LastExpr,
    // FirstStmt = clang.CXCursor_FirstStmt,
    UnexposedStmt = clang.CXCursor_UnexposedStmt,
    LabelStmt = clang.CXCursor_LabelStmt,
    CompoundStmt = clang.CXCursor_CompoundStmt,
    CaseStmt = clang.CXCursor_CaseStmt,
    DefaultStmt = clang.CXCursor_DefaultStmt,
    IfStmt = clang.CXCursor_IfStmt,
    SwitchStmt = clang.CXCursor_SwitchStmt,
    WhileStmt = clang.CXCursor_WhileStmt,
    DoStmt = clang.CXCursor_DoStmt,
    ForStmt = clang.CXCursor_ForStmt,
    GotoStmt = clang.CXCursor_GotoStmt,
    IndirectGotoStmt = clang.CXCursor_IndirectGotoStmt,
    ContinueStmt = clang.CXCursor_ContinueStmt,
    BreakStmt = clang.CXCursor_BreakStmt,
    ReturnStmt = clang.CXCursor_ReturnStmt,
    // GCCAsmStmt = clang.CXCursor_GCCAsmStmt,
    AsmStmt = clang.CXCursor_AsmStmt,
    ObjCAtTryStmt = clang.CXCursor_ObjCAtTryStmt,
    ObjCAtCatchStmt = clang.CXCursor_ObjCAtCatchStmt,
    ObjCAtFinallyStmt = clang.CXCursor_ObjCAtFinallyStmt,
    ObjCAtThrowStmt = clang.CXCursor_ObjCAtThrowStmt,
    ObjCAtSynchronizedStmt = clang.CXCursor_ObjCAtSynchronizedStmt,
    ObjCAutoreleasePoolStmt = clang.CXCursor_ObjCAutoreleasePoolStmt,
    ObjCForCollectionStmt = clang.CXCursor_ObjCForCollectionStmt,
    CXXCatchStmt = clang.CXCursor_CXXCatchStmt,
    CXXTryStmt = clang.CXCursor_CXXTryStmt,
    CXXForRangeStmt = clang.CXCursor_CXXForRangeStmt,
    SEHTryStmt = clang.CXCursor_SEHTryStmt,
    SEHExceptStmt = clang.CXCursor_SEHExceptStmt,
    SEHFinallyStmt = clang.CXCursor_SEHFinallyStmt,
    MSAsmStmt = clang.CXCursor_MSAsmStmt,
    NullStmt = clang.CXCursor_NullStmt,
    DeclStmt = clang.CXCursor_DeclStmt,
    OMPParallelDirective = clang.CXCursor_OMPParallelDirective,
    OMPSimdDirective = clang.CXCursor_OMPSimdDirective,
    OMPForDirective = clang.CXCursor_OMPForDirective,
    OMPSectionsDirective = clang.CXCursor_OMPSectionsDirective,
    OMPSectionDirective = clang.CXCursor_OMPSectionDirective,
    OMPSingleDirective = clang.CXCursor_OMPSingleDirective,
    OMPParallelForDirective = clang.CXCursor_OMPParallelForDirective,
    OMPParallelSectionsDirective = clang.CXCursor_OMPParallelSectionsDirective,
    OMPTaskDirective = clang.CXCursor_OMPTaskDirective,
    OMPMasterDirective = clang.CXCursor_OMPMasterDirective,
    OMPCriticalDirective = clang.CXCursor_OMPCriticalDirective,
    OMPTaskyieldDirective = clang.CXCursor_OMPTaskyieldDirective,
    OMPBarrierDirective = clang.CXCursor_OMPBarrierDirective,
    OMPTaskwaitDirective = clang.CXCursor_OMPTaskwaitDirective,
    OMPFlushDirective = clang.CXCursor_OMPFlushDirective,
    SEHLeaveStmt = clang.CXCursor_SEHLeaveStmt,
    OMPOrderedDirective = clang.CXCursor_OMPOrderedDirective,
    OMPAtomicDirective = clang.CXCursor_OMPAtomicDirective,
    OMPForSimdDirective = clang.CXCursor_OMPForSimdDirective,
    OMPParallelForSimdDirective = clang.CXCursor_OMPParallelForSimdDirective,
    OMPTargetDirective = clang.CXCursor_OMPTargetDirective,
    OMPTeamsDirective = clang.CXCursor_OMPTeamsDirective,
    OMPTaskgroupDirective = clang.CXCursor_OMPTaskgroupDirective,
    OMPCancellationPointDirective = clang.CXCursor_OMPCancellationPointDirective,
    OMPCancelDirective = clang.CXCursor_OMPCancelDirective,
    OMPTargetDataDirective = clang.CXCursor_OMPTargetDataDirective,
    OMPTaskLoopDirective = clang.CXCursor_OMPTaskLoopDirective,
    OMPTaskLoopSimdDirective = clang.CXCursor_OMPTaskLoopSimdDirective,
    OMPDistributeDirective = clang.CXCursor_OMPDistributeDirective,
    OMPTargetEnterDataDirective = clang.CXCursor_OMPTargetEnterDataDirective,
    OMPTargetExitDataDirective = clang.CXCursor_OMPTargetExitDataDirective,
    OMPTargetParallelDirective = clang.CXCursor_OMPTargetParallelDirective,
    OMPTargetParallelForDirective = clang.CXCursor_OMPTargetParallelForDirective,
    OMPTargetUpdateDirective = clang.CXCursor_OMPTargetUpdateDirective,
    OMPDistributeParallelForDirective = clang.CXCursor_OMPDistributeParallelForDirective,
    OMPDistributeParallelForSimdDirective = clang.CXCursor_OMPDistributeParallelForSimdDirective,
    OMPDistributeSimdDirective = clang.CXCursor_OMPDistributeSimdDirective,
    OMPTargetParallelForSimdDirective = clang.CXCursor_OMPTargetParallelForSimdDirective,
    OMPTargetSimdDirective = clang.CXCursor_OMPTargetSimdDirective,
    OMPTeamsDistributeDirective = clang.CXCursor_OMPTeamsDistributeDirective,
    OMPTeamsDistributeSimdDirective = clang.CXCursor_OMPTeamsDistributeSimdDirective,
    OMPTeamsDistributeParallelForSimdDirective = clang.CXCursor_OMPTeamsDistributeParallelForSimdDirective,
    OMPTeamsDistributeParallelForDirective = clang.CXCursor_OMPTeamsDistributeParallelForDirective,
    OMPTargetTeamsDirective = clang.CXCursor_OMPTargetTeamsDirective,
    OMPTargetTeamsDistributeDirective = clang.CXCursor_OMPTargetTeamsDistributeDirective,
    OMPTargetTeamsDistributeParallelForDirective = clang.CXCursor_OMPTargetTeamsDistributeParallelForDirective,
    OMPTargetTeamsDistributeParallelForSimdDirective = clang.CXCursor_OMPTargetTeamsDistributeParallelForSimdDirective,
    OMPTargetTeamsDistributeSimdDirective = clang.CXCursor_OMPTargetTeamsDistributeSimdDirective,
    BuiltinBitCastExpr = clang.CXCursor_BuiltinBitCastExpr,
    OMPMasterTaskLoopDirective = clang.CXCursor_OMPMasterTaskLoopDirective,
    OMPParallelMasterTaskLoopDirective = clang.CXCursor_OMPParallelMasterTaskLoopDirective,
    OMPMasterTaskLoopSimdDirective = clang.CXCursor_OMPMasterTaskLoopSimdDirective,
    OMPParallelMasterTaskLoopSimdDirective = clang.CXCursor_OMPParallelMasterTaskLoopSimdDirective,
    OMPParallelMasterDirective = clang.CXCursor_OMPParallelMasterDirective,
    OMPDepobjDirective = clang.CXCursor_OMPDepobjDirective,
    OMPScanDirective = clang.CXCursor_OMPScanDirective,
    OMPTileDirective = clang.CXCursor_OMPTileDirective,
    OMPCanonicalLoop = clang.CXCursor_OMPCanonicalLoop,
    OMPInteropDirective = clang.CXCursor_OMPInteropDirective,
    OMPDispatchDirective = clang.CXCursor_OMPDispatchDirective,
    OMPMaskedDirective = clang.CXCursor_OMPMaskedDirective,
    OMPUnrollDirective = clang.CXCursor_OMPUnrollDirective,
    OMPMetaDirective = clang.CXCursor_OMPMetaDirective,
    OMPGenericLoopDirective = clang.CXCursor_OMPGenericLoopDirective,
    OMPTeamsGenericLoopDirective = clang.CXCursor_OMPTeamsGenericLoopDirective,
    OMPTargetTeamsGenericLoopDirective = clang.CXCursor_OMPTargetTeamsGenericLoopDirective,
    OMPParallelGenericLoopDirective = clang.CXCursor_OMPParallelGenericLoopDirective,
    OMPTargetParallelGenericLoopDirective = clang.CXCursor_OMPTargetParallelGenericLoopDirective,
    OMPParallelMaskedDirective = clang.CXCursor_OMPParallelMaskedDirective,
    OMPMaskedTaskLoopDirective = clang.CXCursor_OMPMaskedTaskLoopDirective,
    OMPMaskedTaskLoopSimdDirective = clang.CXCursor_OMPMaskedTaskLoopSimdDirective,
    OMPParallelMaskedTaskLoopDirective = clang.CXCursor_OMPParallelMaskedTaskLoopDirective,
    OMPParallelMaskedTaskLoopSimdDirective = clang.CXCursor_OMPParallelMaskedTaskLoopSimdDirective,
    // LastStmt = clang.CXCursor_LastStmt,
    TranslationUnit = clang.CXCursor_TranslationUnit,
    // FirstAttr = clang.CXCursor_FirstAttr,
    UnexposedAttr = clang.CXCursor_UnexposedAttr,
    IBActionAttr = clang.CXCursor_IBActionAttr,
    IBOutletAttr = clang.CXCursor_IBOutletAttr,
    IBOutletCollectionAttr = clang.CXCursor_IBOutletCollectionAttr,
    CXXFinalAttr = clang.CXCursor_CXXFinalAttr,
    CXXOverrideAttr = clang.CXCursor_CXXOverrideAttr,
    AnnotateAttr = clang.CXCursor_AnnotateAttr,
    AsmLabelAttr = clang.CXCursor_AsmLabelAttr,
    PackedAttr = clang.CXCursor_PackedAttr,
    PureAttr = clang.CXCursor_PureAttr,
    ConstAttr = clang.CXCursor_ConstAttr,
    NoDuplicateAttr = clang.CXCursor_NoDuplicateAttr,
    CUDAConstantAttr = clang.CXCursor_CUDAConstantAttr,
    CUDADeviceAttr = clang.CXCursor_CUDADeviceAttr,
    CUDAGlobalAttr = clang.CXCursor_CUDAGlobalAttr,
    CUDAHostAttr = clang.CXCursor_CUDAHostAttr,
    CUDASharedAttr = clang.CXCursor_CUDASharedAttr,
    VisibilityAttr = clang.CXCursor_VisibilityAttr,
    DLLExport = clang.CXCursor_DLLExport,
    DLLImport = clang.CXCursor_DLLImport,
    NSReturnsRetained = clang.CXCursor_NSReturnsRetained,
    NSReturnsNotRetained = clang.CXCursor_NSReturnsNotRetained,
    NSReturnsAutoreleased = clang.CXCursor_NSReturnsAutoreleased,
    NSConsumesSelf = clang.CXCursor_NSConsumesSelf,
    NSConsumed = clang.CXCursor_NSConsumed,
    ObjCException = clang.CXCursor_ObjCException,
    ObjCNSObject = clang.CXCursor_ObjCNSObject,
    ObjCIndependentClass = clang.CXCursor_ObjCIndependentClass,
    ObjCPreciseLifetime = clang.CXCursor_ObjCPreciseLifetime,
    ObjCReturnsInnerPointer = clang.CXCursor_ObjCReturnsInnerPointer,
    ObjCRequiresSuper = clang.CXCursor_ObjCRequiresSuper,
    ObjCRootClass = clang.CXCursor_ObjCRootClass,
    ObjCSubclassingRestricted = clang.CXCursor_ObjCSubclassingRestricted,
    ObjCExplicitProtocolImpl = clang.CXCursor_ObjCExplicitProtocolImpl,
    ObjCDesignatedInitializer = clang.CXCursor_ObjCDesignatedInitializer,
    ObjCRuntimeVisible = clang.CXCursor_ObjCRuntimeVisible,
    ObjCBoxable = clang.CXCursor_ObjCBoxable,
    FlagEnum = clang.CXCursor_FlagEnum,
    ConvergentAttr = clang.CXCursor_ConvergentAttr,
    WarnUnusedAttr = clang.CXCursor_WarnUnusedAttr,
    WarnUnusedResultAttr = clang.CXCursor_WarnUnusedResultAttr,
    AlignedAttr = clang.CXCursor_AlignedAttr,
    // LastAttr = clang.CXCursor_LastAttr,
    PreprocessingDirective = clang.CXCursor_PreprocessingDirective,
    MacroDefinition = clang.CXCursor_MacroDefinition,
    MacroExpansion = clang.CXCursor_MacroExpansion,
    // MacroInstantiation = clang.CXCursor_MacroInstantiation,
    InclusionDirective = clang.CXCursor_InclusionDirective,
    // FirstPreprocessing = clang.CXCursor_FirstPreprocessing,
    // LastPreprocessing = clang.CXCursor_LastPreprocessing,
    ModuleImportDecl = clang.CXCursor_ModuleImportDecl,
    TypeAliasTemplateDecl = clang.CXCursor_TypeAliasTemplateDecl,
    StaticAssert = clang.CXCursor_StaticAssert,
    FriendDecl = clang.CXCursor_FriendDecl,
    ConceptDecl = clang.CXCursor_ConceptDecl,
    // FirstExtraDecl = clang.CXCursor_FirstExtraDecl,
    // LastExtraDecl = clang.CXCursor_LastExtraDecl,
    OverloadCandidate = clang.CXCursor_OverloadCandidate,
};
```
</details>

<details><summary>CXTypeKind (長いので折り畳み)</summary>

```zig
const CXTypeKind = enum(c_int) {
    Invalid = clang.CXType_Invalid,
    Unexposed = clang.CXType_Unexposed,
    Void = clang.CXType_Void,
    Bool = clang.CXType_Bool,
    Char_U = clang.CXType_Char_U,
    UChar = clang.CXType_UChar,
    Char16 = clang.CXType_Char16,
    Char32 = clang.CXType_Char32,
    UShort = clang.CXType_UShort,
    UInt = clang.CXType_UInt,
    ULong = clang.CXType_ULong,
    ULongLong = clang.CXType_ULongLong,
    UInt128 = clang.CXType_UInt128,
    Char_S = clang.CXType_Char_S,
    SChar = clang.CXType_SChar,
    WChar = clang.CXType_WChar,
    Short = clang.CXType_Short,
    Int = clang.CXType_Int,
    Long = clang.CXType_Long,
    LongLong = clang.CXType_LongLong,
    Int128 = clang.CXType_Int128,
    Float = clang.CXType_Float,
    Double = clang.CXType_Double,
    LongDouble = clang.CXType_LongDouble,
    NullPtr = clang.CXType_NullPtr,
    Overload = clang.CXType_Overload,
    Dependent = clang.CXType_Dependent,
    ObjCId = clang.CXType_ObjCId,
    ObjCClass = clang.CXType_ObjCClass,
    ObjCSel = clang.CXType_ObjCSel,
    Float128 = clang.CXType_Float128,
    Half = clang.CXType_Half,
    Float16 = clang.CXType_Float16,
    ShortAccum = clang.CXType_ShortAccum,
    Accum = clang.CXType_Accum,
    LongAccum = clang.CXType_LongAccum,
    UShortAccum = clang.CXType_UShortAccum,
    UAccum = clang.CXType_UAccum,
    ULongAccum = clang.CXType_ULongAccum,
    BFloat16 = clang.CXType_BFloat16,
    Ibm128 = clang.CXType_Ibm128,
    // FirstBuiltin = clang.CXType_FirstBuiltin,
    // LastBuiltin = clang.CXType_LastBuiltin,
    Complex = clang.CXType_Complex,
    Pointer = clang.CXType_Pointer,
    BlockPointer = clang.CXType_BlockPointer,
    LValueReference = clang.CXType_LValueReference,
    RValueReference = clang.CXType_RValueReference,
    Record = clang.CXType_Record,
    Enum = clang.CXType_Enum,
    Typedef = clang.CXType_Typedef,
    ObjCInterface = clang.CXType_ObjCInterface,
    ObjCObjectPointer = clang.CXType_ObjCObjectPointer,
    FunctionNoProto = clang.CXType_FunctionNoProto,
    FunctionProto = clang.CXType_FunctionProto,
    ConstantArray = clang.CXType_ConstantArray,
    Vector = clang.CXType_Vector,
    IncompleteArray = clang.CXType_IncompleteArray,
    VariableArray = clang.CXType_VariableArray,
    DependentSizedArray = clang.CXType_DependentSizedArray,
    MemberPointer = clang.CXType_MemberPointer,
    Auto = clang.CXType_Auto,
    Elaborated = clang.CXType_Elaborated,
    Pipe = clang.CXType_Pipe,
    OCLImage1dRO = clang.CXType_OCLImage1dRO,
    OCLImage1dArrayRO = clang.CXType_OCLImage1dArrayRO,
    OCLImage1dBufferRO = clang.CXType_OCLImage1dBufferRO,
    OCLImage2dRO = clang.CXType_OCLImage2dRO,
    OCLImage2dArrayRO = clang.CXType_OCLImage2dArrayRO,
    OCLImage2dDepthRO = clang.CXType_OCLImage2dDepthRO,
    OCLImage2dArrayDepthRO = clang.CXType_OCLImage2dArrayDepthRO,
    OCLImage2dMSAARO = clang.CXType_OCLImage2dMSAARO,
    OCLImage2dArrayMSAARO = clang.CXType_OCLImage2dArrayMSAARO,
    OCLImage2dMSAADepthRO = clang.CXType_OCLImage2dMSAADepthRO,
    OCLImage2dArrayMSAADepthRO = clang.CXType_OCLImage2dArrayMSAADepthRO,
    OCLImage3dRO = clang.CXType_OCLImage3dRO,
    OCLImage1dWO = clang.CXType_OCLImage1dWO,
    OCLImage1dArrayWO = clang.CXType_OCLImage1dArrayWO,
    OCLImage1dBufferWO = clang.CXType_OCLImage1dBufferWO,
    OCLImage2dWO = clang.CXType_OCLImage2dWO,
    OCLImage2dArrayWO = clang.CXType_OCLImage2dArrayWO,
    OCLImage2dDepthWO = clang.CXType_OCLImage2dDepthWO,
    OCLImage2dArrayDepthWO = clang.CXType_OCLImage2dArrayDepthWO,
    OCLImage2dMSAAWO = clang.CXType_OCLImage2dMSAAWO,
    OCLImage2dArrayMSAAWO = clang.CXType_OCLImage2dArrayMSAAWO,
    OCLImage2dMSAADepthWO = clang.CXType_OCLImage2dMSAADepthWO,
    OCLImage2dArrayMSAADepthWO = clang.CXType_OCLImage2dArrayMSAADepthWO,
    OCLImage3dWO = clang.CXType_OCLImage3dWO,
    OCLImage1dRW = clang.CXType_OCLImage1dRW,
    OCLImage1dArrayRW = clang.CXType_OCLImage1dArrayRW,
    OCLImage1dBufferRW = clang.CXType_OCLImage1dBufferRW,
    OCLImage2dRW = clang.CXType_OCLImage2dRW,
    OCLImage2dArrayRW = clang.CXType_OCLImage2dArrayRW,
    OCLImage2dDepthRW = clang.CXType_OCLImage2dDepthRW,
    OCLImage2dArrayDepthRW = clang.CXType_OCLImage2dArrayDepthRW,
    OCLImage2dMSAARW = clang.CXType_OCLImage2dMSAARW,
    OCLImage2dArrayMSAARW = clang.CXType_OCLImage2dArrayMSAARW,
    OCLImage2dMSAADepthRW = clang.CXType_OCLImage2dMSAADepthRW,
    OCLImage2dArrayMSAADepthRW = clang.CXType_OCLImage2dArrayMSAADepthRW,
    OCLImage3dRW = clang.CXType_OCLImage3dRW,
    OCLSampler = clang.CXType_OCLSampler,
    OCLEvent = clang.CXType_OCLEvent,
    OCLQueue = clang.CXType_OCLQueue,
    OCLReserveID = clang.CXType_OCLReserveID,
    ObjCObject = clang.CXType_ObjCObject,
    ObjCTypeParam = clang.CXType_ObjCTypeParam,
    Attributed = clang.CXType_Attributed,
    OCLIntelSubgroupAVCMcePayload = clang.CXType_OCLIntelSubgroupAVCMcePayload,
    OCLIntelSubgroupAVCImePayload = clang.CXType_OCLIntelSubgroupAVCImePayload,
    OCLIntelSubgroupAVCRefPayload = clang.CXType_OCLIntelSubgroupAVCRefPayload,
    OCLIntelSubgroupAVCSicPayload = clang.CXType_OCLIntelSubgroupAVCSicPayload,
    OCLIntelSubgroupAVCMceResult = clang.CXType_OCLIntelSubgroupAVCMceResult,
    OCLIntelSubgroupAVCImeResult = clang.CXType_OCLIntelSubgroupAVCImeResult,
    OCLIntelSubgroupAVCRefResult = clang.CXType_OCLIntelSubgroupAVCRefResult,
    OCLIntelSubgroupAVCSicResult = clang.CXType_OCLIntelSubgroupAVCSicResult,
    OCLIntelSubgroupAVCImeResultSingleRefStreamout = clang.CXType_OCLIntelSubgroupAVCImeResultSingleRefStreamout,
    OCLIntelSubgroupAVCImeResultDualRefStreamout = clang.CXType_OCLIntelSubgroupAVCImeResultDualRefStreamout,
    OCLIntelSubgroupAVCImeSingleRefStreamin = clang.CXType_OCLIntelSubgroupAVCImeSingleRefStreamin,
    OCLIntelSubgroupAVCImeDualRefStreamin = clang.CXType_OCLIntelSubgroupAVCImeDualRefStreamin,
    ExtVector = clang.CXType_ExtVector,
    Atomic = clang.CXType_Atomic,
    BTFTagAttributed = clang.CXType_BTFTagAttributed,
};
```
</details>

## サンプル

以下のリファレンスサイトから辿れる`API`と睨めっこして、いくつかピックアップして使ってみた。

https://clang.llvm.org/doxygen/group__CINDEX.html

サンプルのパース対象として、`AppKit.framework`の`NSButton.h`を使用。

```zig
const std = @import("std");
const clang = @import("clang.zig");

// ここに前節でまとめ直したenum (省略)

// ASTをトラバースする際に渡す型
// このサンプルでは特別なことはしないため、枠だけ用意
const Context = struct {
};

pub fn main() !void {
    // 翻訳単位のindexを作成
    // PCH (Precompiled headerは除外
    // コンパイルエラーなどの診断メッセージを出力するのであれば第二引数を1にする
    var index = clang.clang_createIndex(1, 0);
    defer clang.clang_disposeIndex(index);
    
    // パース対象
    var file_name = "/Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSButton.h";
    
    // コマンドライン引数
    // Objective-Cのヘッダをパースするのであれば、-Xclang と -xobjective-c があればよい
    // 他はお気持ち
    var args = &[_][*c]const u8{
        "-Xclang",
        "-fsyntax-only",
        "-xobjective-c",
        "-ffreestanding",
    };

    // パースオプション
    var opts = CXTranslationUnitOptions.init(.{ 
        // インクルードファイルが展開されたセマンティックモデルが作成されるのを防ぐため単一ファイルに限定させる
        .SingleFileParse = true, 
    });

    // ソースファイルをパースしてASTを作成する
    var unit = clang.clang_parseTranslationUnit(
        index, 
        file_name, 
        args.ptr, 
        args.len, 
        null, 0, opts.bits.mask
    );
    defer clang.clang_disposeTranslationUnit(unit);

    // ASTを辿るためのカーソルを作成する
    var cursor = clang.clang_getTranslationUnitCursor(unit);
    var ctx: Context = .{};
    
    // コールバックとユーザ変数を渡してASTの走査開始
    var vist_status = clang.clang_visitChildren(cursor, dispatchVisitCursor, &ctx);

    std.debug.print("status: {}\n", .{vist_status});
}

// コールバックの実体
// コールバックの型であるCXCursorVisitorの戻り値が整数型で扱いづらいためスタブ化している
// 観察のため、カーソルの種別を無視して、APIを呼び出していることに注意
fn visitCursorCallback(visitor: clang.CXCursor, parent: clang.CXCursor, ctx: clang.CXClientData) CXChildVisitResult {
    // このサンプルでは使用していないが、ユーザ変数をコールバック内で使用する場合
    // 以下のように@ptrCastを使用して元の型を取り出す
    // var c = @ptrCast(*Context, @alignCast(@alignOf(Context), ctx));

    // カーソルの種別(CXCursorKind型の数値)
    var k = clang.clang_getCursorKind(visitor);
    // ノード名
    var name = clang.clang_getCursorSpelling(visitor);
    defer clang.clang_disposeString(name);
    // ノード表示名（使った範囲ではノード名と同じで差異がわからなかった)
    var disp_name = clang.clang_getCursorDisplayName(visitor);
    defer clang.clang_disposeString(disp_name);
    // Objective-CメソッドセレクターのTypeEncoding文字列
    // https://nshipster.com/type-encodings あたりの話
    var enc = clang.clang_getDeclObjCTypeEncoding(visitor);
    defer clang.clang_disposeString(enc);
    // 戻り値の型の種別
    var return_type = clang.clang_getCursorResultType(visitor);
    // 戻り値の型名
    var return_type_name = clang.clang_getTypeSpelling(return_type);
    defer clang.clang_disposeString(return_type_name);
    // カーソルが指す先の型の種別
    var cursor_type = clang.clang_getCursorType(visitor);
    // カーソルが指す先の型名
    var cursor_type_name = clang.clang_getTypeSpelling(cursor_type);
    defer clang.clang_disposeString(cursor_type_name);
    
    // 標準エラーに出力
    std.debug.print("kind: {}, name: {s}, disp_name: {s}, qual: {}, type_enc: {s}, has_attr? {}\n", .{ 
        @intToEnum(CXCursorKind, k),
        clang.clang_getCString(name), 
        clang.clang_getCString(disp_name),
        clang.clang_Cursor_getObjCDeclQualifiers(visitor),
        clang.clang_getCString(enc),
        clang.clang_Cursor_hasAttrs(visitor),
    });
    std.debug.print("    cur_type: {}, cur_type_name: {s}\n", .{ 
        @intToEnum(CXTypeKind, cursor_type.kind),
        clang.clang_getCString(cursor_type_name),
    });
    std.debug.print("    ret_type: {}, ret_type_name: {s}\n", .{ 
        @intToEnum(CXTypeKind, return_type.kind),
        clang.clang_getCString(return_type_name),
    });

    var sem_cursor = clang.clang_getCursorSemanticParent(visitor);
    var sem_type_name = clang.clang_getCursorSpelling(sem_cursor);
    defer clang.clang_disposeString(sem_type_name);

    std.debug.print("    sem_type_name: {s}, \n", .{ 
        clang.clang_getCString(sem_type_name),
    });

    _ = ctx;
    _ = parent;
    
    // ASTを再帰で辿る
    return .Recurse;
}

// コールバック
fn dispatchVisitCursor(parent: clang.CXCursor, visitor: clang.CXCursor, ctx: clang.CXClientData) callconv(.C) c_uint {
    return @enumToInt(visitCursorCallback(parent, visitor, ctx));
}
```

## 実行結果

<details><summary>長いので折り畳み</summary>

```
% zig build run 
kind: main.CursorKind.VarDecl, name: APPKIT_API_UNAVAILABLE_BEGIN_MACCATALYST, disp_name: APPKIT_API_UNAVAILABLE_BEGIN_MACCATALYST, qual: 0, type_enc: i, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: /Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSButton.h, 
kind: main.CursorKind.FunctionDecl, name: API_AVAILABLE, disp_name: API_AVAILABLE(int (*)()), qual: 0, type_enc: i8^?0, has_attr? 0
    cur_type: main.TypeKind.FunctionProto, cur_type_name: int (int (*)())
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: /Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSButton.h, 
kind: main.CursorKind.ParmDecl, name: macos, disp_name: macos, qual: 0, type_enc: ^?, has_attr? 0
    cur_type: main.TypeKind.FunctionNoProto, cur_type_name: int ()
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: API_AVAILABLE, 
kind: main.CursorKind.FunctionDecl, name: API_AVAILABLE, disp_name: API_AVAILABLE(int (*)()), qual: 0, type_enc: i8^?0, has_attr? 0
    cur_type: main.TypeKind.FunctionProto, cur_type_name: int (int (*)())
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: /Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSButton.h, 
kind: main.CursorKind.ParmDecl, name: macos, disp_name: macos, qual: 0, type_enc: ^?, has_attr? 0
    cur_type: main.TypeKind.FunctionNoProto, cur_type_name: int ()
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: API_AVAILABLE, 
kind: main.CursorKind.FunctionDecl, name: API_AVAILABLE, disp_name: API_AVAILABLE(int (*)()), qual: 0, type_enc: i8^?0, has_attr? 0
    cur_type: main.TypeKind.FunctionProto, cur_type_name: int (int (*)())
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: /Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSButton.h, 
kind: main.CursorKind.ParmDecl, name: macos, disp_name: macos, qual: 0, type_enc: ^?, has_attr? 0
    cur_type: main.TypeKind.FunctionNoProto, cur_type_name: int ()
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: API_AVAILABLE, 
kind: main.CursorKind.FunctionDecl, name: API_AVAILABLE, disp_name: API_AVAILABLE(int (*)()), qual: 0, type_enc: i8^?0, has_attr? 0
    cur_type: main.TypeKind.FunctionProto, cur_type_name: int (int (*)())
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: /Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSButton.h, 
kind: main.CursorKind.ParmDecl, name: macos, disp_name: macos, qual: 0, type_enc: ^?, has_attr? 0
    cur_type: main.TypeKind.FunctionNoProto, cur_type_name: int ()
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: API_AVAILABLE, 
kind: main.CursorKind.FunctionDecl, name: API_AVAILABLE, disp_name: API_AVAILABLE(int (*)()), qual: 0, type_enc: i8^?0, has_attr? 0
    cur_type: main.TypeKind.FunctionProto, cur_type_name: int (int (*)())
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: /Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSButton.h, 
kind: main.CursorKind.ParmDecl, name: macos, disp_name: macos, qual: 0, type_enc: ^?, has_attr? 0
    cur_type: main.TypeKind.FunctionNoProto, cur_type_name: int ()
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: API_AVAILABLE, 
kind: main.CursorKind.FunctionDecl, name: API_AVAILABLE, disp_name: API_AVAILABLE(int (*)()), qual: 0, type_enc: i8^?0, has_attr? 0
    cur_type: main.TypeKind.FunctionProto, cur_type_name: int (int (*)())
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: /Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSButton.h, 
kind: main.CursorKind.ParmDecl, name: macos, disp_name: macos, qual: 0, type_enc: ^?, has_attr? 0
    cur_type: main.TypeKind.FunctionNoProto, cur_type_name: int ()
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: API_AVAILABLE, 
kind: main.CursorKind.FunctionDecl, name: API_AVAILABLE, disp_name: API_AVAILABLE(int (*)()), qual: 0, type_enc: i8^?0, has_attr? 0
    cur_type: main.TypeKind.FunctionProto, cur_type_name: int (int (*)())
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: /Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSButton.h, 
kind: main.CursorKind.ParmDecl, name: macos, disp_name: macos, qual: 0, type_enc: ^?, has_attr? 0
    cur_type: main.TypeKind.FunctionNoProto, cur_type_name: int ()
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: API_AVAILABLE, 
kind: main.CursorKind.FunctionDecl, name: API_AVAILABLE, disp_name: API_AVAILABLE(int (*)()), qual: 0, type_enc: i8^?0, has_attr? 0
    cur_type: main.TypeKind.FunctionProto, cur_type_name: int (int (*)())
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: /Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSButton.h, 
kind: main.CursorKind.ParmDecl, name: macos, disp_name: macos, qual: 0, type_enc: ^?, has_attr? 0
    cur_type: main.TypeKind.FunctionNoProto, cur_type_name: int ()
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: API_AVAILABLE, 
kind: main.CursorKind.FunctionDecl, name: API_AVAILABLE, disp_name: API_AVAILABLE(int (*)()), qual: 0, type_enc: i8^?0, has_attr? 0
    cur_type: main.TypeKind.FunctionProto, cur_type_name: int (int (*)())
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: /Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSButton.h, 
kind: main.CursorKind.ParmDecl, name: macos, disp_name: macos, qual: 0, type_enc: ^?, has_attr? 0
    cur_type: main.TypeKind.FunctionNoProto, cur_type_name: int ()
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: API_AVAILABLE, 
kind: main.CursorKind.ObjCInterfaceDecl, name: NSButton, disp_name: NSButton, qual: 0, type_enc: ?, has_attr? 0
    cur_type: main.TypeKind.ObjCInterface, cur_type_name: NSButton
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: /Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSButton.h, 
kind: main.CursorKind.ObjCClassMethodDecl, name: buttonWithTitle:image:target:action:, disp_name: buttonWithTitle:image:target:action:, qual: 0, type_enc: @48@0:8@16@24@32:40, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Typedef, ret_type_name: instancetype
    sem_type_name: NSButton, 
kind: main.CursorKind.TypeRef, name: instancetype, disp_name: instancetype, qual: 0, type_enc: , has_attr? 0
    cur_type: main.TypeKind.Typedef, cur_type_name: instancetype
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: , 
kind: main.CursorKind.ParmDecl, name: title, disp_name: title, qual: 0, type_enc: @, has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: buttonWithTitle:image:target:action:, 
kind: main.CursorKind.ParmDecl, name: image, disp_name: image, qual: 0, type_enc: @, has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: buttonWithTitle:image:target:action:, 
kind: main.CursorKind.ParmDecl, name: target, disp_name: target, qual: 0, type_enc: @, has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: buttonWithTitle:image:target:action:, 
kind: main.CursorKind.TypeRef, name: id, disp_name: id, qual: 0, type_enc: , has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: , 
kind: main.CursorKind.ParmDecl, name: action, disp_name: action, qual: 0, type_enc: :, has_attr? 0
    cur_type: main.TypeKind.ObjCSel, cur_type_name: SEL
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: buttonWithTitle:image:target:action:, 
kind: main.CursorKind.TypeRef, name: SEL, disp_name: SEL, qual: 0, type_enc: , has_attr? 0
    cur_type: main.TypeKind.ObjCSel, cur_type_name: SEL
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: , 
kind: main.CursorKind.ObjCClassMethodDecl, name: buttonWithTitle:target:action:, disp_name: buttonWithTitle:target:action:, qual: 0, type_enc: @40@0:8@16@24:32, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Typedef, ret_type_name: instancetype
    sem_type_name: NSButton, 
kind: main.CursorKind.TypeRef, name: instancetype, disp_name: instancetype, qual: 0, type_enc: , has_attr? 0
    cur_type: main.TypeKind.Typedef, cur_type_name: instancetype
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: , 
kind: main.CursorKind.ParmDecl, name: title, disp_name: title, qual: 0, type_enc: @, has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: buttonWithTitle:target:action:, 
kind: main.CursorKind.ParmDecl, name: target, disp_name: target, qual: 0, type_enc: @, has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: buttonWithTitle:target:action:, 
kind: main.CursorKind.TypeRef, name: id, disp_name: id, qual: 0, type_enc: , has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: , 
kind: main.CursorKind.ParmDecl, name: action, disp_name: action, qual: 0, type_enc: :, has_attr? 0
    cur_type: main.TypeKind.ObjCSel, cur_type_name: SEL
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: buttonWithTitle:target:action:, 
kind: main.CursorKind.TypeRef, name: SEL, disp_name: SEL, qual: 0, type_enc: , has_attr? 0
    cur_type: main.TypeKind.ObjCSel, cur_type_name: SEL
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: , 
kind: main.CursorKind.ObjCClassMethodDecl, name: buttonWithImage:target:action:, disp_name: buttonWithImage:target:action:, qual: 0, type_enc: @40@0:8@16@24:32, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Typedef, ret_type_name: instancetype
    sem_type_name: NSButton, 
kind: main.CursorKind.TypeRef, name: instancetype, disp_name: instancetype, qual: 0, type_enc: , has_attr? 0
    cur_type: main.TypeKind.Typedef, cur_type_name: instancetype
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: , 
kind: main.CursorKind.ParmDecl, name: image, disp_name: image, qual: 0, type_enc: @, has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: buttonWithImage:target:action:, 
kind: main.CursorKind.ParmDecl, name: target, disp_name: target, qual: 0, type_enc: @, has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: buttonWithImage:target:action:, 
kind: main.CursorKind.TypeRef, name: id, disp_name: id, qual: 0, type_enc: , has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: , 
kind: main.CursorKind.ParmDecl, name: action, disp_name: action, qual: 0, type_enc: :, has_attr? 0
    cur_type: main.TypeKind.ObjCSel, cur_type_name: SEL
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: buttonWithImage:target:action:, 
kind: main.CursorKind.TypeRef, name: SEL, disp_name: SEL, qual: 0, type_enc: , has_attr? 0
    cur_type: main.TypeKind.ObjCSel, cur_type_name: SEL
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: , 
kind: main.CursorKind.ObjCClassMethodDecl, name: checkboxWithTitle:target:action:, disp_name: checkboxWithTitle:target:action:, qual: 0, type_enc: @40@0:8@16@24:32, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Typedef, ret_type_name: instancetype
    sem_type_name: NSButton, 
kind: main.CursorKind.TypeRef, name: instancetype, disp_name: instancetype, qual: 0, type_enc: , has_attr? 0
    cur_type: main.TypeKind.Typedef, cur_type_name: instancetype
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: , 
kind: main.CursorKind.ParmDecl, name: title, disp_name: title, qual: 0, type_enc: @, has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: checkboxWithTitle:target:action:, 
kind: main.CursorKind.ParmDecl, name: target, disp_name: target, qual: 0, type_enc: @, has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: checkboxWithTitle:target:action:, 
kind: main.CursorKind.TypeRef, name: id, disp_name: id, qual: 0, type_enc: , has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: , 
kind: main.CursorKind.ParmDecl, name: action, disp_name: action, qual: 0, type_enc: :, has_attr? 0
    cur_type: main.TypeKind.ObjCSel, cur_type_name: SEL
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: checkboxWithTitle:target:action:, 
kind: main.CursorKind.TypeRef, name: SEL, disp_name: SEL, qual: 0, type_enc: , has_attr? 0
    cur_type: main.TypeKind.ObjCSel, cur_type_name: SEL
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: , 
kind: main.CursorKind.ObjCClassMethodDecl, name: radioButtonWithTitle:target:action:, disp_name: radioButtonWithTitle:target:action:, qual: 0, type_enc: @40@0:8@16@24:32, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Typedef, ret_type_name: instancetype
    sem_type_name: NSButton, 
kind: main.CursorKind.TypeRef, name: instancetype, disp_name: instancetype, qual: 0, type_enc: , has_attr? 0
    cur_type: main.TypeKind.Typedef, cur_type_name: instancetype
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: , 
kind: main.CursorKind.ParmDecl, name: title, disp_name: title, qual: 0, type_enc: @, has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: radioButtonWithTitle:target:action:, 
kind: main.CursorKind.ParmDecl, name: target, disp_name: target, qual: 0, type_enc: @, has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: radioButtonWithTitle:target:action:, 
kind: main.CursorKind.TypeRef, name: id, disp_name: id, qual: 0, type_enc: , has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: , 
kind: main.CursorKind.ParmDecl, name: action, disp_name: action, qual: 0, type_enc: :, has_attr? 0
    cur_type: main.TypeKind.ObjCSel, cur_type_name: SEL
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: radioButtonWithTitle:target:action:, 
kind: main.CursorKind.TypeRef, name: SEL, disp_name: SEL, qual: 0, type_enc: , has_attr? 0
    cur_type: main.TypeKind.ObjCSel, cur_type_name: SEL
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: , 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setButtonType:, disp_name: setButtonType:, qual: 0, type_enc: v24@0:8@16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: type, disp_name: type, qual: 0, type_enc: @, has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setButtonType:, 
kind: main.CursorKind.ObjCPropertyDecl, name: title, disp_name: title, qual: 0, type_enc: T^i,C, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCPropertyDecl, name: attributedTitle, disp_name: attributedTitle, qual: 0, type_enc: T^i,C, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCPropertyDecl, name: alternateTitle, disp_name: alternateTitle, qual: 0, type_enc: T^i,C, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCPropertyDecl, name: attributedAlternateTitle, disp_name: attributedAlternateTitle, qual: 0, type_enc: T^i,C, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCPropertyDecl, name: hasDestructiveAction, disp_name: hasDestructiveAction, qual: 0, type_enc: Ti, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCPropertyDecl, name: sound, disp_name: sound, qual: 0, type_enc: T^i,&, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCPropertyDecl, name: springLoaded, disp_name: springLoaded, qual: 0, type_enc: Ti,GisSpringLoaded, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCPropertyDecl, name: maxAcceleratorLevel, disp_name: maxAcceleratorLevel, qual: 0, type_enc: Ti, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setPeriodicDelay:interval:, disp_name: setPeriodicDelay:interval:, qual: 0, type_enc: v24@0:8f16f20, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: delay, disp_name: delay, qual: 0, type_enc: f, has_attr? 0
    cur_type: main.TypeKind.Float, cur_type_name: float
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setPeriodicDelay:interval:, 
kind: main.CursorKind.ParmDecl, name: interval, disp_name: interval, qual: 0, type_enc: f, has_attr? 0
    cur_type: main.TypeKind.Float, cur_type_name: float
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setPeriodicDelay:interval:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: getPeriodicDelay:interval:, disp_name: getPeriodicDelay:interval:, qual: 0, type_enc: v32@0:8^f16^f24, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: delay, disp_name: delay, qual: 0, type_enc: ^f, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: float *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: getPeriodicDelay:interval:, 
kind: main.CursorKind.ParmDecl, name: interval, disp_name: interval, qual: 0, type_enc: ^f, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: float *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: getPeriodicDelay:interval:, 
kind: main.CursorKind.ObjCPropertyDecl, name: bezelStyle, disp_name: bezelStyle, qual: 0, type_enc: Ti, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCPropertyDecl, name: bordered, disp_name: bordered, qual: 0, type_enc: Ti,GisBordered, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCPropertyDecl, name: transparent, disp_name: transparent, qual: 0, type_enc: Ti,GisTransparent, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCPropertyDecl, name: showsBorderOnlyWhileMouseInside, disp_name: showsBorderOnlyWhileMouseInside, qual: 0, type_enc: Ti, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCPropertyDecl, name: image, disp_name: image, qual: 0, type_enc: T^i,&, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCPropertyDecl, name: alternateImage, disp_name: alternateImage, qual: 0, type_enc: T^i,&, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCPropertyDecl, name: imagePosition, disp_name: imagePosition, qual: 0, type_enc: Ti, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCPropertyDecl, name: imageScaling, disp_name: imageScaling, qual: 0, type_enc: Ti, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCPropertyDecl, name: imageHugsTitle, disp_name: imageHugsTitle, qual: 0, type_enc: Ti, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCPropertyDecl, name: symbolConfiguration, disp_name: symbolConfiguration, qual: 0, type_enc: T^i,C, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCPropertyDecl, name: bezelColor, disp_name: bezelColor, qual: 0, type_enc: T^i,C, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCPropertyDecl, name: contentTintColor, disp_name: contentTintColor, qual: 0, type_enc: T^i,C, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCPropertyDecl, name: state, disp_name: state, qual: 0, type_enc: Ti, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCPropertyDecl, name: allowsMixedState, disp_name: allowsMixedState, qual: 0, type_enc: Ti, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setNextState, disp_name: setNextState, qual: 0, type_enc: v16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: highlight:, disp_name: highlight:, qual: 0, type_enc: v24@0:8@16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: flag, disp_name: flag, qual: 0, type_enc: @, has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: highlight:, 
kind: main.CursorKind.ObjCPropertyDecl, name: keyEquivalent, disp_name: keyEquivalent, qual: 0, type_enc: T^i,C, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCPropertyDecl, name: keyEquivalentModifierMask, disp_name: keyEquivalentModifierMask, qual: 0, type_enc: Ti, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: performKeyEquivalent:, disp_name: performKeyEquivalent:, qual: 0, type_enc: @24@0:8@16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.ObjCId, ret_type_name: id
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: key, disp_name: key, qual: 0, type_enc: @, has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: performKeyEquivalent:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: compressWithPrioritizedCompressionOptions:, disp_name: compressWithPrioritizedCompressionOptions:, qual: 0, type_enc: v24@0:8@16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: prioritizedOptions, disp_name: prioritizedOptions, qual: 0, type_enc: @, has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: compressWithPrioritizedCompressionOptions:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: minimumSizeWithPrioritizedCompressionOptions:, disp_name: minimumSizeWithPrioritizedCompressionOptions:, qual: 0, type_enc: @24@0:8@16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.ObjCId, ret_type_name: id
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: prioritizedOptions, disp_name: prioritizedOptions, qual: 0, type_enc: @, has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: minimumSizeWithPrioritizedCompressionOptions:, 
kind: main.CursorKind.ObjCPropertyDecl, name: activeCompressionOptions, disp_name: activeCompressionOptions, qual: 0, type_enc: T^i,R,C, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: title, disp_name: title, qual: 0, type_enc: ^i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Pointer, ret_type_name: int *
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setTitle:, disp_name: setTitle:, qual: 0, type_enc: v24@0:8^i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: title, disp_name: title, qual: 0, type_enc: ^i, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setTitle:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: attributedTitle, disp_name: attributedTitle, qual: 0, type_enc: ^i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Pointer, ret_type_name: int *
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setAttributedTitle:, disp_name: setAttributedTitle:, qual: 0, type_enc: v24@0:8^i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: attributedTitle, disp_name: attributedTitle, qual: 0, type_enc: ^i, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setAttributedTitle:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: alternateTitle, disp_name: alternateTitle, qual: 0, type_enc: ^i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Pointer, ret_type_name: int *
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setAlternateTitle:, disp_name: setAlternateTitle:, qual: 0, type_enc: v24@0:8^i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: alternateTitle, disp_name: alternateTitle, qual: 0, type_enc: ^i, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setAlternateTitle:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: attributedAlternateTitle, disp_name: attributedAlternateTitle, qual: 0, type_enc: ^i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Pointer, ret_type_name: int *
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setAttributedAlternateTitle:, disp_name: setAttributedAlternateTitle:, qual: 0, type_enc: v24@0:8^i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: attributedAlternateTitle, disp_name: attributedAlternateTitle, qual: 0, type_enc: ^i, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setAttributedAlternateTitle:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: hasDestructiveAction, disp_name: hasDestructiveAction, qual: 0, type_enc: i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setHasDestructiveAction:, disp_name: setHasDestructiveAction:, qual: 0, type_enc: v20@0:8i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: hasDestructiveAction, disp_name: hasDestructiveAction, qual: 0, type_enc: i, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setHasDestructiveAction:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: sound, disp_name: sound, qual: 0, type_enc: ^i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Pointer, ret_type_name: int *
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setSound:, disp_name: setSound:, qual: 0, type_enc: v24@0:8^i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: sound, disp_name: sound, qual: 0, type_enc: ^i, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setSound:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: isSpringLoaded, disp_name: isSpringLoaded, qual: 0, type_enc: i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setSpringLoaded:, disp_name: setSpringLoaded:, qual: 0, type_enc: v20@0:8i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: springLoaded, disp_name: springLoaded, qual: 0, type_enc: i, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setSpringLoaded:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: maxAcceleratorLevel, disp_name: maxAcceleratorLevel, qual: 0, type_enc: i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setMaxAcceleratorLevel:, disp_name: setMaxAcceleratorLevel:, qual: 0, type_enc: v20@0:8i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: maxAcceleratorLevel, disp_name: maxAcceleratorLevel, qual: 0, type_enc: i, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setMaxAcceleratorLevel:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: bezelStyle, disp_name: bezelStyle, qual: 0, type_enc: i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setBezelStyle:, disp_name: setBezelStyle:, qual: 0, type_enc: v20@0:8i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: bezelStyle, disp_name: bezelStyle, qual: 0, type_enc: i, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setBezelStyle:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: isBordered, disp_name: isBordered, qual: 0, type_enc: i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setBordered:, disp_name: setBordered:, qual: 0, type_enc: v20@0:8i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: bordered, disp_name: bordered, qual: 0, type_enc: i, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setBordered:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: isTransparent, disp_name: isTransparent, qual: 0, type_enc: i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setTransparent:, disp_name: setTransparent:, qual: 0, type_enc: v20@0:8i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: transparent, disp_name: transparent, qual: 0, type_enc: i, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setTransparent:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: showsBorderOnlyWhileMouseInside, disp_name: showsBorderOnlyWhileMouseInside, qual: 0, type_enc: i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setShowsBorderOnlyWhileMouseInside:, disp_name: setShowsBorderOnlyWhileMouseInside:, qual: 0, type_enc: v20@0:8i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: showsBorderOnlyWhileMouseInside, disp_name: showsBorderOnlyWhileMouseInside, qual: 0, type_enc: i, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setShowsBorderOnlyWhileMouseInside:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: image, disp_name: image, qual: 0, type_enc: ^i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Pointer, ret_type_name: int *
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setImage:, disp_name: setImage:, qual: 0, type_enc: v24@0:8^i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: image, disp_name: image, qual: 0, type_enc: ^i, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setImage:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: alternateImage, disp_name: alternateImage, qual: 0, type_enc: ^i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Pointer, ret_type_name: int *
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setAlternateImage:, disp_name: setAlternateImage:, qual: 0, type_enc: v24@0:8^i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: alternateImage, disp_name: alternateImage, qual: 0, type_enc: ^i, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setAlternateImage:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: imagePosition, disp_name: imagePosition, qual: 0, type_enc: i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setImagePosition:, disp_name: setImagePosition:, qual: 0, type_enc: v20@0:8i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: imagePosition, disp_name: imagePosition, qual: 0, type_enc: i, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setImagePosition:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: imageScaling, disp_name: imageScaling, qual: 0, type_enc: i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setImageScaling:, disp_name: setImageScaling:, qual: 0, type_enc: v20@0:8i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: imageScaling, disp_name: imageScaling, qual: 0, type_enc: i, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setImageScaling:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: imageHugsTitle, disp_name: imageHugsTitle, qual: 0, type_enc: i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setImageHugsTitle:, disp_name: setImageHugsTitle:, qual: 0, type_enc: v20@0:8i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: imageHugsTitle, disp_name: imageHugsTitle, qual: 0, type_enc: i, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setImageHugsTitle:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: symbolConfiguration, disp_name: symbolConfiguration, qual: 0, type_enc: ^i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Pointer, ret_type_name: int *
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setSymbolConfiguration:, disp_name: setSymbolConfiguration:, qual: 0, type_enc: v24@0:8^i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: symbolConfiguration, disp_name: symbolConfiguration, qual: 0, type_enc: ^i, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setSymbolConfiguration:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: bezelColor, disp_name: bezelColor, qual: 0, type_enc: ^i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Pointer, ret_type_name: int *
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setBezelColor:, disp_name: setBezelColor:, qual: 0, type_enc: v24@0:8^i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: bezelColor, disp_name: bezelColor, qual: 0, type_enc: ^i, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setBezelColor:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: contentTintColor, disp_name: contentTintColor, qual: 0, type_enc: ^i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Pointer, ret_type_name: int *
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setContentTintColor:, disp_name: setContentTintColor:, qual: 0, type_enc: v24@0:8^i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: contentTintColor, disp_name: contentTintColor, qual: 0, type_enc: ^i, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setContentTintColor:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: state, disp_name: state, qual: 0, type_enc: i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setState:, disp_name: setState:, qual: 0, type_enc: v20@0:8i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: state, disp_name: state, qual: 0, type_enc: i, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setState:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: allowsMixedState, disp_name: allowsMixedState, qual: 0, type_enc: i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setAllowsMixedState:, disp_name: setAllowsMixedState:, qual: 0, type_enc: v20@0:8i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: allowsMixedState, disp_name: allowsMixedState, qual: 0, type_enc: i, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setAllowsMixedState:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: keyEquivalent, disp_name: keyEquivalent, qual: 0, type_enc: ^i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Pointer, ret_type_name: int *
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setKeyEquivalent:, disp_name: setKeyEquivalent:, qual: 0, type_enc: v24@0:8^i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: keyEquivalent, disp_name: keyEquivalent, qual: 0, type_enc: ^i, has_attr? 0
    cur_type: main.TypeKind.Pointer, cur_type_name: int *
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setKeyEquivalent:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: keyEquivalentModifierMask, disp_name: keyEquivalentModifierMask, qual: 0, type_enc: i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Int, ret_type_name: int
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setKeyEquivalentModifierMask:, disp_name: setKeyEquivalentModifierMask:, qual: 0, type_enc: v20@0:8i16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButton, 
kind: main.CursorKind.ParmDecl, name: keyEquivalentModifierMask, disp_name: keyEquivalentModifierMask, qual: 0, type_enc: i, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setKeyEquivalentModifierMask:, 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: activeCompressionOptions, disp_name: activeCompressionOptions, qual: 0, type_enc: ^i16@0:8, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Pointer, ret_type_name: int *
    sem_type_name: NSButton, 
kind: main.CursorKind.ObjCCategoryDecl, name: NSButtonDeprecated, disp_name: NSButtonDeprecated, qual: 0, type_enc: ?, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: /Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSButton.h, 
kind: main.CursorKind.ObjCClassRef, name: NSButton, disp_name: NSButton, qual: 0, type_enc: , has_attr? 0
    cur_type: main.TypeKind.ObjCInterface, cur_type_name: NSButton
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: , 
kind: main.CursorKind.ObjCInstanceMethodDecl, name: setTitleWithMnemonic:, disp_name: setTitleWithMnemonic:, qual: 0, type_enc: v24@0:8@16, has_attr? 0
    cur_type: main.TypeKind.Invalid, cur_type_name: 
    ret_type: main.TypeKind.Void, ret_type_name: void
    sem_type_name: NSButtonDeprecated, 
kind: main.CursorKind.ParmDecl, name: stringWithAmpersand, disp_name: stringWithAmpersand, qual: 0, type_enc: @, has_attr? 0
    cur_type: main.TypeKind.ObjCId, cur_type_name: id
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: setTitleWithMnemonic:, 
kind: main.CursorKind.VarDecl, name: NS_ASSUME_NONNULL_END, disp_name: NS_ASSUME_NONNULL_END, qual: 0, type_enc: i, has_attr? 0
    cur_type: main.TypeKind.Int, cur_type_name: int
    ret_type: main.TypeKind.Invalid, ret_type_name: 
    sem_type_name: /Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk/System/Library/Frameworks/AppKit.framework/Headers/NSButton.h, 
status: 0
```
</details>