From 5694feb5ccd6eb862cb600b55753cecc13794471 Mon Sep 17 00:00:00 2001 From: Dmitri Gribenko Date: Sat, 26 Jan 2013 18:53:38 +0000 Subject: [PATCH] libclang: factor out the frequent pattern static_cast(TU->TUData) into a getter cxtu::getASTUnit(TU) git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@173585 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/libclang/CIndex.cpp | 76 ++++++++++++------------- tools/libclang/CIndexCodeCompletion.cpp | 4 +- tools/libclang/CIndexDiagnostic.cpp | 2 +- tools/libclang/CIndexHigh.cpp | 7 +-- tools/libclang/CIndexInclusionStack.cpp | 2 +- tools/libclang/CXComment.cpp | 2 +- tools/libclang/CXComment.h | 2 +- tools/libclang/CXCursor.cpp | 2 +- tools/libclang/CXSourceLocation.cpp | 12 ++-- tools/libclang/CXTranslationUnit.h | 8 ++- tools/libclang/CXType.cpp | 12 ++-- tools/libclang/CursorVisitor.h | 4 +- tools/libclang/Indexing.cpp | 2 +- tools/libclang/IndexingContext.cpp | 4 +- 14 files changed, 72 insertions(+), 67 deletions(-) diff --git a/tools/libclang/CIndex.cpp b/tools/libclang/CIndex.cpp index 12d58f8fdc..1127c7c20b 100644 --- a/tools/libclang/CIndex.cpp +++ b/tools/libclang/CIndex.cpp @@ -228,7 +228,7 @@ void CursorVisitor::visitFileRegion() { if (RegionOfInterest.isInvalid()) return; - ASTUnit *Unit = static_cast(TU->TUData); + ASTUnit *Unit = cxtu::getASTUnit(TU); SourceManager &SM = Unit->getSourceManager(); std::pair @@ -274,7 +274,7 @@ static bool isInLexicalContext(Decl *D, DeclContext *DC) { void CursorVisitor::visitDeclsFromFileRegion(FileID File, unsigned Offset, unsigned Length) { - ASTUnit *Unit = static_cast(TU->TUData); + ASTUnit *Unit = cxtu::getASTUnit(TU); SourceManager &SM = Unit->getSourceManager(); SourceRange Range = RegionOfInterest; @@ -485,8 +485,8 @@ bool CursorVisitor::VisitChildren(CXCursor Cursor) { } if (clang_isTranslationUnit(Cursor.kind)) { - CXTranslationUnit tu = getCursorTU(Cursor); - ASTUnit *CXXUnit = static_cast(tu->TUData); + CXTranslationUnit TU = getCursorTU(Cursor); + ASTUnit *CXXUnit = cxtu::getASTUnit(TU); int VisitOrder[2] = { VisitPreprocessorLast, !VisitPreprocessorLast }; for (unsigned I = 0; I != 2; ++I) { @@ -496,7 +496,7 @@ bool CursorVisitor::VisitChildren(CXCursor Cursor) { for (ASTUnit::top_level_iterator TL = CXXUnit->top_level_begin(), TLEnd = CXXUnit->top_level_end(); TL != TLEnd; ++TL) { - if (Visit(MakeCXCursor(*TL, tu, RegionOfInterest), true)) + if (Visit(MakeCXCursor(*TL, TU, RegionOfInterest), true)) return true; } } else if (VisitDeclContext( @@ -2762,7 +2762,7 @@ static void clang_saveTranslationUnit_Impl(void *UserData) { if (CXXIdx->isOptEnabled(CXGlobalOpt_ThreadBackgroundPriorityForIndexing)) setThreadBackgroundPriority(); - bool hadError = static_cast(STUI->TU->TUData)->Save(STUI->FileName); + bool hadError = cxtu::getASTUnit(STUI->TU)->Save(STUI->FileName); STUI->result = hadError ? CXSaveError_Unknown : CXSaveError_None; } @@ -2775,7 +2775,7 @@ int clang_saveTranslationUnit(CXTranslationUnit TU, const char *FileName, if (!TU) return CXSaveError_InvalidTU; - ASTUnit *CXXUnit = static_cast(TU->TUData); + ASTUnit *CXXUnit = cxtu::getASTUnit(TU); ASTUnit::ConcurrencyCheck Check(*CXXUnit); if (!CXXUnit->hasSema()) return CXSaveError_InvalidTU; @@ -2816,10 +2816,10 @@ void clang_disposeTranslationUnit(CXTranslationUnit CTUnit) { if (CTUnit) { // If the translation unit has been marked as unsafe to free, just discard // it. - if (static_cast(CTUnit->TUData)->isUnsafeToFree()) + if (cxtu::getASTUnit(CTUnit)->isUnsafeToFree()) return; - delete static_cast(CTUnit->TUData); + delete cxtu::getASTUnit(CTUnit); disposeCXStringPool(CTUnit->StringPool); delete static_cast(CTUnit->Diagnostics); disposeOverridenCXCursorsPool(CTUnit->OverridenCursorsPool); @@ -2861,7 +2861,7 @@ static void clang_reparseTranslationUnit_Impl(void *UserData) { if (CXXIdx->isOptEnabled(CXGlobalOpt_ThreadBackgroundPriorityForEditing)) setThreadBackgroundPriority(); - ASTUnit *CXXUnit = static_cast(TU->TUData); + ASTUnit *CXXUnit = cxtu::getASTUnit(TU); ASTUnit::ConcurrencyCheck Check(*CXXUnit); OwningPtr > @@ -2904,7 +2904,7 @@ int clang_reparseTranslationUnit(CXTranslationUnit TU, if (!RunSafely(CRC, clang_reparseTranslationUnit_Impl, &RTUI)) { fprintf(stderr, "libclang: crash detected during reparsing\n"); - static_cast(TU->TUData)->setUnsafeToFree(true); + cxtu::getASTUnit(TU)->setUnsafeToFree(true); return 1; } else if (getenv("LIBCLANG_RESOURCE_USAGE")) PrintLibclangResourceUsage(TU); @@ -2917,12 +2917,12 @@ CXString clang_getTranslationUnitSpelling(CXTranslationUnit CTUnit) { if (!CTUnit) return createCXString(""); - ASTUnit *CXXUnit = static_cast(CTUnit->TUData); + ASTUnit *CXXUnit = cxtu::getASTUnit(CTUnit); return createCXString(CXXUnit->getOriginalSourceFileName(), true); } CXCursor clang_getTranslationUnitCursor(CXTranslationUnit TU) { - ASTUnit *CXXUnit = static_cast(TU->TUData); + ASTUnit *CXXUnit = cxtu::getASTUnit(TU); return MakeCXCursor(CXXUnit->getASTContext().getTranslationUnitDecl(), TU); } @@ -2949,21 +2949,21 @@ time_t clang_getFileTime(CXFile SFile) { return FEnt->getModificationTime(); } -CXFile clang_getFile(CXTranslationUnit tu, const char *file_name) { - if (!tu) +CXFile clang_getFile(CXTranslationUnit TU, const char *file_name) { + if (!TU) return 0; - ASTUnit *CXXUnit = static_cast(tu->TUData); + ASTUnit *CXXUnit = cxtu::getASTUnit(TU); FileManager &FMgr = CXXUnit->getFileManager(); return const_cast(FMgr.getFile(file_name)); } -unsigned clang_isFileMultipleIncludeGuarded(CXTranslationUnit tu, CXFile file) { - if (!tu || !file) +unsigned clang_isFileMultipleIncludeGuarded(CXTranslationUnit TU, CXFile file) { + if (!TU || !file) return 0; - ASTUnit *CXXUnit = static_cast(tu->TUData); + ASTUnit *CXXUnit = cxtu::getASTUnit(TU); FileEntry *FEnt = static_cast(file); return CXXUnit->getPreprocessor().getHeaderSearchInfo() .isFileMultipleIncludeGuarded(FEnt); @@ -3849,7 +3849,7 @@ CXCursor clang_getCursor(CXTranslationUnit TU, CXSourceLocation Loc) { if (!TU) return clang_getNullCursor(); - ASTUnit *CXXUnit = static_cast(TU->TUData); + ASTUnit *CXXUnit = cxtu::getASTUnit(TU); ASTUnit::ConcurrencyCheck Check(*CXXUnit); SourceLocation SLoc = cxloc::translateSourceLocation(Loc); @@ -4122,7 +4122,7 @@ CXCursor cxcursor::getCursor(CXTranslationUnit TU, SourceLocation SLoc) { if (SLoc.isInvalid()) return clang_getNullCursor(); - ASTUnit *CXXUnit = static_cast(TU->TUData); + ASTUnit *CXXUnit = cxtu::getASTUnit(TU); // Translate the given source location to make it point at the beginning of // the token under the cursor. @@ -4387,9 +4387,9 @@ CXCursor clang_getCursorReferenced(CXCursor C) { case CXCursor_LabelRef: // FIXME: We end up faking the "parent" declaration here because we // don't want to make CXCursor larger. - return MakeCXCursor(getCursorLabelRef(C).first, - static_cast(tu->TUData)->getASTContext() - .getTranslationUnitDecl(), + return MakeCXCursor(getCursorLabelRef(C).first, + cxtu::getASTUnit(tu)->getASTContext() + .getTranslationUnitDecl(), tu); case CXCursor_OverloadedDeclRef: @@ -4790,7 +4790,7 @@ CXString clang_getTokenSpelling(CXTranslationUnit TU, CXToken CXTok) { // We have to find the starting buffer pointer the hard way, by // deconstructing the source location. - ASTUnit *CXXUnit = static_cast(TU->TUData); + ASTUnit *CXXUnit = cxtu::getASTUnit(TU); if (!CXXUnit) return createCXString(""); @@ -4807,7 +4807,7 @@ CXString clang_getTokenSpelling(CXTranslationUnit TU, CXToken CXTok) { } CXSourceLocation clang_getTokenLocation(CXTranslationUnit TU, CXToken CXTok) { - ASTUnit *CXXUnit = static_cast(TU->TUData); + ASTUnit *CXXUnit = cxtu::getASTUnit(TU); if (!CXXUnit) return clang_getNullLocation(); @@ -4816,7 +4816,7 @@ CXSourceLocation clang_getTokenLocation(CXTranslationUnit TU, CXToken CXTok) { } CXSourceRange clang_getTokenExtent(CXTranslationUnit TU, CXToken CXTok) { - ASTUnit *CXXUnit = static_cast(TU->TUData); + ASTUnit *CXXUnit = cxtu::getASTUnit(TU); if (!CXXUnit) return clang_getNullRange(); @@ -4907,7 +4907,7 @@ void clang_tokenize(CXTranslationUnit TU, CXSourceRange Range, if (NumTokens) *NumTokens = 0; - ASTUnit *CXXUnit = static_cast(TU->TUData); + ASTUnit *CXXUnit = cxtu::getASTUnit(TU); if (!CXXUnit || !Tokens || !NumTokens) return; @@ -4982,17 +4982,17 @@ class AnnotateTokensWorker { public: AnnotateTokensWorker(CXToken *tokens, CXCursor *cursors, unsigned numTokens, - CXTranslationUnit tu, SourceRange RegionOfInterest) + CXTranslationUnit TU, SourceRange RegionOfInterest) : Tokens(tokens), Cursors(cursors), NumTokens(numTokens), TokIdx(0), PreprocessingTokIdx(0), - AnnotateVis(tu, + AnnotateVis(TU, AnnotateTokensVisitor, this, /*VisitPreprocessorLast=*/true, /*VisitIncludedEntities=*/false, RegionOfInterest, /*VisitDeclsOnly=*/false, AnnotateTokensPostChildrenVisitor), - SrcMgr(static_cast(tu->TUData)->getSourceManager()), + SrcMgr(cxtu::getASTUnit(TU)->getSourceManager()), HasContextSensitiveKeywords(false) { } void VisitChildren(CXCursor C) { AnnotateVis.VisitChildren(C); } @@ -5369,7 +5369,7 @@ static void annotatePreprocessorTokens(CXTranslationUnit TU, CXCursor *Cursors, CXToken *Tokens, unsigned NumTokens) { - ASTUnit *CXXUnit = static_cast(TU->TUData); + ASTUnit *CXXUnit = cxtu::getASTUnit(TU); Preprocessor &PP = CXXUnit->getPreprocessor(); SourceManager &SourceMgr = CXXUnit->getSourceManager(); @@ -5591,7 +5591,7 @@ void clang_annotateTokens(CXTranslationUnit TU, for (unsigned I = 0; I != NumTokens; ++I) Cursors[I] = C; - ASTUnit *CXXUnit = static_cast(TU->TUData); + ASTUnit *CXXUnit = cxtu::getASTUnit(TU); if (!CXXUnit) return; @@ -6089,7 +6089,7 @@ CXTUResourceUsage clang_getCXTUResourceUsage(CXTranslationUnit TU) { return usage; } - ASTUnit *astUnit = static_cast(TU->TUData); + ASTUnit *astUnit = cxtu::getASTUnit(TU); OwningPtr entries(new MemUsageEntries()); ASTContext &astContext = astUnit->getASTContext(); @@ -6260,7 +6260,7 @@ MacroInfo *cxindex::getMacroInfo(const IdentifierInfo &II, if (!II.hadMacroDefinition()) return 0; - ASTUnit *Unit = static_cast(TU->TUData); + ASTUnit *Unit = cxtu::getASTUnit(TU); Preprocessor &PP = Unit->getPreprocessor(); MacroInfo *MI = PP.getMacroInfoHistory(&II); while (MI) { @@ -6295,7 +6295,7 @@ MacroDefinition *cxindex::checkForMacroInMacroDefinition(const MacroInfo *MI, return 0; SourceRange DefRange(MI->getReplacementToken(0).getLocation(), MI->getDefinitionEndLoc()); - ASTUnit *Unit = static_cast(TU->TUData); + ASTUnit *Unit = cxtu::getASTUnit(TU); // Check that the token is inside the definition and not its argument list. SourceManager &SM = Unit->getSourceManager(); @@ -6333,7 +6333,7 @@ MacroDefinition *cxindex::checkForMacroInMacroDefinition(const MacroInfo *MI, if (MI->getNumTokens() == 0) return 0; - ASTUnit *Unit = static_cast(TU->TUData); + ASTUnit *Unit = cxtu::getASTUnit(TU); Preprocessor &PP = Unit->getPreprocessor(); if (!PP.getPreprocessingRecord()) return 0; @@ -6355,7 +6355,7 @@ CXString clang_getClangVersion() { Logger &cxindex::Logger::operator<<(CXTranslationUnit TU) { if (TU) { - if (ASTUnit *Unit = static_cast(TU->TUData)) { + if (ASTUnit *Unit = cxtu::getASTUnit(TU)) { LogOS << '<' << Unit->getMainFileName() << '>'; return *this; } diff --git a/tools/libclang/CIndexCodeCompletion.cpp b/tools/libclang/CIndexCodeCompletion.cpp index 57588c79e7..9b0af2e898 100644 --- a/tools/libclang/CIndexCodeCompletion.cpp +++ b/tools/libclang/CIndexCodeCompletion.cpp @@ -688,7 +688,7 @@ void clang_codeCompleteAt_Impl(void *UserData) { bool EnableLogging = getenv("LIBCLANG_CODE_COMPLETION_LOGGING") != 0; - ASTUnit *AST = static_cast(TU->TUData); + ASTUnit *AST = cxtu::getASTUnit(TU); if (!AST) return; @@ -841,7 +841,7 @@ CXCodeCompleteResults *clang_codeCompleteAt(CXTranslationUnit TU, if (!RunSafely(CRC, clang_codeCompleteAt_Impl, &CCAI)) { fprintf(stderr, "libclang: crash detected in code completion\n"); - static_cast(TU->TUData)->setUnsafeToFree(true); + cxtu::getASTUnit(TU)->setUnsafeToFree(true); return 0; } else if (getenv("LIBCLANG_RESOURCE_USAGE")) PrintLibclangResourceUsage(TU); diff --git a/tools/libclang/CIndexDiagnostic.cpp b/tools/libclang/CIndexDiagnostic.cpp index 6b0a191a60..afccbb81b3 100644 --- a/tools/libclang/CIndexDiagnostic.cpp +++ b/tools/libclang/CIndexDiagnostic.cpp @@ -158,7 +158,7 @@ public: CXDiagnosticSetImpl *cxdiag::lazyCreateDiags(CXTranslationUnit TU, bool checkIfChanged) { - ASTUnit *AU = static_cast(TU->TUData); + ASTUnit *AU = cxtu::getASTUnit(TU); if (TU->Diagnostics && checkIfChanged) { // In normal use, ASTUnit's diagnostics should not change unless we reparse. diff --git a/tools/libclang/CIndexHigh.cpp b/tools/libclang/CIndexHigh.cpp index bf75f7b2c2..77e71c3393 100644 --- a/tools/libclang/CIndexHigh.cpp +++ b/tools/libclang/CIndexHigh.cpp @@ -62,7 +62,7 @@ struct FindFileIdRefVisitData { } ASTContext &getASTContext() const { - return static_cast(TU->TUData)->getASTContext(); + return cxtu::getASTUnit(TU)->getASTContext(); } /// \brief We are looking to find all semantically relevant identifiers, @@ -215,8 +215,7 @@ static void findIdRefsInFile(CXTranslationUnit TU, CXCursor declCursor, const FileEntry *File, CXCursorAndRangeVisitor Visitor) { assert(clang_isDeclaration(declCursor.kind)); - ASTUnit *Unit = static_cast(TU->TUData); - SourceManager &SM = Unit->getSourceManager(); + SourceManager &SM = cxtu::getASTUnit(TU)->getSourceManager(); FileID FID = SM.translateFile(File); const Decl *Dcl = cxcursor::getCursorDecl(declCursor); @@ -313,7 +312,7 @@ static void findMacroRefsInFile(CXTranslationUnit TU, CXCursor Cursor, Cursor.kind != CXCursor_MacroExpansion) return; - ASTUnit *Unit = static_cast(TU->TUData); + ASTUnit *Unit = cxtu::getASTUnit(TU); SourceManager &SM = Unit->getSourceManager(); FileID FID = SM.translateFile(File); diff --git a/tools/libclang/CIndexInclusionStack.cpp b/tools/libclang/CIndexInclusionStack.cpp index 4ee1467274..a6d3115409 100644 --- a/tools/libclang/CIndexInclusionStack.cpp +++ b/tools/libclang/CIndexInclusionStack.cpp @@ -25,7 +25,7 @@ extern "C" { void clang_getInclusions(CXTranslationUnit TU, CXInclusionVisitor CB, CXClientData clientData) { - ASTUnit *CXXUnit = static_cast(TU->TUData); + ASTUnit *CXXUnit = cxtu::getASTUnit(TU); SourceManager &SM = CXXUnit->getSourceManager(); ASTContext &Ctx = CXXUnit->getASTContext(); diff --git a/tools/libclang/CXComment.cpp b/tools/libclang/CXComment.cpp index cf7a488d13..b14e1745d8 100644 --- a/tools/libclang/CXComment.cpp +++ b/tools/libclang/CXComment.cpp @@ -1367,7 +1367,7 @@ CXString clang_FullComment_getAsXML(CXComment CXC) { return createCXString((const char *) 0); ASTContext &Context = FC->getDeclInfo()->CurrentDecl->getASTContext(); CXTranslationUnit TU = CXC.TranslationUnit; - SourceManager &SM = static_cast(TU->TUData)->getSourceManager(); + SourceManager &SM = cxtu::getASTUnit(TU)->getSourceManager(); SimpleFormatContext *SFC = static_cast(TU->FormatContext); diff --git a/tools/libclang/CXComment.h b/tools/libclang/CXComment.h index 126227f8d7..0780a65e76 100644 --- a/tools/libclang/CXComment.h +++ b/tools/libclang/CXComment.h @@ -49,7 +49,7 @@ inline const T *getASTNodeAs(CXComment CXC) { } inline ASTContext &getASTContext(CXComment CXC) { - return static_cast(CXC.TranslationUnit->TUData)->getASTContext(); + return cxtu::getASTUnit(CXC.TranslationUnit)->getASTContext(); } inline comments::CommandTraits &getCommandTraits(CXComment CXC) { diff --git a/tools/libclang/CXCursor.cpp b/tools/libclang/CXCursor.cpp index 1a6a371835..b7a5b30634 100644 --- a/tools/libclang/CXCursor.cpp +++ b/tools/libclang/CXCursor.cpp @@ -810,7 +810,7 @@ ASTUnit *cxcursor::getCursorASTUnit(CXCursor Cursor) { CXTranslationUnit TU = getCursorTU(Cursor); if (!TU) return 0; - return static_cast(TU->TUData); + return cxtu::getASTUnit(TU); } CXTranslationUnit cxcursor::getCursorTU(CXCursor Cursor) { diff --git a/tools/libclang/CXSourceLocation.cpp b/tools/libclang/CXSourceLocation.cpp index af311eb8d9..bddb47bfd4 100644 --- a/tools/libclang/CXSourceLocation.cpp +++ b/tools/libclang/CXSourceLocation.cpp @@ -119,15 +119,15 @@ CXSourceLocation clang_getRangeEnd(CXSourceRange range) { extern "C" { -CXSourceLocation clang_getLocation(CXTranslationUnit tu, +CXSourceLocation clang_getLocation(CXTranslationUnit TU, CXFile file, unsigned line, unsigned column) { - if (!tu || !file) + if (!TU || !file) return clang_getNullLocation(); LogRef Log = Logger::make(LLVM_FUNCTION_NAME); - ASTUnit *CXXUnit = static_cast(tu->TUData); + ASTUnit *CXXUnit = cxtu::getASTUnit(TU); ASTUnit::ConcurrencyCheck Check(*CXXUnit); const FileEntry *File = static_cast(file); SourceLocation SLoc = CXXUnit->getLocation(File, line, column); @@ -147,13 +147,13 @@ CXSourceLocation clang_getLocation(CXTranslationUnit tu, return CXLoc; } -CXSourceLocation clang_getLocationForOffset(CXTranslationUnit tu, +CXSourceLocation clang_getLocationForOffset(CXTranslationUnit TU, CXFile file, unsigned offset) { - if (!tu || !file) + if (!TU || !file) return clang_getNullLocation(); - ASTUnit *CXXUnit = static_cast(tu->TUData); + ASTUnit *CXXUnit = cxtu::getASTUnit(TU); SourceLocation SLoc = CXXUnit->getLocation(static_cast(file), offset); diff --git a/tools/libclang/CXTranslationUnit.h b/tools/libclang/CXTranslationUnit.h index 1c713bf2d6..323d4b78aa 100644 --- a/tools/libclang/CXTranslationUnit.h +++ b/tools/libclang/CXTranslationUnit.h @@ -14,6 +14,8 @@ #ifndef LLVM_CLANG_CXTRANSLATIONUNIT_H #define LLVM_CLANG_CXTRANSLATIONUNIT_H +#include "clang-c/Index.h" + extern "C" { struct CXTranslationUnitImpl { void *CIdx; @@ -33,7 +35,11 @@ namespace clang { namespace cxtu { CXTranslationUnitImpl *MakeCXTranslationUnit(CIndexer *CIdx, ASTUnit *TU); - + +static inline ASTUnit *getASTUnit(CXTranslationUnit TU) { + return static_cast(TU->TUData); +} + class CXTUOwner { CXTranslationUnitImpl *TU; diff --git a/tools/libclang/CXType.cpp b/tools/libclang/CXType.cpp index a574aa44ae..06ca3286b0 100644 --- a/tools/libclang/CXType.cpp +++ b/tools/libclang/CXType.cpp @@ -97,7 +97,7 @@ CXType cxtype::MakeCXType(QualType T, CXTranslationUnit TU) { CXTypeKind TK = CXType_Invalid; if (TU && !T.isNull()) { - ASTContext &Ctx = static_cast(TU->TUData)->getASTContext(); + ASTContext &Ctx = cxtu::getASTUnit(TU)->getASTContext(); if (Ctx.getLangOpts().ObjC1) { QualType UnqualT = T.getUnqualifiedType(); if (Ctx.isObjCIdType(UnqualT)) @@ -134,7 +134,7 @@ CXType clang_getCursorType(CXCursor C) { if (!TU) return MakeCXType(QualType(), TU); - ASTContext &Context = static_cast(TU->TUData)->getASTContext(); + ASTContext &Context = cxtu::getASTUnit(TU)->getASTContext(); if (clang_isExpression(C.kind)) { QualType T = cxcursor::getCursorExpr(C)->getType(); return MakeCXType(T, TU); @@ -293,8 +293,9 @@ CXType clang_getCanonicalType(CXType CT) { if (T.isNull()) return MakeCXType(QualType(), GetTU(CT)); - ASTUnit *AU = static_cast(TU->TUData); - return MakeCXType(AU->getASTContext().getCanonicalType(T), TU); + return MakeCXType(cxtu::getASTUnit(TU)->getASTContext() + .getCanonicalType(T), + TU); } unsigned clang_isConstQualifiedType(CXType CT) { @@ -552,9 +553,8 @@ unsigned clang_isPODType(CXType X) { return 0; CXTranslationUnit TU = GetTU(X); - ASTUnit *AU = static_cast(TU->TUData); - return T.isPODType(AU->getASTContext()) ? 1 : 0; + return T.isPODType(cxtu::getASTUnit(TU)->getASTContext()) ? 1 : 0; } CXType clang_getElementType(CXType CT) { diff --git a/tools/libclang/CursorVisitor.h b/tools/libclang/CursorVisitor.h index 173140f4ee..51cb272650 100644 --- a/tools/libclang/CursorVisitor.h +++ b/tools/libclang/CursorVisitor.h @@ -148,7 +148,7 @@ public: SourceRange RegionOfInterest = SourceRange(), bool VisitDeclsOnly = false, PostChildrenVisitorTy PostChildrenVisitor = 0) - : TU(TU), AU(static_cast(TU->TUData)), + : TU(TU), AU(cxtu::getASTUnit(TU)), Visitor(Visitor), PostChildrenVisitor(PostChildrenVisitor), ClientData(ClientData), VisitPreprocessorLast(VisitPreprocessorLast), @@ -172,7 +172,7 @@ public: } } - ASTUnit *getASTUnit() const { return static_cast(TU->TUData); } + ASTUnit *getASTUnit() const { return AU; } CXTranslationUnit getTU() const { return TU; } bool Visit(CXCursor Cursor, bool CheckedRegionOfInterest = false); diff --git a/tools/libclang/Indexing.cpp b/tools/libclang/Indexing.cpp index b286650231..4a51e32066 100644 --- a/tools/libclang/Indexing.cpp +++ b/tools/libclang/Indexing.cpp @@ -783,7 +783,7 @@ static void clang_indexTranslationUnit_Impl(void *UserData) { llvm::CrashRecoveryContextCleanupRegistrar IndexConsumerCleanup(IndexConsumer.get()); - ASTUnit *Unit = static_cast(TU->TUData); + ASTUnit *Unit = cxtu::getASTUnit(TU); if (!Unit) return; diff --git a/tools/libclang/IndexingContext.cpp b/tools/libclang/IndexingContext.cpp index 2dea75714b..9129e92fd7 100644 --- a/tools/libclang/IndexingContext.cpp +++ b/tools/libclang/IndexingContext.cpp @@ -196,11 +196,11 @@ const char *ScratchAlloc::copyCStr(StringRef Str) { void IndexingContext::setASTContext(ASTContext &ctx) { Ctx = &ctx; - static_cast(CXTU->TUData)->setASTContext(&ctx); + cxtu::getASTUnit(CXTU)->setASTContext(&ctx); } void IndexingContext::setPreprocessor(Preprocessor &PP) { - static_cast(CXTU->TUData)->setPreprocessor(&PP); + cxtu::getASTUnit(CXTU)->setPreprocessor(&PP); } bool IndexingContext::isFunctionLocalDecl(const Decl *D) { -- 2.40.0