[cfe-commits] r84548 - in /cfe/trunk: include/clang-c/Index.h tools/CIndex/CIndex.cpp tools/c-index-test/c-index-test.c
Daniel Dunbar
daniel at zuster.org
Mon Oct 19 17:59:28 PDT 2009
On Mon, Oct 19, 2009 at 3:15 PM, Ted Kremenek <kremenek at apple.com> wrote:
> Author: kremenek
> Date: Mon Oct 19 17:15:09 2009
> New Revision: 84548
>
> URL: http://llvm.org/viewvc/llvm-project?rev=84548&view=rev
> Log:
> Really fix <rdar://problem/7312058> by adding a 'displayDiagnostics' option to
> clang_createTranslationUnit() and clang_createTranslationUnitFromSourceFile(). The user can now
> specify if the diagnostics from Clang are printed to stderr or are silenced completely. We can
> obviously evolve this API to be more general in the future.
>
> Note: Added a FIXME since I wasn't certain what was the best way to redirect to something analogous
> to '/dev/null' on Windows.
I wouldn't worry about it. Eventually we will presumably integrate
this with clang-cc instead of fork/exec, at which point we should get
complete control of the diagnostic client. Then we won't need to
bother with any redirection.
- Daniel
> Modified:
> cfe/trunk/include/clang-c/Index.h
> cfe/trunk/tools/CIndex/CIndex.cpp
> cfe/trunk/tools/c-index-test/c-index-test.c
>
> Modified: cfe/trunk/include/clang-c/Index.h
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang-c/Index.h?rev=84548&r1=84547&r2=84548&view=diff
>
> ==============================================================================
> --- cfe/trunk/include/clang-c/Index.h (original)
> +++ cfe/trunk/include/clang-c/Index.h Mon Oct 19 17:15:09 2009
> @@ -107,15 +107,26 @@
> const char *clang_getTranslationUnitSpelling(CXTranslationUnit CTUnit);
>
> CXTranslationUnit clang_createTranslationUnit(
> - CXIndex, const char *ast_filename
> + CXIndex, const char *ast_filename,
> + int displayDiagnostics
> );
> +
> +/**
> + * \brief Destroy the specified CXTranslationUnit object.
> + */
> +void clang_disposeTranslationUnit(CXTranslationUnit);
> +
> +/**
> + * \brief Return the CXTranslationUnit for a given source file and the provided command line
> + * arguments one would pass to the compiler.
> + */
> CXTranslationUnit clang_createTranslationUnitFromSourceFile(
> CXIndex CIdx,
> const char *source_filename,
> int num_clang_command_line_args,
> - const char **clang_command_line_args
> + const char **clang_command_line_args,
> + int displayDiagnostics
> );
> -void clang_disposeTranslationUnit(CXTranslationUnit);
>
> /**
> * \brief Indicate to Clang that it should only enumerate "local" declarations
>
> Modified: cfe/trunk/tools/CIndex/CIndex.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/CIndex/CIndex.cpp?rev=84548&r1=84547&r2=84548&view=diff
>
> ==============================================================================
> --- cfe/trunk/tools/CIndex/CIndex.cpp (original)
> +++ cfe/trunk/tools/CIndex/CIndex.cpp Mon Oct 19 17:15:09 2009
> @@ -350,15 +350,16 @@
>
> // FIXME: need to pass back error info.
> CXTranslationUnit clang_createTranslationUnit(
> - CXIndex CIdx, const char *ast_filename)
> + CXIndex CIdx, const char *ast_filename, int displayDiagnostics)
> {
> assert(CIdx && "Passed null CXIndex");
> CIndexer *CXXIdx = static_cast<CIndexer *>(CIdx);
> std::string astName(ast_filename);
> std::string ErrMsg;
> + DiagnosticClient *diagClient = displayDiagnostics
> + ? NULL : new IgnoreDiagnosticsClient();
>
> - return ASTUnit::LoadFromPCHFile(astName, &ErrMsg,
> - new IgnoreDiagnosticsClient(),
> + return ASTUnit::LoadFromPCHFile(astName, &ErrMsg, diagClient,
> CXXIdx->getOnlyLocalDecls(),
> /* UseBumpAllocator = */ true);
> }
> @@ -366,8 +367,8 @@
> CXTranslationUnit clang_createTranslationUnitFromSourceFile(
> CXIndex CIdx,
> const char *source_filename,
> - int num_command_line_args, const char **command_line_args)
> -{
> + int num_command_line_args, const char **command_line_args,
> + int displayDiagnostics) {
> // Build up the arguments for involing clang.
> llvm::sys::Path ClangPath = static_cast<CIndexer *>(CIdx)->getClangPath();
> std::vector<const char *> argv;
> @@ -383,11 +384,21 @@
> argv.push_back(NULL);
>
> // Generate the AST file in a separate process.
> +#ifdef LLVM_ON_WIN32
> + llvm::sys::Path DevNull("/dev/null")
> + llvm::sys::Path *Redirects[] = { &DevNull, &DevNull, &DevNull, NULL };
> + llvm::sys::Program::ExecuteAndWait(ClangPath, &argv[0],
> + !displayDiagnostics ? Redirects : NULL);
> +#else
> + // FIXME: I don't know what is the equivalent '/dev/null' redirect for
> + // Windows for this API.
> llvm::sys::Program::ExecuteAndWait(ClangPath, &argv[0]);
> +#endif
>
> // Finally, we create the translation unit from the ast file.
> ASTUnit *ATU = static_cast<ASTUnit *>(
> - clang_createTranslationUnit(CIdx, astTmpFile));
> + clang_createTranslationUnit(CIdx, astTmpFile,
> + displayDiagnostics));
> ATU->unlinkTemporaryFile();
> return ATU;
> }
>
> Modified: cfe/trunk/tools/c-index-test/c-index-test.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/c-index-test/c-index-test.c?rev=84548&r1=84547&r2=84548&view=diff
>
> ==============================================================================
> --- cfe/trunk/tools/c-index-test/c-index-test.c (original)
> +++ cfe/trunk/tools/c-index-test/c-index-test.c Mon Oct 19 17:15:09 2009
> @@ -96,7 +96,7 @@
> if (!strcmp(argv[2], "local"))
> clang_wantOnlyLocalDeclarations(Idx);
>
> - TU = clang_createTranslationUnit(Idx, argv[1]);
> + TU = clang_createTranslationUnit(Idx, argv[1], /* displayDiagnostics= */ 1);
>
> if (!TU) {
> fprintf(stderr, "Unable to load translation unit!\n");
>
>
> _______________________________________________
> 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