summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2015-09-11 20:43:05 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2015-09-11 20:43:05 +0000
commit74bcd21e342faffb558ff58d635f4c974c4213fc (patch)
treeff003ed177014ce223a0d7f2ea6900e480f6a522
parent744267765caabf432cbcc126ad2726d96761a865 (diff)
downloadbcm5719-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.h6
-rw-r--r--clang/include/clang/Tooling/CompilationDatabase.h10
-rw-r--r--clang/include/clang/Tooling/JSONCompilationDatabase.h5
-rw-r--r--clang/lib/Tooling/CompilationDatabase.cpp4
-rw-r--r--clang/lib/Tooling/JSONCompilationDatabase.cpp9
-rw-r--r--clang/tools/libclang/CXCompilationDatabase.cpp10
-rw-r--r--clang/tools/libclang/libclang.exports1
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
OpenPOWER on IntegriCloud