diff options
author | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2015-09-11 20:43:05 +0000 |
---|---|---|
committer | Argyrios Kyrtzidis <akyrtzi@gmail.com> | 2015-09-11 20:43:05 +0000 |
commit | 74bcd21e342faffb558ff58d635f4c974c4213fc (patch) | |
tree | ff003ed177014ce223a0d7f2ea6900e480f6a522 | |
parent | 744267765caabf432cbcc126ad2726d96761a865 (diff) | |
download | bcm5719-llvm-74bcd21e342faffb558ff58d635f4c974c4213fc.tar.gz bcm5719-llvm-74bcd21e342faffb558ff58d635f4c974c4213fc.zip |
[tooling] In CompileCommand, Expose the 'file' that was associated with the command.
llvm-svn: 247468
-rw-r--r-- | clang/include/clang-c/CXCompilationDatabase.h | 6 | ||||
-rw-r--r-- | clang/include/clang/Tooling/CompilationDatabase.h | 10 | ||||
-rw-r--r-- | clang/include/clang/Tooling/JSONCompilationDatabase.h | 5 | ||||
-rw-r--r-- | clang/lib/Tooling/CompilationDatabase.cpp | 4 | ||||
-rw-r--r-- | clang/lib/Tooling/JSONCompilationDatabase.cpp | 9 | ||||
-rw-r--r-- | clang/tools/libclang/CXCompilationDatabase.cpp | 10 | ||||
-rw-r--r-- | clang/tools/libclang/libclang.exports | 1 |
7 files changed, 37 insertions, 8 deletions
diff --git a/clang/include/clang-c/CXCompilationDatabase.h b/clang/include/clang-c/CXCompilationDatabase.h index 068a677a95e..9359abfebfe 100644 --- a/clang/include/clang-c/CXCompilationDatabase.h +++ b/clang/include/clang-c/CXCompilationDatabase.h @@ -126,6 +126,12 @@ CINDEX_LINKAGE CXString clang_CompileCommand_getDirectory(CXCompileCommand); /** + * \brief Get the filename associated with the CompileCommand. + */ +CINDEX_LINKAGE CXString +clang_CompileCommand_getFilename(CXCompileCommand); + +/** * \brief Get the number of arguments in the compiler invocation. * */ diff --git a/clang/include/clang/Tooling/CompilationDatabase.h b/clang/include/clang/Tooling/CompilationDatabase.h index e5b95af3aef..08a0ffec9d6 100644 --- a/clang/include/clang/Tooling/CompilationDatabase.h +++ b/clang/include/clang/Tooling/CompilationDatabase.h @@ -42,12 +42,18 @@ namespace tooling { /// \brief Specifies the working directory and command of a compilation. struct CompileCommand { CompileCommand() {} - CompileCommand(Twine Directory, std::vector<std::string> CommandLine) - : Directory(Directory.str()), CommandLine(std::move(CommandLine)) {} + CompileCommand(Twine Directory, Twine Filename, + std::vector<std::string> CommandLine) + : Directory(Directory.str()), + Filename(Filename.str()), + CommandLine(std::move(CommandLine)) {} /// \brief The working directory the command was executed from. std::string Directory; + /// The source file associated with the command. + std::string Filename; + /// \brief The command line that was executed. std::vector<std::string> CommandLine; diff --git a/clang/include/clang/Tooling/JSONCompilationDatabase.h b/clang/include/clang/Tooling/JSONCompilationDatabase.h index ec1a3ab2960..0e6c893969d 100644 --- a/clang/include/clang/Tooling/JSONCompilationDatabase.h +++ b/clang/include/clang/Tooling/JSONCompilationDatabase.h @@ -99,13 +99,14 @@ private: /// failed. bool parse(std::string &ErrorMessage); - // Tuple (directory, commandline) where 'commandline' points to the + // Tuple (directory, filename, commandline) where 'commandline' points to the // corresponding scalar nodes in the YAML stream. // If the command line contains a single argument, it is a shell-escaped // command line. // Otherwise, each entry in the command line vector is a literal // argument to the compiler. - typedef std::pair<llvm::yaml::ScalarNode *, + typedef std::tuple<llvm::yaml::ScalarNode *, + llvm::yaml::ScalarNode *, std::vector<llvm::yaml::ScalarNode *>> CompileCommandRef; /// \brief Converts the given array of CompileCommandRefs to CompileCommands. diff --git a/clang/lib/Tooling/CompilationDatabase.cpp b/clang/lib/Tooling/CompilationDatabase.cpp index c1817b7afcc..957e40137ea 100644 --- a/clang/lib/Tooling/CompilationDatabase.cpp +++ b/clang/lib/Tooling/CompilationDatabase.cpp @@ -299,13 +299,15 @@ FixedCompilationDatabase(Twine Directory, ArrayRef<std::string> CommandLine) { std::vector<std::string> ToolCommandLine(1, "clang-tool"); ToolCommandLine.insert(ToolCommandLine.end(), CommandLine.begin(), CommandLine.end()); - CompileCommands.emplace_back(Directory, std::move(ToolCommandLine)); + CompileCommands.emplace_back(Directory, StringRef(), + std::move(ToolCommandLine)); } std::vector<CompileCommand> FixedCompilationDatabase::getCompileCommands(StringRef FilePath) const { std::vector<CompileCommand> Result(CompileCommands); Result[0].CommandLine.push_back(FilePath); + Result[0].Filename = FilePath; return Result; } diff --git a/clang/lib/Tooling/JSONCompilationDatabase.cpp b/clang/lib/Tooling/JSONCompilationDatabase.cpp index 3ac6f697e57..dd4d7a8f083 100644 --- a/clang/lib/Tooling/JSONCompilationDatabase.cpp +++ b/clang/lib/Tooling/JSONCompilationDatabase.cpp @@ -232,8 +232,11 @@ void JSONCompilationDatabase::getCommands( std::vector<CompileCommand> &Commands) const { for (int I = 0, E = CommandsRef.size(); I != E; ++I) { SmallString<8> DirectoryStorage; - Commands.emplace_back(CommandsRef[I].first->getValue(DirectoryStorage), - nodeToCommandLine(CommandsRef[I].second)); + SmallString<32> FilenameStorage; + Commands.emplace_back( + std::get<0>(CommandsRef[I])->getValue(DirectoryStorage), + std::get<1>(CommandsRef[I])->getValue(FilenameStorage), + nodeToCommandLine(std::get<2>(CommandsRef[I]))); } } @@ -335,7 +338,7 @@ bool JSONCompilationDatabase::parse(std::string &ErrorMessage) { llvm::sys::path::native(FileName, NativeFilePath); } IndexByFile[NativeFilePath].push_back( - CompileCommandRef(Directory, *Command)); + CompileCommandRef(Directory, File, *Command)); MatchTrie.insert(NativeFilePath); } return true; diff --git a/clang/tools/libclang/CXCompilationDatabase.cpp b/clang/tools/libclang/CXCompilationDatabase.cpp index 1e4a2cd44aa..82498bf54c7 100644 --- a/clang/tools/libclang/CXCompilationDatabase.cpp +++ b/clang/tools/libclang/CXCompilationDatabase.cpp @@ -111,6 +111,16 @@ clang_CompileCommand_getDirectory(CXCompileCommand CCmd) return cxstring::createRef(cmd->Directory.c_str()); } +CXString +clang_CompileCommand_getFilename(CXCompileCommand CCmd) +{ + if (!CCmd) + return cxstring::createNull(); + + CompileCommand *cmd = static_cast<CompileCommand *>(CCmd); + return cxstring::createRef(cmd->Filename.c_str()); +} + unsigned clang_CompileCommand_getNumArgs(CXCompileCommand CCmd) { diff --git a/clang/tools/libclang/libclang.exports b/clang/tools/libclang/libclang.exports index 44f3836a114..5179b96fc61 100644 --- a/clang/tools/libclang/libclang.exports +++ b/clang/tools/libclang/libclang.exports @@ -297,6 +297,7 @@ clang_CompileCommands_dispose clang_CompileCommands_getSize clang_CompileCommands_getCommand clang_CompileCommand_getDirectory +clang_CompileCommand_getFilename clang_CompileCommand_getMappedSourceContent clang_CompileCommand_getMappedSourcePath clang_CompileCommand_getNumArgs |