From: Dmitri Gribenko Date: Sat, 26 Jan 2013 21:39:50 +0000 (+0000) Subject: libclang: type safety for CXTranslationUnitImpl::FormatContext X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=337ee24785a784ba5418c2e78716d15b94fd57f0;p=clang libclang: type safety for CXTranslationUnitImpl::FormatContext git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@173589 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp index c4d4a5a451..a78b6073d3 100644 --- a/tools/libclang/CIndex.cpp +++ b/tools/libclang/CIndex.cpp @@ -2823,7 +2823,7 @@ void clang_disposeTranslationUnit(CXTranslationUnit CTUnit) { disposeCXStringPool(CTUnit->StringPool); delete static_cast(CTUnit->Diagnostics); disposeOverridenCXCursorsPool(CTUnit->OverridenCursorsPool); - delete static_cast(CTUnit->FormatContext); + delete CTUnit->FormatContext; delete CTUnit; } } diff --git a/tools/libclang/CXComment.cpp b/tools/libclang/CXComment.cpp index b14e1745d8..0fcd7c2166 100644 --- a/tools/libclang/CXComment.cpp +++ b/tools/libclang/CXComment.cpp @@ -1368,23 +1368,20 @@ CXString clang_FullComment_getAsXML(CXComment CXC) { ASTContext &Context = FC->getDeclInfo()->CurrentDecl->getASTContext(); CXTranslationUnit TU = CXC.TranslationUnit; SourceManager &SM = cxtu::getASTUnit(TU)->getSourceManager(); - - SimpleFormatContext *SFC = - static_cast(TU->FormatContext); - if (!SFC) { - SFC = new SimpleFormatContext(Context.getLangOpts()); - TU->FormatContext = SFC; + + if (!TU->FormatContext) { + TU->FormatContext = new SimpleFormatContext(Context.getLangOpts()); } else if ((TU->FormatInMemoryUniqueId % 1000) == 0) { // Delete after some number of iterators, so the buffers don't grow // too large. - delete SFC; - SFC = new SimpleFormatContext(Context.getLangOpts()); - TU->FormatContext = SFC; + delete TU->FormatContext; + TU->FormatContext = new SimpleFormatContext(Context.getLangOpts()); } SmallString<1024> XML; CommentASTToXMLConverter Converter(FC, XML, getCommandTraits(CXC), SM, - *SFC, TU->FormatInMemoryUniqueId++); + *TU->FormatContext, + TU->FormatInMemoryUniqueId++); Converter.visit(FC); return createCXString(XML.str(), /* DupString = */ true); } diff --git a/tools/libclang/CXTranslationUnit.h b/tools/libclang/CXTranslationUnit.h index 15e89ea849..428f5622e7 100644 --- a/tools/libclang/CXTranslationUnit.h +++ b/tools/libclang/CXTranslationUnit.h @@ -19,6 +19,7 @@ namespace clang { class ASTUnit; class CIndexer; + class SimpleFormatContext; } // namespace clang struct CXTranslationUnitImpl { @@ -27,14 +28,11 @@ struct CXTranslationUnitImpl { void *StringPool; void *Diagnostics; void *OverridenCursorsPool; - void *FormatContext; + clang::SimpleFormatContext *FormatContext; unsigned FormatInMemoryUniqueId; }; namespace clang { - class ASTUnit; - class CIndexer; - namespace cxtu { CXTranslationUnitImpl *MakeCXTranslationUnit(CIndexer *CIdx, ASTUnit *AU);