[cfe-commits] r172089 - in /cfe/trunk/tools/libclang: CIndex.cpp CIndexCodeCompletion.cpp CIndexHigh.cpp CXSourceLocation.cpp Indexing.cpp
NAKAMURA Takumi
geek4civic at gmail.com
Thu Jan 10 15:09:34 PST 2013
It seems msvc doesn't define __func__ ...
2013/1/11 Argyrios Kyrtzidis <akyrtzi at gmail.com>:
> Author: akirtzidis
> Date: Thu Jan 10 12:54:52 2013
> New Revision: 172089
>
> URL: http://llvm.org/viewvc/llvm-project?rev=172089&view=rev
> Log:
> [libclang] Enhance logging capabilities of libclang.
>
> -provide a "raw_ostream'ish" class to make it convenient to output logging info.
> -use macros to automate a bit the logging functionality inside libclang functions
> -when logging, print a stack trace if "LIBCLANG_LOGGING=2" environment is set.
> -add logging to more functions.
>
> Modified:
> cfe/trunk/tools/libclang/CIndex.cpp
> cfe/trunk/tools/libclang/CIndexCodeCompletion.cpp
> cfe/trunk/tools/libclang/CIndexHigh.cpp
> cfe/trunk/tools/libclang/CXSourceLocation.cpp
> cfe/trunk/tools/libclang/Indexing.cpp
>
> Modified: cfe/trunk/tools/libclang/CIndex.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndex.cpp?rev=172089&r1=172088&r2=172089&view=diff
> ==============================================================================
> --- cfe/trunk/tools/libclang/CIndex.cpp (original)
> +++ cfe/trunk/tools/libclang/CIndex.cpp Thu Jan 10 12:54:52 2013
> @@ -21,6 +21,7 @@
> #include "CXTranslationUnit.h"
> #include "CXType.h"
> #include "CursorVisitor.h"
> +#include "CLog.h"
> #include "SimpleFormatContext.h"
> #include "clang/AST/StmtVisitor.h"
> #include "clang/Basic/Diagnostic.h"
> @@ -46,6 +47,12 @@
> #include "llvm/Support/Threading.h"
> #include "llvm/Support/Timer.h"
> #include "llvm/Support/raw_ostream.h"
> +#include "llvm/Support/Format.h"
> +#include "llvm/Config/config.h"
> +
> +#if HAVE_PTHREAD_H
> +#include <pthread.h>
> +#endif
>
> using namespace clang;
> using namespace clang::cxcursor;
> @@ -2681,6 +2688,12 @@
> struct CXUnsavedFile *unsaved_files,
> unsigned num_unsaved_files,
> unsigned options) {
> + LOG_FUNC_SECTION {
> + *Log << source_filename << ": ";
> + for (int i = 0; i != num_command_line_args; ++i)
> + *Log << command_line_args[i] << " ";
> + }
> +
> ParseTranslationUnitInfo PTUI = { CIdx, source_filename, command_line_args,
> num_command_line_args, unsaved_files,
> num_unsaved_files, options, 0 };
> @@ -2744,6 +2757,10 @@
>
> int clang_saveTranslationUnit(CXTranslationUnit TU, const char *FileName,
> unsigned options) {
> + LOG_FUNC_SECTION {
> + *Log << TU << ' ' << FileName;
> + }
> +
> if (!TU)
> return CXSaveError_InvalidTU;
>
> @@ -2861,6 +2878,10 @@
> unsigned num_unsaved_files,
> struct CXUnsavedFile *unsaved_files,
> unsigned options) {
> + LOG_FUNC_SECTION {
> + *Log << TU;
> + }
> +
> ReparseTranslationUnitInfo RTUI = { TU, num_unsaved_files, unsaved_files,
> options, 0 };
>
> @@ -3808,8 +3829,7 @@
> SourceLocation SLoc = cxloc::translateSourceLocation(Loc);
> CXCursor Result = cxcursor::getCursor(TU, SLoc);
>
> - bool Logging = getenv("LIBCLANG_LOGGING");
> - if (Logging) {
> + LOG_FUNC_SECTION {
> CXFile SearchFile;
> unsigned SearchLine, SearchColumn;
> CXFile ResultFile;
> @@ -3818,18 +3838,19 @@
> const char *IsDef = clang_isCursorDefinition(Result)? " (Definition)" : "";
> CXSourceLocation ResultLoc = clang_getCursorLocation(Result);
>
> - clang_getExpansionLocation(Loc, &SearchFile, &SearchLine, &SearchColumn, 0);
> - clang_getExpansionLocation(ResultLoc, &ResultFile, &ResultLine,
> + clang_getFileLocation(Loc, &SearchFile, &SearchLine, &SearchColumn, 0);
> + clang_getFileLocation(ResultLoc, &ResultFile, &ResultLine,
> &ResultColumn, 0);
> SearchFileName = clang_getFileName(SearchFile);
> ResultFileName = clang_getFileName(ResultFile);
> KindSpelling = clang_getCursorKindSpelling(Result.kind);
> USR = clang_getCursorUSR(Result);
> - fprintf(stderr, "clang_getCursor(%s:%d:%d) = %s(%s:%d:%d):%s%s\n",
> - clang_getCString(SearchFileName), SearchLine, SearchColumn,
> - clang_getCString(KindSpelling),
> - clang_getCString(ResultFileName), ResultLine, ResultColumn,
> - clang_getCString(USR), IsDef);
> + *Log << llvm::format("(%s:%d:%d) = %s",
> + clang_getCString(SearchFileName), SearchLine, SearchColumn,
> + clang_getCString(KindSpelling))
> + << llvm::format("(%s:%d:%d):%s%s",
> + clang_getCString(ResultFileName), ResultLine, ResultColumn,
> + clang_getCString(USR), IsDef);
> clang_disposeString(SearchFileName);
> clang_disposeString(ResultFileName);
> clang_disposeString(KindSpelling);
> @@ -3842,13 +3863,13 @@
> = clang_getCursorKindSpelling(Definition.kind);
> CXFile DefinitionFile;
> unsigned DefinitionLine, DefinitionColumn;
> - clang_getExpansionLocation(DefinitionLoc, &DefinitionFile,
> + clang_getFileLocation(DefinitionLoc, &DefinitionFile,
> &DefinitionLine, &DefinitionColumn, 0);
> CXString DefinitionFileName = clang_getFileName(DefinitionFile);
> - fprintf(stderr, " -> %s(%s:%d:%d)\n",
> - clang_getCString(DefinitionKindSpelling),
> - clang_getCString(DefinitionFileName),
> - DefinitionLine, DefinitionColumn);
> + *Log << llvm::format(" -> %s(%s:%d:%d)",
> + clang_getCString(DefinitionKindSpelling),
> + clang_getCString(DefinitionFileName),
> + DefinitionLine, DefinitionColumn);
> clang_disposeString(DefinitionFileName);
> clang_disposeString(DefinitionKindSpelling);
> }
> @@ -4850,6 +4871,10 @@
>
> void clang_tokenize(CXTranslationUnit TU, CXSourceRange Range,
> CXToken **Tokens, unsigned *NumTokens) {
> + LOG_FUNC_SECTION {
> + *Log << TU << ' ' << Range;
> + }
> +
> if (Tokens)
> *Tokens = 0;
> if (NumTokens)
> @@ -5522,9 +5547,17 @@
> void clang_annotateTokens(CXTranslationUnit TU,
> CXToken *Tokens, unsigned NumTokens,
> CXCursor *Cursors) {
> -
> - if (NumTokens == 0 || !Tokens || !Cursors)
> + if (NumTokens == 0 || !Tokens || !Cursors) {
> + LOG_FUNC_SECTION { *Log << "<null input>"; }
> return;
> + }
> +
> + LOG_FUNC_SECTION {
> + *Log << TU << ' ';
> + CXSourceLocation bloc = clang_getTokenLocation(TU, Tokens[0]);
> + CXSourceLocation eloc = clang_getTokenLocation(TU, Tokens[NumTokens-1]);
> + *Log << clang_getRange(bloc, eloc);
> + }
>
> // Any token we don't specifically annotate will have a NULL cursor.
> CXCursor C = clang_getNullCursor();
> @@ -6290,3 +6323,88 @@
>
> } // end: extern "C"
>
> +Logger &cxindex::Logger::operator<<(CXTranslationUnit TU) {
> + if (TU) {
> + if (ASTUnit *Unit = static_cast<ASTUnit *>(TU->TUData)) {
> + LogOS << '<' << Unit->getMainFileName() << '>';
> + return *this;
> + }
> + }
> +
> + LogOS << "<NULL TU>";
> + return *this;
> +}
> +
> +Logger &cxindex::Logger::operator<<(CXSourceLocation Loc) {
> + CXFile File;
> + unsigned Line, Column;
> + clang_getFileLocation(Loc, &File, &Line, &Column, 0);
> + CXString FileName = clang_getFileName(File);
> + *this << llvm::format("(%s:%d:%d)", clang_getCString(FileName), Line, Column);
> + clang_disposeString(FileName);
> + return *this;
> +}
> +
> +Logger &cxindex::Logger::operator<<(CXSourceRange range) {
> + CXSourceLocation BLoc = clang_getRangeStart(range);
> + CXSourceLocation ELoc = clang_getRangeEnd(range);
> +
> + CXFile BFile;
> + unsigned BLine, BColumn;
> + clang_getFileLocation(BLoc, &BFile, &BLine, &BColumn, 0);
> +
> + CXFile EFile;
> + unsigned ELine, EColumn;
> + clang_getFileLocation(ELoc, &EFile, &ELine, &EColumn, 0);
> +
> + CXString BFileName = clang_getFileName(BFile);
> + if (BFile == EFile) {
> + *this << llvm::format("[%s %d:%d-%d:%d]", clang_getCString(BFileName),
> + BLine, BColumn, ELine, EColumn);
> + } else {
> + CXString EFileName = clang_getFileName(EFile);
> + *this << llvm::format("[%s:%d:%d - ", clang_getCString(BFileName),
> + BLine, BColumn)
> + << llvm::format("%s:%d:%d]", clang_getCString(EFileName),
> + ELine, EColumn);
> + clang_disposeString(EFileName);
> + }
> + clang_disposeString(BFileName);
> + return *this;
> +}
> +
> +Logger &cxindex::Logger::operator<<(CXString Str) {
> + *this << clang_getCString(Str);
> + return *this;
> +}
> +
> +Logger &cxindex::Logger::operator<<(const llvm::format_object_base &Fmt) {
> + LogOS << Fmt;
> + return *this;
> +}
> +
> +cxindex::Logger::~Logger() {
> + LogOS.flush();
> +
> + llvm::sys::ScopedLock L(EnableMultithreadingMutex);
> +
> + static llvm::TimeRecord sBeginTR = llvm::TimeRecord::getCurrentTime();
> +
> + llvm::raw_ostream &OS = llvm::errs();
> + OS << "[libclang:" << Name << ':';
> +
> + // FIXME: Portability.
> +#if HAVE_PTHREAD_H && __APPLE__
> + mach_port_t tid = pthread_mach_thread_np(pthread_self());
> + OS << tid << ':';
> +#endif
> +
> + llvm::TimeRecord TR = llvm::TimeRecord::getCurrentTime();
> + OS << llvm::format("%7.4f] ", TR.getWallTime() - sBeginTR.getWallTime());
> + OS << Msg.str() << '\n';
> +
> + if (Trace) {
> + llvm::sys::PrintStackTrace(stderr);
> + OS << "--------------------------------------------------\n";
> + }
> +}
>
> Modified: cfe/trunk/tools/libclang/CIndexCodeCompletion.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndexCodeCompletion.cpp?rev=172089&r1=172088&r2=172089&view=diff
> ==============================================================================
> --- cfe/trunk/tools/libclang/CIndexCodeCompletion.cpp (original)
> +++ cfe/trunk/tools/libclang/CIndexCodeCompletion.cpp Thu Jan 10 12:54:52 2013
> @@ -17,6 +17,7 @@
> #include "CXCursor.h"
> #include "CXString.h"
> #include "CXTranslationUnit.h"
> +#include "CLog.h"
> #include "clang/AST/Decl.h"
> #include "clang/AST/DeclObjC.h"
> #include "clang/AST/Type.h"
> @@ -48,6 +49,7 @@
>
> using namespace clang;
> using namespace clang::cxstring;
> +using namespace clang::cxindex;
>
> extern "C" {
>
> @@ -821,6 +823,11 @@
> struct CXUnsavedFile *unsaved_files,
> unsigned num_unsaved_files,
> unsigned options) {
> + LOG_FUNC_SECTION {
> + *Log << TU << ' '
> + << complete_filename << ':' << complete_line << ':' << complete_column;
> + }
> +
> CodeCompleteAtInfo CCAI = { TU, complete_filename, complete_line,
> complete_column, unsaved_files, num_unsaved_files,
> options, 0 };
>
> Modified: cfe/trunk/tools/libclang/CIndexHigh.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CIndexHigh.cpp?rev=172089&r1=172088&r2=172089&view=diff
> ==============================================================================
> --- cfe/trunk/tools/libclang/CIndexHigh.cpp (original)
> +++ cfe/trunk/tools/libclang/CIndexHigh.cpp Thu Jan 10 12:54:52 2013
> @@ -11,11 +11,13 @@
> #include "CXCursor.h"
> #include "CXSourceLocation.h"
> #include "CXTranslationUnit.h"
> +#include "CLog.h"
> #include "clang/AST/DeclObjC.h"
> #include "clang/Frontend/ASTUnit.h"
>
> using namespace clang;
> using namespace cxcursor;
> +using namespace cxindex;
>
> static void getTopOverriddenMethods(CXTranslationUnit TU,
> Decl *D,
> @@ -341,26 +343,26 @@
>
> void clang_findReferencesInFile(CXCursor cursor, CXFile file,
> CXCursorAndRangeVisitor visitor) {
> - bool Logging = ::getenv("LIBCLANG_LOGGING");
> + LogRef Log = Logger::make(__func__);
>
> if (clang_Cursor_isNull(cursor)) {
> - if (Logging)
> - llvm::errs() << "clang_findReferencesInFile: Null cursor\n";
> + if (Log)
> + *Log << "Null cursor";
> return;
> }
> if (cursor.kind == CXCursor_NoDeclFound) {
> - if (Logging)
> - llvm::errs() << "clang_findReferencesInFile: Got CXCursor_NoDeclFound\n";
> + if (Log)
> + *Log << "Got CXCursor_NoDeclFound";
> return;
> }
> if (!file) {
> - if (Logging)
> - llvm::errs() << "clang_findReferencesInFile: Null file\n";
> + if (Log)
> + *Log << "Null file";
> return;
> }
> if (!visitor.visit) {
> - if (Logging)
> - llvm::errs() << "clang_findReferencesInFile: Null visitor\n";
> + if (Log)
> + *Log << "Null visitor";
> return;
> }
>
> @@ -391,9 +393,8 @@
> CXCursor refCursor = clang_getCursorReferenced(cursor);
>
> if (!clang_isDeclaration(refCursor.kind)) {
> - if (Logging)
> - llvm::errs() << "clang_findReferencesInFile: cursor is not referencing a "
> - "declaration\n";
> + if (Log)
> + *Log << "cursor is not referencing a declaration";
> return;
> }
>
>
> Modified: cfe/trunk/tools/libclang/CXSourceLocation.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/CXSourceLocation.cpp?rev=172089&r1=172088&r2=172089&view=diff
> ==============================================================================
> --- cfe/trunk/tools/libclang/CXSourceLocation.cpp (original)
> +++ cfe/trunk/tools/libclang/CXSourceLocation.cpp Thu Jan 10 12:54:52 2013
> @@ -17,9 +17,12 @@
> #include "CXSourceLocation.h"
> #include "CXString.h"
> #include "CXTranslationUnit.h"
> +#include "CLog.h"
> +#include "llvm/Support/Format.h"
>
> using namespace clang;
> using namespace clang::cxstring;
> +using namespace clang::cxindex;
>
> //===----------------------------------------------------------------------===//
> // Internal predicates on CXSourceLocations.
> @@ -122,24 +125,25 @@
> if (!tu || !file)
> return clang_getNullLocation();
>
> - bool Logging = ::getenv("LIBCLANG_LOGGING");
> + LogRef Log = Logger::make(__func__);
> ASTUnit *CXXUnit = static_cast<ASTUnit *>(tu->TUData);
> ASTUnit::ConcurrencyCheck Check(*CXXUnit);
> const FileEntry *File = static_cast<const FileEntry *>(file);
> SourceLocation SLoc = CXXUnit->getLocation(File, line, column);
> if (SLoc.isInvalid()) {
> - if (Logging)
> - llvm::errs() << "clang_getLocation(\"" << File->getName()
> - << "\", " << line << ", " << column << ") = invalid\n";
> + if (Log)
> + *Log << llvm::format("(\"%s\", %d, %d) = invalid",
> + File->getName(), line, column);
> return clang_getNullLocation();
> }
>
> - if (Logging)
> - llvm::errs() << "clang_getLocation(\"" << File->getName()
> - << "\", " << line << ", " << column << ") = "
> - << SLoc.getRawEncoding() << "\n";
> + CXSourceLocation CXLoc =
> + cxloc::translateSourceLocation(CXXUnit->getASTContext(), SLoc);
> + if (Log)
> + *Log << llvm::format("(\"%s\", %d, %d) = ", File->getName(), line, column)
> + << CXLoc;
>
> - return cxloc::translateSourceLocation(CXXUnit->getASTContext(), SLoc);
> + return CXLoc;
> }
>
> CXSourceLocation clang_getLocationForOffset(CXTranslationUnit tu,
>
> Modified: cfe/trunk/tools/libclang/Indexing.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/Indexing.cpp?rev=172089&r1=172088&r2=172089&view=diff
> ==============================================================================
> --- cfe/trunk/tools/libclang/Indexing.cpp (original)
> +++ cfe/trunk/tools/libclang/Indexing.cpp Thu Jan 10 12:54:52 2013
> @@ -14,6 +14,7 @@
> #include "CXSourceLocation.h"
> #include "CXString.h"
> #include "CXTranslationUnit.h"
> +#include "CLog.h"
> #include "clang/AST/ASTConsumer.h"
> #include "clang/AST/DeclVisitor.h"
> #include "clang/Frontend/ASTUnit.h"
> @@ -968,6 +969,11 @@
> unsigned num_unsaved_files,
> CXTranslationUnit *out_TU,
> unsigned TU_options) {
> + LOG_FUNC_SECTION {
> + *Log << source_filename << ": ";
> + for (int i = 0; i != num_command_line_args; ++i)
> + *Log << command_line_args[i] << " ";
> + }
>
> IndexSourceFileInfo ITUI = { idxAction, client_data, index_callbacks,
> index_callbacks_size, index_options,
> @@ -1018,6 +1024,9 @@
> unsigned index_callbacks_size,
> unsigned index_options,
> CXTranslationUnit TU) {
> + LOG_FUNC_SECTION {
> + *Log << TU;
> + }
>
> IndexTranslationUnitInfo ITUI = { idxAction, client_data, index_callbacks,
> index_callbacks_size, index_options, TU,
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list