事前準備
libClang
をリンクするため、事前にLLVM
をインストールしておく。
当環境はMacOS
なのでHome Brew
でインストールした。
brew install llvm
また、以下のパスにヘッダファイルとライブラリのフォルダのシンボリックリンクを張っておく。
/usr/local/include/llvm
/usr/local/lib/llvm
環境
ビルドスクリプト(build.zig)
libClang
がリンクされるよう構成する。
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ファイル化したヘッダファイルは、
const clang = @import("clang.zig");
でインポートしている。
CXTranslationUnit
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
でラップする。
const CXTranslationUnitOptions = std.enums.EnumSet(CXTranslationUnit);
CXChildVisitResult
const CXChildVisitResult = enum(c_uint) {
Break = clang.CXChildVisit_Break,
Continue = clang.CXChildVisit_Continue,
Recurse = clang.CXChildVisit_Recurse,
};
CXCursorKind (長いので折り畳み)
// 同じ定数値に別の名前が割り当てられている箇所はコメントアウトし除外している
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,
};
CXTypeKind (長いので折り畳み)
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,
};
サンプル
以下のリファレンスサイトから辿れるAPI
と睨めっこして、いくつかピックアップして使ってみた。
サンプルのパース対象として、AppKit.framework
のNSButton.h
を使用。
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));
}
実行結果
長いので折り畳み
% 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