LocInfoType {(clang::Type::TypeClass)TypeBits.TC, en}Type {*(clang::BuiltinType *)this} {*(clang::PointerType *)this} {*(clang::LValueReferenceType *)this} {*(clang::RValueReferenceType *)this} {*(clang::AttributedType *)this} {*(clang::TemplateTypeParmType *)this} {*(clang::SubstTemplateTypeParmType *)this} {*(clang::RecordType *)this} {*(clang::RecordType *)this,view(cpp)} {*(clang::FunctionProtoType *)this} {*(clang::TemplateSpecializationType *)this} {*(clang::InjectedClassNameType *)this} {*(clang::PackExpansionType *)this} {*(clang::LocInfoType *)this} {*this,view(poly)} {*this,view(cmn)} {*this,view(cmn)} {{{*this,view(poly)}}} (clang::Type::TypeClass)TypeBits.TC TypeBits CanonicalType *(clang::BuiltinType *)this *(clang::PointerType *)this *(clang::LValueReferenceType *)this *(clang::RValueReferenceType *)this *(clang::AttributedType *)this (clang::TemplateTypeParmType *)this (clang::SubstTemplateTypeParmType *)this (clang::RecordType *)this (clang::FunctionProtoType *)this (clang::TemplateSpecializationType *)this (clang::InjectedClassNameType *)this (clang::PackExpansionType *)this (clang::LocInfoType *)this {PointeeType, view(poly)} * PointeeType *(clang::Type *)this, view(cmn) {((clang::ReferenceType *)this)->PointeeType,view(cpp)} & *(clang::Type *)this, view(cmn) PointeeType {((clang::ReferenceType *)this)->PointeeType,view(cpp)} && *(clang::Type *)this, view(cmn) PointeeType {ModifiedType} Attribute={(clang::AttributedType::Kind)AttributedTypeBits.AttrKind} {(clang::Decl::Kind)DeclKind,en}Decl (clang::Decl::Kind)DeclKind,en FirstDecl (clang::Decl *)(NextInContextAndBits.Value & ~3) *this Field {{{*(clang::DeclaratorDecl *)this,view(cpp)nd}}} {*(clang::FunctionDecl *)this,nd} Method {{{*this,view(cpp)}}} Constructor {{{Name,view(cpp)}({*(clang::FunctionDecl *)this,view(parm0)nd})}} Destructor {{~{Name,view(cpp)}()}} typename class ... {*this,view(TorC)} {*this,view(MaybeEllipses)}{Name,view(cpp)} template{*TemplateParams} {*TemplatedDecl}; {Name,view(cpp)} {Name} implicit{" ",sb} {*this,view(implicit)} {*this,view(modifiers)}{Name,view(cpp)} {*this,view(modifiers)}struct {Name,view(cpp)} {*this,view(modifiers)}interface {Name,view(cpp)} {*this,view(modifiers)}union {Name,view(cpp)} {*this,view(modifiers)}class {Name,view(cpp)} {*this,view(modifiers)}enum {Name,view(cpp)} (clang::DeclContext *)this {*decl,view(cpp)} {*decl} *(clang::Type *)this, view(cmn) decl {*(clang::TagType *)this,view(cpp)} {*(clang::TagType *)this} *(clang::TagType *)this {*Replaced,view(cpp)} <= {CanonicalType,view(cpp)} *(clang::Type *)this, view(cmn) *Replaced {ResultType,view(cpp)} {*(clang::QualType *)(this+1),view(cpp)}{*this,view(parm1)} , {*((clang::QualType *)(this+1)+1),view(cpp)}{*this,view(parm2)} , {*((clang::QualType *)(this+1)+2),view(cpp)}{*this,view(parm3)} , {*((clang::QualType *)(this+1)+3),view(cpp)}{*this,view(parm4)} , {*((clang::QualType *)(this+1)+4),view(cpp)}{*this,view(parm5)} , /* expand for more params */ {*this,view(retType)}({*this,view(parm0)}) ResultType {*this,view(parm0)} NumParams (clang::QualType *)(this+1) *(clang::Type *)this, view(cmn) {*TTPDecl,view(cpp)} {*TTPDecl} {*Decl,view(cpp)} Decl InjectedType *(clang::Type *)this, view(cmn) {Pattern} Pattern NumExpansions *(clang::Type *)this, view(cmn) {*((clang::ExtQualsTypeCommonBase *)(((uintptr_t)Value.Value) & ~(uintptr_t)((1 << 4) - 1)))->BaseType,view(poly)}{*this,view(fastQuals)} {*((clang::ExtQualsTypeCommonBase *)(((uintptr_t)Value.Value) & ~(uintptr_t)((1 << 4) - 1)))->BaseType,view(cpp)}{*this,view(fastQuals)} {" ",sb}const {" ",sb}restrict {" ",sb}const restrict {" ",sb}volatile {" ",sb}const volatile {" ",sb}volatile restrict {" ",sb}const volatile restrict Cannot visualize non-fast qualifiers {*((clang::ExtQualsTypeCommonBase *)(((uintptr_t)Value.Value) & ~(uintptr_t)((1 << 4) - 1)))->BaseType}{*this,view(fastQuals)} *this,view(fastQuals) *((clang::ExtQualsTypeCommonBase *)(((uintptr_t)Value.Value) & ~(uintptr_t)((1 << 4) - 1)))->BaseType {*DeclInfo} DeclInfo *(clang::Type *)this, view(cmn) {Ty} {Argument} Argument {*(clang::QualType *)&TypeOrValue.V,view(cpp)} {(clang::TemplateArgument::ArgKind)TypeOrValue.Kind,en} template argument: {*(clang::QualType *)&TypeOrValue.V} {Args.Args[0]}{*this,view(arg1)} , {Args.Args[1]}{*this,view(arg2)} , {Args.Args[2]}, ... {Args.Args[0],view(cpp)}{*this,view(arg1cpp)} , {Args.Args[1],view(cpp)}{*this,view(arg2cpp)} , {Args.Args[2],view(cpp)}, ... {*this,view(arg0cpp)} {*this,view(arg0)} {(clang::TemplateArgument::ArgKind)TypeOrValue.Kind,en} *(clang::QualType *)&TypeOrValue.V Args.NumArgs Args.Args {Arguments[0],view(cpp)}{*this,view(arg1)} , {Arguments[1],view(cpp)}{*this,view(arg2)} , {Arguments[1],view(cpp)}, ... <{*this,view(arg0)}> NumArguments NumArguments Arguments {Data[0],view(cpp)}{*this,view(arg1)} , {Data[1],view(cpp)}{*this,view(arg2)} , {Data[2],view(cpp)}, ... <{*this,view(arg0)}> {((llvm::ArrayRef<clang::TemplateArgument> *)TemplateArgumentLists.BeginX)[0],view(cpp)}{*this,view(level1)} ::{((llvm::ArrayRef<clang::TemplateArgument> *)TemplateArgumentLists.BeginX)[1],view(cpp)}{*this,view(level2)} ::{((llvm::ArrayRef<clang::TemplateArgument> *)TemplateArgumentLists.BeginX)[2],view(cpp)}, ... {*this,view(level0)} TemplateArgumentLists Type template argument: {*(clang::QualType *)Arg} Non-type template argument: {*(clang::Expr *)Arg} Template template argument: {*(clang::TemplateName *)Arg Kind,en (clang::QualType *)Arg (clang::Expr *)Arg (clang::TemplateName *)Arg void bool char unsigned char wchar_t char16_t char32_t unsigned short unsigned int unsigned long unsigned long long __uint128_t char signed char wchar_t short int long long long __int128_t __fp16 float double long double nullptr_t {(clang::BuiltinType::Kind)BuiltinTypeBits.Kind, en} (clang::BuiltinType::Kind)BuiltinTypeBits.Kind {((clang::TemplateArgument *)(this+1))[0],view(cpp)}{*this,view(arg1)} , {((clang::TemplateArgument *)(this+1))[1],view(cpp)}{*this,view(arg2)} , {((clang::TemplateArgument *)(this+1))[2],view(cpp)}{*this,view(arg3)} {*((clang::TemplateDecl *)((Template.Storage.Val.Val.Value >> 2) << 2))->TemplatedDecl,view(cpp)}<{*this,view(arg0)}> Template.Storage NumArgs (clang::TemplateArgument *)(this+1) {((llvm::StringMapEntry<clang::IdentifierInfo *>*)Entry)+1,sb} ((llvm::StringMapEntry<clang::IdentifierInfo *>*)Entry)+1,s (clang::tok::TokenKind)TokenID Empty {*(clang::IdentifierInfo *)(Ptr & ~PtrMask)} {{Identifier ({*(clang::IdentifierInfo *)(Ptr & ~PtrMask)})}} {{ObjC Zero Arg Selector (*{(clang::IdentifierInfo *)(Ptr & ~PtrMask)})}} {{ObjC One Arg Selector (*{(clang::IdentifierInfo *)(Ptr & ~PtrMask)})}} {*(clang::DeclarationNameExtra *)(Ptr & ~PtrMask),view(cpp)} {{Extra ({*(clang::DeclarationNameExtra *)(Ptr & ~PtrMask)})}} *(clang::IdentifierInfo *)(Ptr & ~PtrMask) *(clang::IdentifierInfo *)(Ptr & ~PtrMask) *(clang::IdentifierInfo *)(Ptr & ~PtrMask) (clang::DeclarationNameExtra *)(Ptr & ~PtrMask) {((clang::CXXSpecialName *)this)->Type,view(cpp)} {(clang::DeclarationNameExtra::ExtraKind)ExtraKindOrNumArgs,en}{" ",sb}{*this,view(cpp)} {(clang::tok::TokenKind)Kind,en} {{Identifier ({*(clang::IdentifierInfo *)(PtrData)})}} [{(clang::DeclSpec::SCS)StorageClassSpec}], [{(clang::TypeSpecifierType)TypeSpecType}] {Name,s} {Name,s} {Name,s} (clang::StorageClass)SClass (clang::ThreadStorageClassSpecifier)TSCSpec (clang::VarDecl::InitializationStyle)InitStyle {DeclType,view(cpp)} {Name,view(cpp)} Name DeclType {*(DeclaratorDecl*)this,nd} *(DeclaratorDecl*)this,nd VarDeclBits {*(VarDecl*)this,nd} ParmVarDeclBits *(VarDecl*)this,nd {*(clang::FunctionProtoType *)((clang::ExtQualsTypeCommonBase *)(((uintptr_t)DeclType.Value.Value) & ~15))->BaseType,view(retType)} {*ParamInfo[0]}{*this,view(parm1)nd} , {*ParamInfo[1]}{*this,view(parm2)nd} , {*ParamInfo[2]}{*this,view(parm3)nd} , {*ParamInfo[3]}{*this,view(parm4)nd} , {*ParamInfo[4]}{*this,view(parm5)nd} , /* expand for more params */ {*this,view(retType)nd} {Name,view(cpp)nd}({*this,view(parm0)nd}) *this,view(retType)nd {*this,view(parm0)nd} ((clang::FunctionProtoType *)((clang::ExtQualsTypeCommonBase *)(((uintptr_t)DeclType.Value.Value) & ~15))->BaseType)->NumParams ParamInfo *(clang::Type *)this, view(cmn) {*(clang::QualType *)this} *(clang::QualType *)this {*(clang::QualType *)this} *(clang::QualType *)this {($T1 *)Ptr} ($T1 *)Ptr {($T1 *)Ptr} ($T1 *)Ptr {*((NamedDecl **)(this+1))[0],view(cpp)}{*this,view(parm1)} , {*((NamedDecl **)(this+1))[1],view(cpp)}{*this,view(parm2)} , {*((NamedDecl **)(this+1))[2],view(cpp)}{*this,view(parm3)} , {*((NamedDecl **)(this+1))[3],view(cpp)}{*this,view(parm4)} , {*((NamedDecl **)(this+1))[4],view(cpp)}{*this,view(parm5)} , /* Expand for more params */ <{*this,view(parm0)}> NumParams (NamedDecl **)(this+1) {(clang::Stmt::StmtClass)StmtBits.sClass,en} (clang::Stmt::StmtClass)StmtBits.sClass,en Expression of class {(clang::Stmt::StmtClass)StmtBits.sClass,en} and type {TR,view(cpp)} public protected private b {*(clang::NamedDecl *)(Ptr&~Mask)} {*this,view(access)} {*this,view(decl)} {Decls} Decls {Ambiguity,en}: {Decls} {ResultKind,en}: {Decls} Invalid Valid Invalid Valid {*this,view(packedValidity)}: {($T1 *)(PtrWithInvalid&~1)} (bool)(PtrWithInvalid&1) ($T1 *)(PtrWithInvalid&~1) {*this,view(unpackedValidity)}: {Val} {*this,view(packed)} {*this,view(unpacked)} *this,view(packed) *this,view(unpacked)