`type access_specifier` = `[`

`|` ``None`
`|` ``Public`
`|` ``Protected`
`|` ``Private`

`]```
`type binary_operator_kind` = `[`

`|` ``PtrMemD`
`|` ``PtrMemI`
`|` ``Mul`
`|` ``Div`
`|` ``Rem`
`|` ``Add`
`|` ``Sub`
`|` ``Shl`
`|` ``Shr`
`|` ``Cmp`
`|` ``LT`
`|` ``GT`
`|` ``LE`
`|` ``GE`
`|` ``EQ`
`|` ``NE`
`|` ``And`
`|` ``Xor`
`|` ``Or`
`|` ``LAnd`
`|` ``LOr`
`|` ``Assign`
`|` ``MulAssign`
`|` ``DivAssign`
`|` ``RemAssign`
`|` ``AddAssign`
`|` ``SubAssign`
`|` ``ShlAssign`
`|` ``ShrAssign`
`|` ``AndAssign`
`|` ``XorAssign`
`|` ``OrAssign`
`|` ``Comma`

`]```
`type binary_operator_info````=` `{`

`boi_kind : binary_operator_kind;`

`}```
`type builtin_type_kind` = `[`

`|` ``Void`
`|` ``Bool`
`|` ``Char_U`
`|` ``UChar`
`|` ``WChar_U`
`|` ``Char16`
`|` ``Char32`
`|` ``UShort`
`|` ``UInt`
`|` ``ULong`
`|` ``ULongLong`
`|` ``UInt128`
`|` ``Char_S`
`|` ``SChar`
`|` ``WChar_S`
`|` ``Short`
`|` ``Int`
`|` ``Long`
`|` ``LongLong`
`|` ``Int128`
`|` ``Half`
`|` ``Float`
`|` ``Double`
`|` ``LongDouble`
`|` ``Float16`
`|` ``Float128`
`|` ``NullPtr`
`|` ``ObjCId`
`|` ``ObjCClass`
`|` ``ObjCSel`
`|` ``OCLSampler`
`|` ``OCLEvent`
`|` ``OCLClkEvent`
`|` ``OCLQueue`
`|` ``OCLReserveID`
`|` ``Dependent`
`|` ``Overload`
`|` ``BoundMember`
`|` ``PseudoObject`
`|` ``UnknownAny`
`|` ``BuiltinFn`
`|` ``ARCUnbridgedCast`
`|` ``OMPArraySection`

`]```
`type cast_kind` = `[`

`|` ``Dependent`
`|` ``BitCast`
`|` ``LValueBitCast`
`|` ``LValueToRValue`
`|` ``NoOp`
`|` ``BaseToDerived`
`|` ``DerivedToBase`
`|` ``UncheckedDerivedToBase`
`|` ``Dynamic`
`|` ``ToUnion`
`|` ``ArrayToPointerDecay`
`|` ``FunctionToPointerDecay`
`|` ``NullToPointer`
`|` ``NullToMemberPointer`
`|` ``BaseToDerivedMemberPointer`
`|` ``DerivedToBaseMemberPointer`
`|` ``MemberPointerToBoolean`
`|` ``ReinterpretMemberPointer`
`|` ``UserDefinedConversion`
`|` ``ConstructorConversion`
`|` ``IntegralToPointer`
`|` ``PointerToIntegral`
`|` ``PointerToBoolean`
`|` ``ToVoid`
`|` ``VectorSplat`
`|` ``IntegralCast`
`|` ``IntegralToBoolean`
`|` ``IntegralToFloating`
`|` ``FloatingToIntegral`
`|` ``FloatingToBoolean`
`|` ``BooleanToSignedIntegral`
`|` ``FloatingCast`
`|` ``CPointerToObjCPointerCast`
`|` ``BlockPointerToObjCPointerCast`
`|` ``AnyPointerToBlockPointerCast`
`|` ``ObjCObjectLValueCast`
`|` ``FloatingRealToComplex`
`|` ``FloatingComplexToReal`
`|` ``FloatingComplexToBoolean`
`|` ``FloatingComplexCast`
`|` ``FloatingComplexToIntegralComplex`
`|` ``IntegralRealToComplex`
`|` ``IntegralComplexToReal`
`|` ``IntegralComplexToBoolean`
`|` ``IntegralComplexCast`
`|` ``IntegralComplexToFloatingComplex`
`|` ``ARCProduceObject`
`|` ``ARCConsumeObject`
`|` ``ARCReclaimReturnedObject`
`|` ``ARCExtendBlockObject`
`|` ``AtomicToNonAtomic`
`|` ``NonAtomicToAtomic`
`|` ``CopyAndAutoreleaseBlockObject`
`|` ``BuiltinFnToFnPtr`
`|` ``ZeroToOCLEvent`
`|` ``ZeroToOCLQueue`
`|` ``AddressSpaceConversion`
`|` ``IntToOCLSampler`

`]```
`type cxx_base_specifier````=` `{`

`xbs_name : string;`
`xbs_virtual : bool;`

`}```
`type cast_expr_info````=` `{`

`cei_cast_kind : cast_kind;`
`cei_base_path : cxx_base_specifier list;`

`}```
`type cxx_noexcept_expr_info````=` `{`

`xnee_value : bool;`

`}```
`type decl_context_info````=` `{`

`dci_has_external_lexical_storage : bool;`
`dci_has_external_visible_storage : bool;`

`}```
`type decl_kind` = `[`

`|` ``AccessSpec`
`|` ``Block`
`|` ``Captured`
`|` ``ClassScopeFunctionSpecialization`
`|` ``Empty`
`|` ``Export`
`|` ``ExternCContext`
`|` ``FileScopeAsm`
`|` ``Friend`
`|` ``FriendTemplate`
`|` ``Import`
`|` ``LinkageSpec`
`|` ``Named`
`|` ``Label`
`|` ``Namespace`
`|` ``NamespaceAlias`
`|` ``ObjCCompatibleAlias`
`|` ``ObjCContainer`
`|` ``ObjCCategory`
`|` ``ObjCImpl`
`|` ``ObjCCategoryImpl`
`|` ``ObjCImplementation`
`|` ``ObjCInterface`
`|` ``ObjCProtocol`
`|` ``ObjCMethod`
`|` ``ObjCProperty`
`|` ``Template`
`|` ``BuiltinTemplate`
`|` ``RedeclarableTemplate`
`|` ``ClassTemplate`
`|` ``FunctionTemplate`
`|` ``TypeAliasTemplate`
`|` ``VarTemplate`
`|` ``TemplateTemplateParm`
`|` ``Type`
`|` ``Tag`
`|` ``Enum`
`|` ``Record`
`|` ``CXXRecord`
`|` ``ClassTemplateSpecialization`
`|` ``ClassTemplatePartialSpecialization`
`|` ``TemplateTypeParm`
`|` ``TypedefName`
`|` ``ObjCTypeParam`
`|` ``TypeAlias`
`|` ``Typedef`
`|` ``UnresolvedUsingTypename`
`|` ``Using`
`|` ``UsingDirective`
`|` ``UsingPack`
`|` ``UsingShadow`
`|` ``ConstructorUsingShadow`
`|` ``Value`
`|` ``Binding`
`|` ``Declarator`
`|` ``Field`
`|` ``ObjCAtDefsField`
`|` ``ObjCIvar`
`|` ``Function`
`|` ``CXXDeductionGuide`
`|` ``CXXMethod`
`|` ``CXXConstructor`
`|` ``CXXConversion`
`|` ``CXXDestructor`
`|` ``MSProperty`
`|` ``NonTypeTemplateParm`
`|` ``Var`
`|` ``Decomposition`
`|` ``ImplicitParam`
`|` ``OMPCapturedExpr`
`|` ``ParmVar`
`|` ``VarTemplateSpecialization`
`|` ``VarTemplatePartialSpecialization`
`|` ``EnumConstant`
`|` ``IndirectField`
`|` ``OMPDeclareReduction`
`|` ``UnresolvedUsingValue`
`|` ``OMPThreadPrivate`
`|` ``ObjCPropertyImpl`
`|` ``PragmaComment`
`|` ``PragmaDetectMismatch`
`|` ``StaticAssert`
`|` ``TranslationUnit`

`]```
`type declaration_name_kind` = `[`

`|` ``Identifier`
`|` ``ObjCZeroArgSelector`
`|` ``ObjCOneArgSelector`
`|` ``ObjCMultiArgSelector`
`|` ``CXXConstructorName`
`|` ``CXXDestructorName`
`|` ``CXXConversionFunctionName`
`|` ``CXXOperatorName`
`|` ``CXXLiteralOperatorName`
`|` ``CXXUsingDirective`
`|` ``CXXDeductionGuideName`

`]```
`type declaration_name````=` `{`

`dn_kind : declaration_name_kind;`
`dn_name : string;`

`}```
`type enum_decl_scope` = `[`

`|` ``Class`
`|` ``Struct`

`]```
`type enum_decl_info````=` `{`

`edi_scope : enum_decl_scope option;`
`edi_is_module_private : bool;`

`}```
`type input_kind` = `[`

`|` ``IK_None`
`|` ``IK_Asm`
`|` ``IK_C`
`|` ``IK_CXX`
`|` ``IK_ObjC`
`|` ``IK_ObjCXX`
`|` ``IK_OpenCL`
`|` ``IK_CUDA`
`|` ``IK_RenderScript`
`|` ``IK_LLVM_IR`

`]```
`type integer_literal_info````=` `{`

`ili_is_signed : bool;`
`ili_bitwidth : int;`
`ili_value : string;`

`}```
`type lambda_capture_kind` = `[`

`|` ``LCK_This`
`|` ``LCK_ByCopy`
`|` ``LCK_ByRef`
`|` ``LCK_VLAType`
`|` ``LCK_StarThis`

`]```
`type named_decl_info````=` `{`

`ni_name : string;`
`ni_qual_name : string list;`

`}```
`type obj_c_access_control` = `[`

`|` ``None`
`|` ``Private`
`|` ``Protected`
`|` ``Public`
`|` ``Package`

`]```
`type obj_c_availability_check_expr_info````=` `{`

`oacei_version : string option;`

`}```
`type obj_c_ivar_decl_info````=` `{`

`ovdi_is_synthesize : bool;`
`ovdi_access_control : obj_c_access_control;`

`}```
`type obj_c_property_control` = `[`

`|` ``None`
`|` ``Required`
`|` ``Optional`

`]```
`type obj_c_subscript_kind` = `[`

`|` ``ArraySubscript`
`|` ``DictionarySubscript`

`]```
`type objc_lifetime_attr` = `[`

`|` ``OCL_None`
`|` ``OCL_ExplicitNone`
`|` ``OCL_Strong`
`|` ``OCL_Weak`
`|` ``OCL_Autoreleasing`

`]```
`type object_kind` = `[`

`|` ``Ordinary`
`|` ``BitField`
`|` ``ObjCProperty`
`|` ``ObjCSubscript`
`|` ``VectorComponent`

`]```
`type pointer``= int```
`type addr_label_expr_info````=` `{`

`alei_label : string;`
`alei_pointer : pointer;`

`}```
`type cxx_new_expr_info````=` `{`

`xnei_is_array : bool;`
`xnei_array_size_expr : pointer option;`
`xnei_initializer_expr : pointer option;`
`xnei_placement_args : pointer list;`

`}```
`type cxx_temporary``= pointer```
`type cxx_bind_temporary_expr_info````=` `{`

`xbtei_cxx_temporary : cxx_temporary;`

`}```
`type goto_stmt_info````=` `{`

`gsi_label : string;`
`gsi_pointer : pointer;`

`}```
`type predefined_expr_type` = `[`

`|` ``Func`
`|` ``Function`
`|` ``LFunction`
`|` ``FuncDName`
`|` ``FuncSig`
`|` ``PrettyFunction`
`|` ``PrettyFunctionNoVirtual`

`]```
`type property_attribute` = `[`

`|` ``Readonly`
`|` ``Assign`
`|` ``Readwrite`
`|` ``Retain`
`|` ``Copy`
`|` ``Nonatomic`
`|` ``Atomic`
`|` ``Weak`
`|` ``Strong`
`|` ``Unsafe_unretained`
`|` ``ExplicitGetter`
`|` ``ExplicitSetter`

`]```
`type property_implementation` = `[`

`|` ``Synthesize`
`|` ``Dynamic`

`]```
`type record_decl_info````=` `{`

`rdi_definition_ptr : pointer;`
`rdi_is_module_private : bool;`
`rdi_is_complete_definition : bool;`
`rdi_is_dependent_type : bool;`

`}```
`type selector``= string```
`type obj_c_method_ref_info````=` `{`

`mri_getter : selector option;`
`mri_setter : selector option;`

`}```
`type obj_c_subscript_ref_expr_info````=` `{`

`osrei_kind : obj_c_subscript_kind;`
`osrei_getter : selector option;`
`osrei_setter : selector option;`

`}```
`type objc_boxed_expr_info````=` `{`

`obei_boxing_method : selector option;`

`}```
`type source_file``= string```
`type source_location````=` `{`

`mutable sl_file : source_file option;`
`mutable sl_line : int option;`
`mutable sl_column : int option;`

`}```
`type source_range``= source_location * source_location```
`type attribute_info````=` `{`

`ai_pointer : pointer;`
`ai_source_range : source_range;`
`ai_parameters : string list;`
`ai_is_inherited : bool;`
`ai_is_implicit : bool;`

`}```
`type attribute````=`

`|` `FallThroughAttr of attribute_info`
`|` `SuppressAttr of attribute_info`
`|` `SwiftContextAttr of attribute_info`
`|` `SwiftErrorResultAttr of attribute_info`
`|` `SwiftIndirectResultAttr of attribute_info`
`|` `AnnotateAttr of attribute_info`
`|` `CFConsumedAttr of attribute_info`
`|` `CarriesDependencyAttr of attribute_info`
`|` `NSConsumedAttr of attribute_info`
`|` `NonNullAttr of attribute_info`
`|` `PassObjectSizeAttr of attribute_info`
`|` `AMDGPUFlatWorkGroupSizeAttr of attribute_info`
`|` `AMDGPUNumSGPRAttr of attribute_info`
`|` `AMDGPUNumVGPRAttr of attribute_info`
`|` `AMDGPUWavesPerEUAttr of attribute_info`
`|` `ARMInterruptAttr of attribute_info`
`|` `AVRInterruptAttr of attribute_info`
`|` `AVRSignalAttr of attribute_info`
`|` `AcquireCapabilityAttr of attribute_info`
`|` `AcquiredAfterAttr of attribute_info`
`|` `AcquiredBeforeAttr of attribute_info`
`|` `AlignMac68kAttr of attribute_info`
`|` `AlignedAttr of attribute_info`
`|` `AllocAlignAttr of attribute_info`
`|` `AllocSizeAttr of attribute_info`
`|` `AlwaysInlineAttr of attribute_info`
`|` `AnalyzerNoReturnAttr of attribute_info`
`|` `AnyX86InterruptAttr of attribute_info`
`|` `AnyX86NoCallerSavedRegistersAttr of attribute_info`
`|` `ArcWeakrefUnavailableAttr of attribute_info`
`|` `ArgumentWithTypeTagAttr of attribute_info`
`|` `AsmLabelAttr of attribute_info`
`|` `AssertCapabilityAttr of attribute_info`
`|` `AssertExclusiveLockAttr of attribute_info`
`|` `AssertSharedLockAttr of attribute_info`
`|` `AssumeAlignedAttr of attribute_info`
`|` `AvailabilityAttr of attribute_info`
`|` `BlocksAttr of attribute_info`
`|` `C11NoReturnAttr of attribute_info`
`|` `CDeclAttr of attribute_info`
`|` `CFAuditedTransferAttr of attribute_info`
`|` `CFReturnsNotRetainedAttr of attribute_info`
`|` `CFReturnsRetainedAttr of attribute_info`
`|` `CFUnknownTransferAttr of attribute_info`
`|` `CUDAConstantAttr of attribute_info`
`|` `CUDADeviceAttr of attribute_info`
`|` `CUDAGlobalAttr of attribute_info`
`|` `CUDAHostAttr of attribute_info`
`|` `CUDAInvalidTargetAttr of attribute_info`
`|` `CUDALaunchBoundsAttr of attribute_info`
`|` `CUDASharedAttr of attribute_info`
`|` `CXX11NoReturnAttr of attribute_info`
`|` `CallableWhenAttr of attribute_info`
`|` `CapabilityAttr of attribute_info`
`|` `CapturedRecordAttr of attribute_info`
`|` `CleanupAttr of attribute_info`
`|` `ColdAttr of attribute_info`
`|` `CommonAttr of attribute_info`
`|` `ConstAttr of attribute_info`
`|` `ConstructorAttr of attribute_info`
`|` `ConsumableAttr of attribute_info`
`|` `ConsumableAutoCastAttr of attribute_info`
`|` `ConsumableSetOnReadAttr of attribute_info`
`|` `ConvergentAttr of attribute_info`
`|` `DLLExportAttr of attribute_info`
`|` `DLLImportAttr of attribute_info`
`|` `DeprecatedAttr of attribute_info`
`|` `DestructorAttr of attribute_info`
`|` `DiagnoseIfAttr of attribute_info`
`|` `DisableTailCallsAttr of attribute_info`
`|` `EmptyBasesAttr of attribute_info`
`|` `EnableIfAttr of attribute_info`
`|` `EnumExtensibilityAttr of attribute_info`
`|` `ExclusiveTrylockFunctionAttr of attribute_info`
`|` `ExternalSourceSymbolAttr of attribute_info`
`|` `FastCallAttr of attribute_info`
`|` `FinalAttr of attribute_info`
`|` `FlagEnumAttr of attribute_info`
`|` `FlattenAttr of attribute_info`
`|` `FormatAttr of attribute_info`
`|` `FormatArgAttr of attribute_info`
`|` `GNUInlineAttr of attribute_info`
`|` `GuardedByAttr of attribute_info`
`|` `GuardedVarAttr of attribute_info`
`|` `HotAttr of attribute_info`
`|` `IBActionAttr of attribute_info`
`|` `IBOutletAttr of attribute_info`
`|` `IBOutletCollectionAttr of attribute_info`
`|` `InitPriorityAttr of attribute_info`
`|` `IntelOclBiccAttr of attribute_info`
`|` `InternalLinkageAttr of attribute_info`
`|` `LTOVisibilityPublicAttr of attribute_info`
`|` `LayoutVersionAttr of attribute_info`
`|` `LockReturnedAttr of attribute_info`
`|` `LocksExcludedAttr of attribute_info`
`|` `MSABIAttr of attribute_info`
`|` `MSInheritanceAttr of attribute_info`
`|` `MSNoVTableAttr of attribute_info`
`|` `MSP430InterruptAttr of attribute_info`
`|` `MSStructAttr of attribute_info`
`|` `MSVtorDispAttr of attribute_info`
`|` `MaxFieldAlignmentAttr of attribute_info`
`|` `MayAliasAttr of attribute_info`
`|` `MicroMipsAttr of attribute_info`
`|` `MinSizeAttr of attribute_info`
`|` `Mips16Attr of attribute_info`
`|` `MipsInterruptAttr of attribute_info`
`|` `MipsLongCallAttr of attribute_info`
`|` `MipsShortCallAttr of attribute_info`
`|` `NSConsumesSelfAttr of attribute_info`
`|` `NSReturnsAutoreleasedAttr of attribute_info`
`|` `NSReturnsNotRetainedAttr of attribute_info`
`|` `NSReturnsRetainedAttr of attribute_info`
`|` `NakedAttr of attribute_info`
`|` `NoAliasAttr of attribute_info`
`|` `NoCommonAttr of attribute_info`
`|` `NoDebugAttr of attribute_info`
`|` `NoDuplicateAttr of attribute_info`
`|` `NoInlineAttr of attribute_info`
`|` `NoInstrumentFunctionAttr of attribute_info`
`|` `NoMicroMipsAttr of attribute_info`
`|` `NoMips16Attr of attribute_info`
`|` `NoReturnAttr of attribute_info`
`|` `NoSanitizeAttr of attribute_info`
`|` `NoSplitStackAttr of attribute_info`
`|` `NoThreadSafetyAnalysisAttr of attribute_info`
`|` `NoThrowAttr of attribute_info`
`|` `NotTailCalledAttr of attribute_info`
`|` `OMPCaptureNoInitAttr of attribute_info`
`|` `OMPThreadPrivateDeclAttr of attribute_info`
`|` `ObjCBridgeAttr of attribute_info`
`|` `ObjCBridgeMutableAttr of attribute_info`
`|` `ObjCBridgeRelatedAttr of attribute_info`
`|` `ObjCExceptionAttr of attribute_info`
`|` `ObjCExplicitProtocolImplAttr of attribute_info`
`|` `ObjCIndependentClassAttr of attribute_info`
`|` `ObjCMethodFamilyAttr of attribute_info`
`|` `ObjCNSObjectAttr of attribute_info`
`|` `ObjCPreciseLifetimeAttr of attribute_info`
`|` `ObjCRequiresPropertyDefsAttr of attribute_info`
`|` `ObjCRequiresSuperAttr of attribute_info`
`|` `ObjCReturnsInnerPointerAttr of attribute_info`
`|` `ObjCRootClassAttr of attribute_info`
`|` `ObjCSubclassingRestrictedAttr of attribute_info`
`|` `OpenCLIntelReqdSubGroupSizeAttr of attribute_info`
`|` `OpenCLKernelAttr of attribute_info`
`|` `OpenCLUnrollHintAttr of attribute_info`
`|` `OptimizeNoneAttr of attribute_info`
`|` `OverrideAttr of attribute_info`
`|` `OwnershipAttr of attribute_info`
`|` `PackedAttr of attribute_info`
`|` `ParamTypestateAttr of attribute_info`
`|` `PascalAttr of attribute_info`
`|` `PcsAttr of attribute_info`
`|` `PragmaClangBSSSectionAttr of attribute_info`
`|` `PragmaClangDataSectionAttr of attribute_info`
`|` `PragmaClangRodataSectionAttr of attribute_info`
`|` `PragmaClangTextSectionAttr of attribute_info`
`|` `PreserveAllAttr of attribute_info`
`|` `PreserveMostAttr of attribute_info`
`|` `PtGuardedByAttr of attribute_info`
`|` `PtGuardedVarAttr of attribute_info`
`|` `PureAttr of attribute_info`
`|` `RegCallAttr of attribute_info`
`|` `ReleaseCapabilityAttr of attribute_info`
`|` `ReqdWorkGroupSizeAttr of attribute_info`
`|` `RequireConstantInitAttr of attribute_info`
`|` `RequiresCapabilityAttr of attribute_info`
`|` `RestrictAttr of attribute_info`
`|` `ReturnTypestateAttr of attribute_info`
`|` `ReturnsNonNullAttr of attribute_info`
`|` `ReturnsTwiceAttr of attribute_info`
`|` `ScopedLockableAttr of attribute_info`
`|` `SectionAttr of attribute_info`
`|` `SelectAnyAttr of attribute_info`
`|` `SentinelAttr of attribute_info`
`|` `SetTypestateAttr of attribute_info`
`|` `SharedTrylockFunctionAttr of attribute_info`
`|` `StdCallAttr of attribute_info`
`|` `SwiftCallAttr of attribute_info`
`|` `SysVABIAttr of attribute_info`
`|` `TLSModelAttr of attribute_info`
`|` `TargetAttr of attribute_info`
`|` `TestTypestateAttr of attribute_info`
`|` `ThisCallAttr of attribute_info`
`|` `TransparentUnionAttr of attribute_info`
`|` `TryAcquireCapabilityAttr of attribute_info`
`|` `TypeTagForDatatypeAttr of attribute_info`
`|` `TypeVisibilityAttr of attribute_info`
`|` `UnavailableAttr of attribute_info`
`|` `UnusedAttr of attribute_info`
`|` `UsedAttr of attribute_info`
`|` `UuidAttr of attribute_info`
`|` `VecReturnAttr of attribute_info`
`|` `VecTypeHintAttr of attribute_info`
`|` `VectorCallAttr of attribute_info`
`|` `VisibilityAttr of attribute_info`
`|` `WarnUnusedAttr of attribute_info`
`|` `WarnUnusedResultAttr of attribute_info`
`|` `WeakAttr of attribute_info`
`|` `WeakImportAttr of attribute_info`
`|` `WeakRefAttr of attribute_info`
`|` `WorkGroupSizeHintAttr of attribute_info`
`|` `X86ForceAlignArgPointerAttr of attribute_info`
`|` `XRayInstrumentAttr of attribute_info`
`|` `XRayLogArgsAttr of attribute_info`
`|` `AbiTagAttr of attribute_info`
`|` `AliasAttr of attribute_info`
`|` `AlignValueAttr of attribute_info`
`|` `IFuncAttr of attribute_info`
`|` `InitSegAttr of attribute_info`
`|` `LoopHintAttr of attribute_info`
`|` `ModeAttr of attribute_info`
`|` `NoEscapeAttr of attribute_info`
`|` `OMPCaptureKindAttr of attribute_info`
`|` `OMPDeclareSimdDeclAttr of attribute_info`
`|` `OMPDeclareTargetDeclAttr of attribute_info`
`|` `ObjCBoxableAttr of attribute_info`
`|` `ObjCDesignatedInitializerAttr of attribute_info`
`|` `ObjCRuntimeNameAttr of attribute_info`
`|` `ObjCRuntimeVisibleAttr of attribute_info`
`|` `OpenCLAccessAttr of attribute_info`
`|` `OverloadableAttr of attribute_info`
`|` `RenderScriptKernelAttr of attribute_info`
`|` `ThreadAttr of attribute_info`

``
`type comment_info````=` `{`

`ci_parent_pointer : pointer;`
`ci_source_range : source_range;`

`}```
`type specifier_kind` = `[`

`|` ``Identifier`
`|` ``Namespace`
`|` ``NamespaceAlias`
`|` ``TypeSpec`
`|` ``TypeSpecWithTemplate`
`|` ``Global`
`|` ``Super`

`]```
`type stmt_info````=` `{`

`si_pointer : pointer;`
`si_source_range : source_range;`

`}```
`type tag_kind` = `[`

`|` ``TTK_Struct`
`|` ``TTK_Interface`
`|` ``TTK_Union`
`|` ``TTK_Class`
`|` ``TTK_Enum`

`]```
`type type_attribute_kind` = `[`

`|` ``AddressSpace`
`|` ``Regparm`
`|` ``VectorSize`
`|` ``NeonVectorSize`
`|` ``NeonPolyVectorSize`
`|` ``ObjcGc`
`|` ``ObjcOwnership`
`|` ``Pcs`
`|` ``PcsVfp`
`|` ``Noreturn`
`|` ``Cdecl`
`|` ``Fastcall`
`|` ``Stdcall`
`|` ``Thiscall`
`|` ``Pascal`
`|` ``Vectorcall`
`|` ``Inteloclbicc`
`|` ``MsAbi`
`|` ``SysvAbi`
`|` ``Ptr32`
`|` ``Ptr64`
`|` ``Sptr`
`|` ``Uptr`
`|` ``Nonnull`
`|` ``Nullable`
`|` ``NullUnspecified`
`|` ``ObjcKindof`
`|` ``ObjcInertUnsafeUnretained`
`|` ``Swiftcall`
`|` ``PreserveMost`
`|` ``PreserveAll`
`|` ``Regcall`
`|` ``NSReturnsRetained`

`]```
`type attr_type_info````=` `{`

`ati_attr_kind : type_attribute_kind;`
`ati_lifetime : objc_lifetime_attr;`

`}```
`type type_ptr``= InferGenerated.Clang_ast_types.TypePtr.t```
`type qual_type````=` `{`

`qt_type_ptr : type_ptr;`
`qt_is_const : bool;`
`qt_is_restrict : bool;`
`qt_is_volatile : bool;`

`}```
`type array_type_info````=` `{`

`arti_element_type : qual_type;`
`arti_stride : int option;`

`}```
`type compound_assign_operator_info````=` `{`

`caoi_lhs_type : qual_type;`
`caoi_result_type : qual_type;`

`}```
`type cxx_delete_expr_info````=` `{`

`xdei_is_array : bool;`
`xdei_destroyed_type : qual_type;`

`}```
`type decl_ref````=` `{`

`dr_kind : decl_kind;`
`dr_decl_pointer : pointer;`
`dr_name : named_decl_info option;`
`dr_is_hidden : bool;`
`dr_qual_type : qual_type option;`

`}```
`type cxx_construct_expr_info````=` `{`

`xcei_decl_ref : decl_ref;`
`xcei_is_elidable : bool;`
`xcei_requires_zero_initialization : bool;`
`xcei_is_copy_constructor : bool;`

`}```
`type cxx_ctor_initializer_subject` = `[`

`|` ``Member of decl_ref`
`|` ``Delegating of type_ptr`
`|` ``BaseClass of type_ptr * bool`

`]```
`type decl_ref_expr_info````=` `{`

`drti_decl_ref : decl_ref option;`
`drti_found_decl_ref : decl_ref option;`

`}```
`type expr_with_cleanups_info````=` `{`

`ewci_decl_refs : decl_ref list;`

`}```
`type function_type_info````=` `{`

`fti_return_type : qual_type;`

`}```
`type materialize_temporary_expr_info````=` `{`

`mtei_decl_ref : decl_ref option;`

`}```
`type member_expr_info````=` `{`

`mei_is_arrow : bool;`
`mei_performs_virtual_dispatch : bool;`
`mei_name : named_decl_info;`
`mei_decl_ref : decl_ref;`

`}```
`type namespace_decl_info````=` `{`

`ndi_is_inline : bool;`
`ndi_original_namespace : decl_ref option;`

`}```
`type nested_name_specifier_loc````=` `{`

`nnsl_kind : specifier_kind;`
`nnsl_ref : decl_ref option;`

`}```
`type namespace_alias_decl_info````=` `{`

`nadi_namespace_loc : source_location;`
`nadi_target_name_loc : source_location;`
`nadi_nested_name_specifier_locs : nested_name_specifier_loc list;`
`nadi_namespace : decl_ref;`

`}```
`type obj_c_category_decl_info````=` `{`

`odi_class_interface : decl_ref option;`
`odi_implementation : decl_ref option;`
`odi_protocols : decl_ref list;`

`}```
`type obj_c_category_impl_decl_info````=` `{`

`ocidi_class_interface : decl_ref option;`
`ocidi_category_decl : decl_ref option;`

`}```
`type obj_c_compatible_alias_decl_info````=` `{`

`ocadi_class_interface : decl_ref option;`

`}```
`type obj_c_interface_decl_info````=` `{`

`otdi_super : decl_ref option;`
`otdi_implementation : decl_ref option;`
`otdi_protocols : decl_ref list;`
`otdi_known_categories : decl_ref list;`

`}```
`type obj_c_ivar_ref_expr_info````=` `{`

`ovrei_decl_ref : decl_ref;`
`ovrei_pointer : pointer;`
`ovrei_is_free_ivar : bool;`

`}```
`type obj_c_property_decl_info````=` `{`

`opdi_qual_type : qual_type;`
`opdi_getter_method : decl_ref option;`
`opdi_setter_method : decl_ref option;`
`opdi_ivar_decl : decl_ref option;`
`opdi_property_control : obj_c_property_control;`
`opdi_property_attributes : property_attribute list;`

`}```
`type obj_c_property_impl_decl_info````=` `{`

`opidi_implementation : property_implementation;`
`opidi_property_decl : decl_ref option;`
`opidi_ivar_decl : decl_ref option;`

`}```
`type obj_c_protocol_decl_info````=` `{`

`opcdi_protocols : decl_ref list;`

`}```
`type objc_encode_expr_info````=` `{`

`oeei_qual_type : qual_type;`
`oeei_raw : string;`

`}```
`type objc_object_type_info````=` `{`

`ooti_base_type : type_ptr;`
`ooti_protocol_decls_ptr : pointer list;`
`ooti_type_args : qual_type list;`

`}```
`type overload_expr_info````=` `{`

`oei_decls : decl_ref list;`
`oei_name : declaration_name;`

`}```
`type params_type_info````=` `{`

`pti_params_type : qual_type list;`

`}```
`type property_ref_kind` = `[`

`|` ``MethodRef of obj_c_method_ref_info`
`|` ``PropertyRef of decl_ref`

`]```
`type obj_c_property_ref_expr_info````=` `{`

`oprei_kind : property_ref_kind;`
`oprei_is_super_receiver : bool;`
`oprei_is_messaging_getter : bool;`
`oprei_is_messaging_setter : bool;`

`}```
`type receiver_kind` = `[`

`|` ``Instance`
`|` ``Class of qual_type`
`|` ``SuperInstance`
`|` ``SuperClass`

`]```
`type obj_c_message_expr_info````=` `{`

`omei_selector : string;`
`omei_is_definition_found : bool;`
`omei_decl_pointer : pointer option;`
`omei_receiver_kind : receiver_kind;`

`}```
`type type_info````=` `{`

`ti_pointer : pointer;`
`ti_desugared_type : type_ptr option;`

`}```
`type type_trait_info````=` `{`

`xtti_value : bool;`

`}```
`type typedef_decl_info````=` `{`

`tdi_is_module_private : bool;`

`}```
`type typedef_type_info````=` `{`

`tti_child_type : qual_type;`
`tti_decl_ptr : pointer;`

`}```
`type c_type````=`

`|` `NoneType of type_info`
`|` `BuiltinType of type_info * builtin_type_kind`
`|` `ComplexType of type_info`
`|` `PointerType of type_info * qual_type`
`|` `BlockPointerType of type_info * qual_type`
`|` `LValueReferenceType of type_info * qual_type`
`|` `RValueReferenceType of type_info * qual_type`
`|` `MemberPointerType of type_info * qual_type`
`|` `ConstantArrayType of type_info * array_type_info * int`
`|` `IncompleteArrayType of type_info * array_type_info`
`|` `VariableArrayType of type_info * array_type_info * pointer`
`|` `DependentSizedArrayType of type_info * array_type_info`
`|` `DependentSizedExtVectorType of type_info`
`|` `DependentAddressSpaceType of type_info`
`|` `VectorType of type_info`
`|` `ExtVectorType of type_info`
`|` `FunctionProtoType of type_info * function_type_info * params_type_info`
`|` `FunctionNoProtoType of type_info * function_type_info`
`|` `UnresolvedUsingType of type_info`
`|` `ParenType of type_info * qual_type`
`|` `TypedefType of type_info * typedef_type_info`
`|` `AdjustedType of type_info * qual_type`
`|` `DecayedType of type_info * qual_type`
`|` `TypeOfExprType of type_info`
`|` `TypeOfType of type_info`
`|` `DecltypeType of type_info * qual_type`
`|` `UnaryTransformType of type_info`
`|` `RecordType of type_info * pointer`
`|` `EnumType of type_info * pointer`
`|` `ElaboratedType of type_info`
`|` `AttributedType of type_info * attr_type_info`
`|` `TemplateTypeParmType of type_info`
`|` `SubstTemplateTypeParmType of type_info`
`|` `SubstTemplateTypeParmPackType of type_info`
`|` `TemplateSpecializationType of type_info`
`|` `AutoType of type_info`
`|` `DeducedTemplateSpecializationType of type_info`
`|` `InjectedClassNameType of type_info`
`|` `DependentNameType of type_info`
`|` `DependentTemplateSpecializationType of type_info`
`|` `PackExpansionType of type_info`
`|` `ObjCTypeParamType of type_info`
`|` `ObjCObjectType of type_info * objc_object_type_info`
`|` `ObjCInterfaceType of type_info * pointer`
`|` `ObjCObjectPointerType of type_info * qual_type`
`|` `PipeType of type_info`
`|` `AtomicType of type_info * qual_type`

``
`type translation_unit_decl_info````=` `{`

`tudi_input_path : source_file;`
`tudi_input_kind : input_kind;`
`tudi_arc_enabled : bool;`
`tudi_types : c_type list;`

`}```
`type unary_expr_or_type_trait_kind` = `[`

`|` ``SizeOfWithSize of int`
`|` ``SizeOf`
`|` ``AlignOf`
`|` ``VecStep`
`|` ``OpenMPRequiredSimdAlign`

`]```
`type unary_expr_or_type_trait_expr_info````=` `{`

`uttei_kind : unary_expr_or_type_trait_kind;`
`uttei_qual_type : qual_type;`

`}```
`type unary_operator_kind` = `[`

`|` ``PostInc`
`|` ``PostDec`
`|` ``PreInc`
`|` ``PreDec`
`|` ``AddrOf`
`|` ``Deref`
`|` ``Plus`
`|` ``Minus`
`|` ``Not`
`|` ``LNot`
`|` ``Real`
`|` ``Imag`
`|` ``Extension`
`|` ``Coawait`

`]```
`type unary_operator_info````=` `{`

`uoi_kind : unary_operator_kind;`
`uoi_is_postfix : bool;`

`}```
`type unresolved_lookup_expr_info````=` `{`

`ulei_requires_ADL : bool;`
`ulei_is_overloaded : bool;`
`ulei_naming_class : decl_ref option;`

`}```
`type using_directive_decl_info````=` `{`

`uddi_using_location : source_location;`
`uddi_namespace_key_location : source_location;`
`uddi_nested_name_specifier_locs : nested_name_specifier_loc list;`
`uddi_nominated_namespace : decl_ref option;`

`}```
`type value_kind` = `[`

`|` ``RValue`
`|` ``LValue`
`|` ``XValue`

`]```
`type expr_info````=` `{`

`ei_qual_type : qual_type;`
`ei_value_kind : value_kind;`
`ei_object_kind : object_kind;`

`}```
`type template_instantiation_arg_info` = `[`

`|` ``Null`
`|` ``Type of qual_type`
`|` ``Declaration of pointer`
`|` ``NullPtr`
`|` ``Integral of string`
`|` ``Template`
`|` ``TemplateExpansion`
`|` ``Expression`
`|` ``Pack of template_instantiation_arg_info list`

`]```
`type comment````=`

`|` `BlockCommandComment of comment_info * comment list`
`|` `ParamCommandComment of comment_info * comment list`
`|` `TParamCommandComment of comment_info * comment list`
`|` `VerbatimBlockComment of comment_info * comment list`
`|` `VerbatimLineComment of comment_info * comment list`
`|` `ParagraphComment of comment_info * comment list`
`|` `FullComment of comment_info * comment list`
`|` `HTMLEndTagComment of comment_info * comment list`
`|` `HTMLStartTagComment of comment_info * comment list`
`|` `InlineCommandComment of comment_info * comment list`
`|` `TextComment of comment_info * comment list`
`|` `VerbatimBlockLineComment of comment_info * comment list`

``
`type template_specialization_info````=` `{`

`tsi_template_decl : pointer;`
`tsi_specialization_args : template_instantiation_arg_info list;`

`}```
`type decl_info````=` `{`

`di_pointer : pointer;`
`di_parent_pointer : pointer option;`
`di_source_range : source_range;`
`di_owning_module : string option;`
`di_is_hidden : bool;`
`di_is_implicit : bool;`
`di_is_used : bool;`
`di_is_this_declaration_referenced : bool;`
`di_is_invalid_decl : bool;`
`di_attributes : attribute list;`
`di_full_comment : comment option;`
`di_access : access_specifier;`

`}```
`type block_captured_variable````=` `{`

`bcv_is_by_ref : bool;`
`bcv_is_nested : bool;`
`bcv_variable : decl_ref option;`
`bcv_copy_expr : stmt option;`

`}```
`type block_decl_info````=` `{`

`bdi_parameters : decl list;`
`bdi_is_variadic : bool;`
`bdi_captures_cxx_this : bool;`
`bdi_captured_variables : block_captured_variable list;`
`bdi_body : stmt option;`

`}```
`type cxx_catch_stmt_info````=` `{`

`xcsi_variable : decl option;`

`}```
`type cxx_ctor_initializer````=` `{`

`xci_subject : cxx_ctor_initializer_subject;`
`xci_source_range : source_range;`
`xci_init_expr : stmt option;`

`}```
`type cxx_default_expr_info````=` `{`

`xdaei_init_expr : stmt option;`

`}```
`type cxx_method_decl_info````=` `{`

`xmdi_is_virtual : bool;`
`xmdi_is_static : bool;`
`xmdi_is_constexpr : bool;`
`xmdi_cxx_ctor_initializers : cxx_ctor_initializer list;`
`xmdi_overriden_methods : decl_ref list;`

`}```
`type cxx_record_decl_info````=` `{`

`xrdi_bases : type_ptr list;`
`xrdi_vbases : type_ptr list;`
`xrdi_transitive_vbases : type_ptr list;`
`xrdi_is_pod : bool;`
`xrdi_destructor : decl_ref option;`
`xrdi_lambda_call_operator : decl_ref option;`
`xrdi_lambda_captures : lambda_capture_info list;`

`}```
`type decl````=`

`|` `AccessSpecDecl of decl_info`
`|` `BlockDecl of decl_info * block_decl_info`
`|` `CapturedDecl of decl_info * decl list * decl_context_info`
`|` `ClassScopeFunctionSpecializationDecl of decl_info`
`|` `EmptyDecl of decl_info`
`|` `ExportDecl of decl_info`
`|` `ExternCContextDecl of decl_info`
`|` `FileScopeAsmDecl of decl_info`
`|` `FriendDecl of decl_info * friend_info`
`|` `FriendTemplateDecl of decl_info`
`|` `ImportDecl of decl_info * string`
`|` `LinkageSpecDecl of decl_info * decl list * decl_context_info`
`|` `LabelDecl of decl_info * named_decl_info`
`|` `NamespaceDecl of decl_info * named_decl_info * decl list * decl_context_info * namespace_decl_info`
`|` `NamespaceAliasDecl of decl_info * named_decl_info * namespace_alias_decl_info`
`|` `ObjCCompatibleAliasDecl of decl_info * named_decl_info * obj_c_compatible_alias_decl_info`
`|` `ObjCCategoryDecl of decl_info * named_decl_info * decl list * decl_context_info * obj_c_category_decl_info`
`|` `ObjCCategoryImplDecl of decl_info * named_decl_info * decl list * decl_context_info * obj_c_category_impl_decl_info`
`|` `ObjCImplementationDecl of decl_info * named_decl_info * decl list * decl_context_info * obj_c_implementation_decl_info`
`|` `ObjCInterfaceDecl of decl_info * named_decl_info * decl list * decl_context_info * obj_c_interface_decl_info`
`|` `ObjCProtocolDecl of decl_info * named_decl_info * decl list * decl_context_info * obj_c_protocol_decl_info`
`|` `ObjCMethodDecl of decl_info * named_decl_info * obj_c_method_decl_info`
`|` `ObjCPropertyDecl of decl_info * named_decl_info * obj_c_property_decl_info`
`|` `BuiltinTemplateDecl of decl_info * named_decl_info`
`|` `ClassTemplateDecl of decl_info * named_decl_info * template_decl_info`
`|` `FunctionTemplateDecl of decl_info * named_decl_info * template_decl_info`
`|` `TypeAliasTemplateDecl of decl_info * named_decl_info`
`|` `VarTemplateDecl of decl_info * named_decl_info`
`|` `TemplateTemplateParmDecl of decl_info * named_decl_info`
`|` `EnumDecl of decl_info * named_decl_info * type_ptr * decl list * decl_context_info * tag_kind * enum_decl_info`
`|` `RecordDecl of decl_info * named_decl_info * type_ptr * decl list * decl_context_info * tag_kind * record_decl_info`
`|` `CXXRecordDecl of decl_info * named_decl_info * type_ptr * decl list * decl_context_info * tag_kind * record_decl_info * cxx_record_decl_info`
`|` `ClassTemplateSpecializationDecl of decl_info * named_decl_info * type_ptr * decl list * decl_context_info * tag_kind * record_decl_info * cxx_record_decl_info * string * template_specialization_info`
`|` `ClassTemplatePartialSpecializationDecl of decl_info * named_decl_info * type_ptr * decl list * decl_context_info * tag_kind * record_decl_info * cxx_record_decl_info * string * template_specialization_info`
`|` `TemplateTypeParmDecl of decl_info * named_decl_info * type_ptr`
`|` `ObjCTypeParamDecl of decl_info * named_decl_info * type_ptr`
`|` `TypeAliasDecl of decl_info * named_decl_info * type_ptr`
`|` `TypedefDecl of decl_info * named_decl_info * type_ptr * typedef_decl_info`
`|` `UnresolvedUsingTypenameDecl of decl_info * named_decl_info * type_ptr`
`|` `UsingDecl of decl_info * named_decl_info`
`|` `UsingDirectiveDecl of decl_info * named_decl_info * using_directive_decl_info`
`|` `UsingPackDecl of decl_info * named_decl_info`
`|` `UsingShadowDecl of decl_info * named_decl_info`
`|` `ConstructorUsingShadowDecl of decl_info * named_decl_info`
`|` `BindingDecl of decl_info * named_decl_info * qual_type`
`|` `FieldDecl of decl_info * named_decl_info * qual_type * field_decl_info`
`|` `ObjCAtDefsFieldDecl of decl_info * named_decl_info * qual_type * field_decl_info`
`|` `ObjCIvarDecl of decl_info * named_decl_info * qual_type * field_decl_info * obj_c_ivar_decl_info`
`|` `FunctionDecl of decl_info * named_decl_info * qual_type * function_decl_info`
`|` `CXXDeductionGuideDecl of decl_info * named_decl_info * qual_type * function_decl_info`
`|` `CXXMethodDecl of decl_info * named_decl_info * qual_type * function_decl_info * cxx_method_decl_info`
`|` `CXXConstructorDecl of decl_info * named_decl_info * qual_type * function_decl_info * cxx_method_decl_info`
`|` `CXXConversionDecl of decl_info * named_decl_info * qual_type * function_decl_info * cxx_method_decl_info`
`|` `CXXDestructorDecl of decl_info * named_decl_info * qual_type * function_decl_info * cxx_method_decl_info`
`|` `MSPropertyDecl of decl_info * named_decl_info * qual_type`
`|` `NonTypeTemplateParmDecl of decl_info * named_decl_info * qual_type`
`|` `VarDecl of decl_info * named_decl_info * qual_type * var_decl_info`
`|` `DecompositionDecl of decl_info * named_decl_info * qual_type * var_decl_info`
`|` `ImplicitParamDecl of decl_info * named_decl_info * qual_type * var_decl_info`
`|` `OMPCapturedExprDecl of decl_info * named_decl_info * qual_type * var_decl_info`
`|` `ParmVarDecl of decl_info * named_decl_info * qual_type * var_decl_info`
`|` `VarTemplateSpecializationDecl of decl_info * named_decl_info * qual_type * var_decl_info`
`|` `VarTemplatePartialSpecializationDecl of decl_info * named_decl_info * qual_type * var_decl_info`
`|` `EnumConstantDecl of decl_info * named_decl_info * qual_type * enum_constant_decl_info`
`|` `IndirectFieldDecl of decl_info * named_decl_info * qual_type * decl_ref list`
`|` `OMPDeclareReductionDecl of decl_info * named_decl_info * qual_type`
`|` `UnresolvedUsingValueDecl of decl_info * named_decl_info * qual_type`
`|` `OMPThreadPrivateDecl of decl_info`
`|` `ObjCPropertyImplDecl of decl_info * obj_c_property_impl_decl_info`
`|` `PragmaCommentDecl of decl_info`
`|` `PragmaDetectMismatchDecl of decl_info`
`|` `StaticAssertDecl of decl_info`
`|` `TranslationUnitDecl of decl_info * decl list * decl_context_info * translation_unit_decl_info`

``
`type enum_constant_decl_info````=` `{`

`ecdi_init_expr : stmt option;`

`}```
`type field_decl_info````=` `{`

`fldi_is_mutable : bool;`
`fldi_is_module_private : bool;`
`fldi_init_expr : stmt option;`
`fldi_bit_width_expr : stmt option;`

`}```
`type friend_info` = `[`

`|` ``Type of type_ptr`
`|` ``Decl of decl`

`]```
`type function_decl_info````=` `{`

`fdi_mangled_name : string option;`
`fdi_storage_class : string option;`
`fdi_is_cpp : bool;`
`fdi_is_inline : bool;`
`fdi_is_module_private : bool;`
`fdi_is_pure : bool;`
`fdi_is_delete_as_written : bool;`
`fdi_is_no_throw : bool;`
`fdi_parameters : decl list;`
`fdi_decl_ptr_with_body : pointer option;`
`fdi_body : stmt option;`
`fdi_template_specialization : template_specialization_info option;`

`}```
`type generic_selection_info````=` `{`

`gse_value : stmt option;`

`}```
`type lambda_capture_info````=` `{`

`lci_capture_kind : lambda_capture_kind;`
`lci_capture_this : bool;`
`lci_capture_variable : bool;`
`lci_capture_VLAtype : bool;`
`lci_init_captured_vardecl : decl option;`
`lci_captured_var : decl_ref option;`
`lci_is_implicit : bool;`
`lci_location : source_range;`
`lci_is_pack_expansion : bool;`

`}```
`type lambda_expr_info````=` `{`

`lei_lambda_decl : decl;`

`}```
`type obj_c_implementation_decl_info````=` `{`

`oidi_super : decl_ref option;`
`oidi_class_interface : decl_ref option;`
`oidi_ivar_initializers : cxx_ctor_initializer list;`

`}```
`type obj_c_message_expr_kind` = `[`

`|` ``CatchParam of decl`
`|` ``CatchAll`

`]```
`type obj_c_method_decl_info````=` `{`

`omdi_is_instance_method : bool;`
`omdi_result_type : qual_type;`
`omdi_is_property_accessor : bool;`
`omdi_property_decl : decl_ref option;`
`omdi_parameters : decl list;`
`omdi_implicit_parameters : decl list;`
`omdi_is_variadic : bool;`
`omdi_is_overriding : bool;`
`omdi_body : stmt option;`

`}```
`type opaque_value_expr_info````=` `{`

`ovei_source_expr : stmt option;`

`}```
`type stmt````=`

`|` `GCCAsmStmt of stmt_info * stmt list`
`|` `MSAsmStmt of stmt_info * stmt list`
`|` `AttributedStmt of stmt_info * stmt list * attribute list`
`|` `BreakStmt of stmt_info * stmt list`
`|` `CXXCatchStmt of stmt_info * stmt list * cxx_catch_stmt_info`
`|` `CXXForRangeStmt of stmt_info * stmt list`
`|` `CXXTryStmt of stmt_info * stmt list`
`|` `CapturedStmt of stmt_info * stmt list`
`|` `CompoundStmt of stmt_info * stmt list`
`|` `ContinueStmt of stmt_info * stmt list`
`|` `CoreturnStmt of stmt_info * stmt list`
`|` `CoroutineBodyStmt of stmt_info * stmt list`
`|` `DeclStmt of stmt_info * stmt list * decl list`
`|` `DoStmt of stmt_info * stmt list`
`|` `BinaryConditionalOperator of stmt_info * stmt list * expr_info`
`|` `ConditionalOperator of stmt_info * stmt list * expr_info`
`|` `AddrLabelExpr of stmt_info * stmt list * expr_info * addr_label_expr_info`
`|` `ArrayInitIndexExpr of stmt_info * stmt list * expr_info`
`|` `ArrayInitLoopExpr of stmt_info * stmt list * expr_info`
`|` `ArraySubscriptExpr of stmt_info * stmt list * expr_info`
`|` `ArrayTypeTraitExpr of stmt_info * stmt list * expr_info`
`|` `AsTypeExpr of stmt_info * stmt list * expr_info`
`|` `AtomicExpr of stmt_info * stmt list * expr_info`
`|` `BinaryOperator of stmt_info * stmt list * expr_info * binary_operator_info`
`|` `CompoundAssignOperator of stmt_info * stmt list * expr_info * binary_operator_info * compound_assign_operator_info`
`|` `BlockExpr of stmt_info * stmt list * expr_info * decl`
`|` `CXXBindTemporaryExpr of stmt_info * stmt list * expr_info * cxx_bind_temporary_expr_info`
`|` `CXXBoolLiteralExpr of stmt_info * stmt list * expr_info * int`
`|` `CXXConstructExpr of stmt_info * stmt list * expr_info * cxx_construct_expr_info`
`|` `CXXTemporaryObjectExpr of stmt_info * stmt list * expr_info * cxx_construct_expr_info`
`|` `CXXDefaultArgExpr of stmt_info * stmt list * expr_info * cxx_default_expr_info`
`|` `CXXDefaultInitExpr of stmt_info * stmt list * expr_info * cxx_default_expr_info`
`|` `CXXDeleteExpr of stmt_info * stmt list * expr_info * cxx_delete_expr_info`
`|` `CXXDependentScopeMemberExpr of stmt_info * stmt list * expr_info`
`|` `CXXFoldExpr of stmt_info * stmt list * expr_info`
`|` `CXXInheritedCtorInitExpr of stmt_info * stmt list * expr_info * cxx_construct_expr_info`
`|` `CXXNewExpr of stmt_info * stmt list * expr_info * cxx_new_expr_info`
`|` `CXXNoexceptExpr of stmt_info * stmt list * expr_info * cxx_noexcept_expr_info`
`|` `CXXNullPtrLiteralExpr of stmt_info * stmt list * expr_info`
`|` `CXXPseudoDestructorExpr of stmt_info * stmt list * expr_info`
`|` `CXXScalarValueInitExpr of stmt_info * stmt list * expr_info`
`|` `CXXStdInitializerListExpr of stmt_info * stmt list * expr_info`
`|` `CXXThisExpr of stmt_info * stmt list * expr_info`
`|` `CXXThrowExpr of stmt_info * stmt list * expr_info`
`|` `CXXTypeidExpr of stmt_info * stmt list * expr_info`
`|` `CXXUnresolvedConstructExpr of stmt_info * stmt list * expr_info`
`|` `CXXUuidofExpr of stmt_info * stmt list * expr_info`
`|` `CallExpr of stmt_info * stmt list * expr_info`
`|` `CUDAKernelCallExpr of stmt_info * stmt list * expr_info`
`|` `CXXMemberCallExpr of stmt_info * stmt list * expr_info`
`|` `CXXOperatorCallExpr of stmt_info * stmt list * expr_info`
`|` `UserDefinedLiteral of stmt_info * stmt list * expr_info`
`|` `CStyleCastExpr of stmt_info * stmt list * expr_info * cast_expr_info * qual_type`
`|` `CXXFunctionalCastExpr of stmt_info * stmt list * expr_info * cast_expr_info * qual_type`
`|` `CXXConstCastExpr of stmt_info * stmt list * expr_info * cast_expr_info * qual_type * string`
`|` `CXXDynamicCastExpr of stmt_info * stmt list * expr_info * cast_expr_info * qual_type * string`
`|` `CXXReinterpretCastExpr of stmt_info * stmt list * expr_info * cast_expr_info * qual_type * string`
`|` `CXXStaticCastExpr of stmt_info * stmt list * expr_info * cast_expr_info * qual_type * string`
`|` `ObjCBridgedCastExpr of stmt_info * stmt list * expr_info * cast_expr_info * qual_type`
`|` `ImplicitCastExpr of stmt_info * stmt list * expr_info * cast_expr_info`
`|` `CharacterLiteral of stmt_info * stmt list * expr_info * int`
`|` `ChooseExpr of stmt_info * stmt list * expr_info`
`|` `CompoundLiteralExpr of stmt_info * stmt list * expr_info`
`|` `ConvertVectorExpr of stmt_info * stmt list * expr_info`
`|` `CoawaitExpr of stmt_info * stmt list * expr_info`
`|` `CoyieldExpr of stmt_info * stmt list * expr_info`
`|` `DeclRefExpr of stmt_info * stmt list * expr_info * decl_ref_expr_info`
`|` `DependentCoawaitExpr of stmt_info * stmt list * expr_info`
`|` `DependentScopeDeclRefExpr of stmt_info * stmt list * expr_info`
`|` `DesignatedInitExpr of stmt_info * stmt list * expr_info`
`|` `DesignatedInitUpdateExpr of stmt_info * stmt list * expr_info`
`|` `ExprWithCleanups of stmt_info * stmt list * expr_info * expr_with_cleanups_info`
`|` `ExpressionTraitExpr of stmt_info * stmt list * expr_info`
`|` `ExtVectorElementExpr of stmt_info * stmt list * expr_info`
`|` `FloatingLiteral of stmt_info * stmt list * expr_info * string`
`|` `FunctionParmPackExpr of stmt_info * stmt list * expr_info`
`|` `GNUNullExpr of stmt_info * stmt list * expr_info`
`|` `GenericSelectionExpr of stmt_info * stmt list * expr_info * generic_selection_info`
`|` `ImaginaryLiteral of stmt_info * stmt list * expr_info`
`|` `ImplicitValueInitExpr of stmt_info * stmt list * expr_info`
`|` `InitListExpr of stmt_info * stmt list * expr_info`
`|` `IntegerLiteral of stmt_info * stmt list * expr_info * integer_literal_info`
`|` `LambdaExpr of stmt_info * stmt list * expr_info * lambda_expr_info`
`|` `MSPropertyRefExpr of stmt_info * stmt list * expr_info`
`|` `MSPropertySubscriptExpr of stmt_info * stmt list * expr_info`
`|` `MaterializeTemporaryExpr of stmt_info * stmt list * expr_info * materialize_temporary_expr_info`
`|` `MemberExpr of stmt_info * stmt list * expr_info * member_expr_info`
`|` `NoInitExpr of stmt_info * stmt list * expr_info`
`|` `OMPArraySectionExpr of stmt_info * stmt list * expr_info`
`|` `ObjCArrayLiteral of stmt_info * stmt list * expr_info`
`|` `ObjCAvailabilityCheckExpr of stmt_info * stmt list * expr_info * obj_c_availability_check_expr_info`
`|` `ObjCBoolLiteralExpr of stmt_info * stmt list * expr_info * int`
`|` `ObjCBoxedExpr of stmt_info * stmt list * expr_info * objc_boxed_expr_info`
`|` `ObjCDictionaryLiteral of stmt_info * stmt list * expr_info`
`|` `ObjCEncodeExpr of stmt_info * stmt list * expr_info * objc_encode_expr_info`
`|` `ObjCIndirectCopyRestoreExpr of stmt_info * stmt list * expr_info`
`|` `ObjCIsaExpr of stmt_info * stmt list * expr_info`
`|` `ObjCIvarRefExpr of stmt_info * stmt list * expr_info * obj_c_ivar_ref_expr_info`
`|` `ObjCMessageExpr of stmt_info * stmt list * expr_info * obj_c_message_expr_info`
`|` `ObjCPropertyRefExpr of stmt_info * stmt list * expr_info * obj_c_property_ref_expr_info`
`|` `ObjCProtocolExpr of stmt_info * stmt list * expr_info * decl_ref`
`|` `ObjCSelectorExpr of stmt_info * stmt list * expr_info * selector`
`|` `ObjCStringLiteral of stmt_info * stmt list * expr_info`
`|` `ObjCSubscriptRefExpr of stmt_info * stmt list * expr_info * obj_c_subscript_ref_expr_info`
`|` `OffsetOfExpr of stmt_info * stmt list * expr_info`
`|` `OpaqueValueExpr of stmt_info * stmt list * expr_info * opaque_value_expr_info`
`|` `UnresolvedLookupExpr of stmt_info * stmt list * expr_info * overload_expr_info * unresolved_lookup_expr_info`
`|` `UnresolvedMemberExpr of stmt_info * stmt list * expr_info * overload_expr_info`
`|` `PackExpansionExpr of stmt_info * stmt list * expr_info`
`|` `ParenExpr of stmt_info * stmt list * expr_info`
`|` `ParenListExpr of stmt_info * stmt list * expr_info`
`|` `PredefinedExpr of stmt_info * stmt list * expr_info * predefined_expr_type`
`|` `PseudoObjectExpr of stmt_info * stmt list * expr_info`
`|` `ShuffleVectorExpr of stmt_info * stmt list * expr_info`
`|` `SizeOfPackExpr of stmt_info * stmt list * expr_info`
`|` `StmtExpr of stmt_info * stmt list * expr_info`
`|` `StringLiteral of stmt_info * stmt list * expr_info * string list`
`|` `SubstNonTypeTemplateParmExpr of stmt_info * stmt list * expr_info`
`|` `SubstNonTypeTemplateParmPackExpr of stmt_info * stmt list * expr_info`
`|` `TypeTraitExpr of stmt_info * stmt list * expr_info * type_trait_info`
`|` `TypoExpr of stmt_info * stmt list * expr_info`
`|` `UnaryExprOrTypeTraitExpr of stmt_info * stmt list * expr_info * unary_expr_or_type_trait_expr_info`
`|` `UnaryOperator of stmt_info * stmt list * expr_info * unary_operator_info`
`|` `VAArgExpr of stmt_info * stmt list * expr_info`
`|` `ForStmt of stmt_info * stmt list`
`|` `GotoStmt of stmt_info * stmt list * goto_stmt_info`
`|` `IfStmt of stmt_info * stmt list`
`|` `IndirectGotoStmt of stmt_info * stmt list`
`|` `LabelStmt of stmt_info * stmt list * string`
`|` `MSDependentExistsStmt of stmt_info * stmt list`
`|` `NullStmt of stmt_info * stmt list`
`|` `OMPAtomicDirective of stmt_info * stmt list`
`|` `OMPBarrierDirective of stmt_info * stmt list`
`|` `OMPCancelDirective of stmt_info * stmt list`
`|` `OMPCancellationPointDirective of stmt_info * stmt list`
`|` `OMPCriticalDirective of stmt_info * stmt list`
`|` `OMPFlushDirective of stmt_info * stmt list`
`|` `OMPDistributeDirective of stmt_info * stmt list`
`|` `OMPDistributeParallelForDirective of stmt_info * stmt list`
`|` `OMPDistributeParallelForSimdDirective of stmt_info * stmt list`
`|` `OMPDistributeSimdDirective of stmt_info * stmt list`
`|` `OMPForDirective of stmt_info * stmt list`
`|` `OMPForSimdDirective of stmt_info * stmt list`
`|` `OMPParallelForDirective of stmt_info * stmt list`
`|` `OMPParallelForSimdDirective of stmt_info * stmt list`
`|` `OMPSimdDirective of stmt_info * stmt list`
`|` `OMPTargetParallelForSimdDirective of stmt_info * stmt list`
`|` `OMPTargetSimdDirective of stmt_info * stmt list`
`|` `OMPTargetTeamsDistributeDirective of stmt_info * stmt list`
`|` `OMPTargetTeamsDistributeParallelForDirective of stmt_info * stmt list`
`|` `OMPTargetTeamsDistributeParallelForSimdDirective of stmt_info * stmt list`
`|` `OMPTargetTeamsDistributeSimdDirective of stmt_info * stmt list`
`|` `OMPTaskLoopDirective of stmt_info * stmt list`
`|` `OMPTaskLoopSimdDirective of stmt_info * stmt list`
`|` `OMPTeamsDistributeDirective of stmt_info * stmt list`
`|` `OMPTeamsDistributeParallelForDirective of stmt_info * stmt list`
`|` `OMPTeamsDistributeParallelForSimdDirective of stmt_info * stmt list`
`|` `OMPTeamsDistributeSimdDirective of stmt_info * stmt list`
`|` `OMPMasterDirective of stmt_info * stmt list`
`|` `OMPOrderedDirective of stmt_info * stmt list`
`|` `OMPParallelDirective of stmt_info * stmt list`
`|` `OMPParallelSectionsDirective of stmt_info * stmt list`
`|` `OMPSectionDirective of stmt_info * stmt list`
`|` `OMPSectionsDirective of stmt_info * stmt list`
`|` `OMPSingleDirective of stmt_info * stmt list`
`|` `OMPTargetDataDirective of stmt_info * stmt list`
`|` `OMPTargetDirective of stmt_info * stmt list`
`|` `OMPTargetEnterDataDirective of stmt_info * stmt list`
`|` `OMPTargetExitDataDirective of stmt_info * stmt list`
`|` `OMPTargetParallelDirective of stmt_info * stmt list`
`|` `OMPTargetParallelForDirective of stmt_info * stmt list`
`|` `OMPTargetTeamsDirective of stmt_info * stmt list`
`|` `OMPTargetUpdateDirective of stmt_info * stmt list`
`|` `OMPTaskDirective of stmt_info * stmt list`
`|` `OMPTaskgroupDirective of stmt_info * stmt list`
`|` `OMPTaskwaitDirective of stmt_info * stmt list`
`|` `OMPTaskyieldDirective of stmt_info * stmt list`
`|` `OMPTeamsDirective of stmt_info * stmt list`
`|` `ObjCAtCatchStmt of stmt_info * stmt list * obj_c_message_expr_kind`
`|` `ObjCAtFinallyStmt of stmt_info * stmt list`
`|` `ObjCAtSynchronizedStmt of stmt_info * stmt list`
`|` `ObjCAtThrowStmt of stmt_info * stmt list`
`|` `ObjCAtTryStmt of stmt_info * stmt list`
`|` `ObjCAutoreleasePoolStmt of stmt_info * stmt list`
`|` `ObjCForCollectionStmt of stmt_info * stmt list`
`|` `ReturnStmt of stmt_info * stmt list`
`|` `SEHExceptStmt of stmt_info * stmt list`
`|` `SEHFinallyStmt of stmt_info * stmt list`
`|` `SEHLeaveStmt of stmt_info * stmt list`
`|` `SEHTryStmt of stmt_info * stmt list`
`|` `CaseStmt of stmt_info * stmt list`
`|` `DefaultStmt of stmt_info * stmt list`
`|` `SwitchStmt of stmt_info * stmt list`
`|` `WhileStmt of stmt_info * stmt list`

``
`type template_decl_info````=` `{`

`tdi_specializations : decl list;`

`}```
`type var_decl_info````=` `{`

`vdi_is_global : bool;`
`vdi_is_extern : bool;`
`vdi_is_static_local : bool;`
`vdi_is_static_data_member : bool;`
`vdi_is_const_expr : bool;`
`vdi_init_expr : stmt option;`
`vdi_parm_index_in_function : int option;`
`vdi_storage_class : string option;`

`}```
`type lookup````=` `{`

`lup_decl_name : string;`
`lup_decl_refs : decl_ref list;`

`}```
`type lookups````=` `{`

`lups_decl_ref : decl_ref;`
`lups_primary_context_pointer : pointer option;`
`lups_lookups : lookup list;`
`lups_has_undeserialized_decls : bool;`

`}```