From ca2d0f94fa98654256a69344fe9df3c6b2487655 Mon Sep 17 00:00:00 2001 From: Mike Spertus Date: Tue, 22 Mar 2016 02:29:22 +0000 Subject: [PATCH] Visual Studio Native Visualizations for constructors and methods With this change, the class struct A { A(int _i); ~A(); int foo(double d); double bar(A *a) { return 1.3; } }; appears in the VS2015 Locals Window as D 0x02dbb378 struct A |- DeclKind CXXRecord |- Members |- [0] implicit struct A |- [1] Constructor {A(int _i)} |- [2] Destructor {~A()} |- [3] Method {int foo(double d)} |- [4] Method {double bar(struct A *)} |- [Raw View] /* Other stuff */ Note that these changes only benefit VS2015 as VS2013 does not have views and only displays the struct name "A", but the change does no apparent harm in VS2013, so is still a win. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@264020 91177308-0d34-0410-b5e6-96231b3b80d8 --- utils/clang.natvis | 68 ++++++++++++++++++++++++++++++---------------- 1 file changed, 45 insertions(+), 23 deletions(-) diff --git a/utils/clang.natvis b/utils/clang.natvis index 63f7f7634b..7abc7fa363 100644 --- a/utils/clang.natvis +++ b/utils/clang.natvis @@ -29,6 +29,7 @@ or create a symbolic link so it updates automatically. {*(clang::TemplateTypeParmType *)this} {*(clang::SubstTemplateTypeParmType *)this} {*(clang::RecordType *)this} + {*(clang::RecordType *)this,view(cpp)} {*(clang::FunctionProtoType *)this} {*this,view(poly)} {*this,view(cmn)}" @@ -81,40 +82,51 @@ or create a symbolic link so it updates automatically. {(clang::Decl::Kind)DeclKind,en}Decl (clang::Decl::Kind)DeclKind,en - - FirstDecl - (clang::Decl *)(NextInContextAndBits.Value & ~3) - *this - + + + + + FirstDecl + (clang::Decl *)(NextInContextAndBits.Value & ~3) + *this + + + Field {{{*(clang::NamedDecl *)this,view(cpp)nd}}} - Method {{{*(clang::NamedDecl *)this,view(cpp)nd}}} + {*(clang::FunctionDecl *)this,nd} + Method {{{*this,view(cpp)}}} - Constructor {{{*(clang::NamedDecl *)this,view(cpp)nd}}} + Constructor {{{Name,view(cpp)}({*(clang::FunctionDecl *)this,view(parm0)nd})}} - Destructor {{{*(clang::NamedDecl *)this,view(cpp)nd}}} + Destructor {{~{Name,view(cpp)}()}} {Name,view(cpp)} {Name} - struct {Name,view(cpp)} - interface {Name,view(cpp)} - union {Name,view(cpp)} - class {Name,view(cpp)} - enum {Name,view(cpp)} + 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) @@ -122,6 +134,7 @@ or create a symbolic link so it updates automatically. + {*(clang::TagType *)this,view(cpp)} {*(clang::TagType *)this} *(clang::TagType *)this @@ -241,14 +254,23 @@ or create a symbolic link so it updates automatically. {{Identifier ({*(clang::IdentifierInfo *)(Ptr & ~PtrMask)})}} {{ObjC Zero Arg Selector (*{(clang::IdentifierInfo *)(Ptr & ~PtrMask)})}} {{ObjC One Arg Selector (*{(clang::IdentifierInfo *)(Ptr & ~PtrMask)})}} - {{Extra ({(clang::DeclarationNameExtra::ExtraKind)((clang::DeclarationNameExtra *)(Ptr & ~PtrMask))->ExtraKindOrNumArgs})}} + {*(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::ExtraKind)((clang::DeclarationNameExtra *)(Ptr & ~PtrMask))->ExtraKindOrNumArgs + (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)})}} @@ -292,22 +314,22 @@ or create a symbolic link so it updates automatically. {*(clang::FunctionProtoType *)((clang::ExtQualsTypeCommonBase *)(((uintptr_t)DeclType.Value.Value) & ~15))->BaseType,view(retType)} - {*ParamInfo[0]}{*this,view(parm1)} + {*ParamInfo[0]}{*this,view(parm1)nd} - , {*ParamInfo[1]}{*this,view(parm2)} + , {*ParamInfo[1]}{*this,view(parm2)nd} - , {*ParamInfo[2]}{*this,view(parm3)} + , {*ParamInfo[2]}{*this,view(parm3)nd} - , {*ParamInfo[3]}{*this,view(parm4)} + , {*ParamInfo[3]}{*this,view(parm4)nd} - , {*ParamInfo[4]}{*this,view(parm5)} + , {*ParamInfo[4]}{*this,view(parm5)nd} , /* expand for more params */ - {*this,view(retType)} {Name,view(cpp)}({*this,view(parm0)}) + {*this,view(retType)nd} {Name,view(cpp)nd}({*this,view(parm0)nd}) - *this,view(retType) + *this,view(retType)nd - {*this,view(parm0)} + {*this,view(parm0)nd} ((clang::FunctionProtoType *)((clang::ExtQualsTypeCommonBase *)(((uintptr_t)DeclType.Value.Value) & ~15))->BaseType)->NumParams -- 2.50.1