diff options
Diffstat (limited to 'contrib/llvm/tools/clang/lib/AST/DumpXML.cpp')
-rw-r--r-- | contrib/llvm/tools/clang/lib/AST/DumpXML.cpp | 50 |
1 files changed, 24 insertions, 26 deletions
diff --git a/contrib/llvm/tools/clang/lib/AST/DumpXML.cpp b/contrib/llvm/tools/clang/lib/AST/DumpXML.cpp index 2568ada..4c7cd8a 100644 --- a/contrib/llvm/tools/clang/lib/AST/DumpXML.cpp +++ b/contrib/llvm/tools/clang/lib/AST/DumpXML.cpp @@ -39,8 +39,7 @@ #include "clang/AST/TypeVisitor.h" #include "clang/AST/Expr.h" #include "clang/AST/ExprCXX.h" -#include "llvm/ADT/SmallVector.h" -#include "llvm/ADT/StringRef.h" +#include "llvm/ADT/SmallString.h" using namespace clang; @@ -66,7 +65,6 @@ template <class Impl> struct XMLDeclVisitor { void dispatch(Decl *D) { switch (D->getKind()) { - default: llvm_unreachable("Decl that isn't part of DeclNodes.inc!"); #define DECL(DERIVED, BASE) \ case Decl::DERIVED: \ DISPATCH(dispatch##DERIVED##DeclAttrs, DERIVED##Decl); \ @@ -121,7 +119,6 @@ template <class Impl> struct XMLTypeVisitor { void dispatch(Type *T) { switch (T->getTypeClass()) { - default: llvm_unreachable("Type that isn't part of TypeNodes.inc!"); #define TYPE(DERIVED, BASE) \ case Type::DERIVED: \ DISPATCH(dispatch##DERIVED##TypeAttrs, DERIVED##Type); \ @@ -167,7 +164,6 @@ static StringRef getTypeKindName(Type *T) { } llvm_unreachable("unknown type kind!"); - return "unknown_type"; } struct XMLDumper : public XMLDeclVisitor<XMLDumper>, @@ -227,7 +223,7 @@ struct XMLDumper : public XMLDeclVisitor<XMLDumper>, //---- General utilities -------------------------------------------// void setPointer(StringRef prop, const void *p) { - llvm::SmallString<10> buffer; + SmallString<10> buffer; llvm::raw_svector_ostream os(buffer); os << p; os.flush(); @@ -243,7 +239,7 @@ struct XMLDumper : public XMLDeclVisitor<XMLDumper>, } void setInteger(StringRef prop, unsigned n) { - llvm::SmallString<10> buffer; + SmallString<10> buffer; llvm::raw_svector_ostream os(buffer); os << n; os.flush(); @@ -324,7 +320,8 @@ struct XMLDumper : public XMLDeclVisitor<XMLDumper>, break; case TemplateArgument::Declaration: { - visitDeclRef(A.getAsDecl()); + if (Decl *D = A.getAsDecl()) + visitDeclRef(D); break; } case TemplateArgument::Integral: { @@ -411,7 +408,7 @@ struct XMLDumper : public XMLDeclVisitor<XMLDumper>, } template <class T> void visitRedeclarableAttrs(T *D) { - if (T *Prev = D->getPreviousDeclaration()) + if (T *Prev = D->getPreviousDecl()) setPointer("previous", Prev); } @@ -465,7 +462,13 @@ struct XMLDumper : public XMLDeclVisitor<XMLDumper>, if (D->getStorageClass() != SC_None) set("storage", VarDecl::getStorageClassSpecifierString(D->getStorageClass())); - setFlag("directinit", D->hasCXXDirectInitializer()); + StringRef initStyle = ""; + switch (D->getInitStyle()) { + case VarDecl::CInit: initStyle = "c"; break; + case VarDecl::CallInit: initStyle = "call"; break; + case VarDecl::ListInit: initStyle = "list"; break; + } + set("initstyle", initStyle); setFlag("nrvo", D->isNRVOVariable()); // TODO: instantiation, etc. } @@ -495,6 +498,10 @@ struct XMLDumper : public XMLDeclVisitor<XMLDumper>, for (FunctionDecl::param_iterator I = D->param_begin(), E = D->param_end(); I != E; ++I) dispatch(*I); + for (llvm::ArrayRef<NamedDecl*>::iterator + I = D->getDeclsInPrototypeScope().begin(), E = D->getDeclsInPrototypeScope().end(); + I != E; ++I) + dispatch(*I); if (D->doesThisDeclarationHaveABody()) dispatch(D->getBody()); } @@ -740,11 +747,6 @@ struct XMLDumper : public XMLDeclVisitor<XMLDumper>, visitDeclContext(D); } - // ObjCClassDecl - void visitObjCClassDeclChildren(ObjCClassDecl *D) { - visitDeclRef(D->getForwardInterfaceDecl()); - } - // ObjCInterfaceDecl void visitCategoryList(ObjCCategoryDecl *D) { if (!D) return; @@ -755,7 +757,7 @@ struct XMLDumper : public XMLDeclVisitor<XMLDumper>, } void visitObjCInterfaceDeclAttrs(ObjCInterfaceDecl *D) { setPointer("typeptr", D->getTypeForDecl()); - setFlag("forward_decl", D->isForwardDecl()); + setFlag("forward_decl", !D->isThisDeclarationADefinition()); setFlag("implicit_interface", D->isImplicitInterfaceDecl()); } void visitObjCInterfaceDeclChildren(ObjCInterfaceDecl *D) { @@ -815,18 +817,11 @@ struct XMLDumper : public XMLDeclVisitor<XMLDumper>, } } - // ObjCForwardProtocolDecl - void visitObjCForwardProtocolDeclChildren(ObjCForwardProtocolDecl *D) { - for (ObjCForwardProtocolDecl::protocol_iterator - I = D->protocol_begin(), E = D->protocol_end(); I != E; ++I) - visitDeclRef(*I); - } - // ObjCProtocolDecl - void visitObjCProtocolDeclAttrs(ObjCProtocolDecl *D) { - setFlag("forward_decl", D->isForwardDecl()); - } void visitObjCProtocolDeclChildren(ObjCProtocolDecl *D) { + if (!D->isThisDeclarationADefinition()) + return; + if (D->protocol_begin() != D->protocol_end()) { TemporaryContainer C(*this, "protocols"); for (ObjCInterfaceDecl::protocol_iterator @@ -835,6 +830,9 @@ struct XMLDumper : public XMLDeclVisitor<XMLDumper>, } } void visitObjCProtocolDeclAsContext(ObjCProtocolDecl *D) { + if (!D->isThisDeclarationADefinition()) + return; + visitDeclContext(D); } |