123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- #include "clang-c/CXCompilationDatabase.h"
- #include "CXString.h"
- #include "clang/Tooling/CompilationDatabase.h"
- #include <cstdio>
- using namespace clang;
- using namespace clang::tooling;
- // FIXME: do something more useful with the error message
- CXCompilationDatabase
- clang_CompilationDatabase_fromDirectory(const char *BuildDir,
- CXCompilationDatabase_Error *ErrorCode)
- {
- std::string ErrorMsg;
- CXCompilationDatabase_Error Err = CXCompilationDatabase_NoError;
- std::unique_ptr<CompilationDatabase> db =
- CompilationDatabase::loadFromDirectory(BuildDir, ErrorMsg);
- if (!db) {
- fprintf(stderr, "LIBCLANG TOOLING ERROR: %s\n", ErrorMsg.c_str());
- Err = CXCompilationDatabase_CanNotLoadDatabase;
- }
- if (ErrorCode)
- *ErrorCode = Err;
- return db.release();
- }
- void
- clang_CompilationDatabase_dispose(CXCompilationDatabase CDb)
- {
- delete static_cast<CompilationDatabase *>(CDb);
- }
- struct AllocatedCXCompileCommands
- {
- std::vector<CompileCommand> CCmd;
- AllocatedCXCompileCommands(std::vector<CompileCommand> Cmd)
- : CCmd(std::move(Cmd)) {}
- };
- CXCompileCommands
- clang_CompilationDatabase_getCompileCommands(CXCompilationDatabase CDb,
- const char *CompleteFileName)
- {
- if (CompilationDatabase *db = static_cast<CompilationDatabase *>(CDb)) {
- std::vector<CompileCommand> CCmd(db->getCompileCommands(CompleteFileName));
- if (!CCmd.empty())
- return new AllocatedCXCompileCommands(std::move(CCmd));
- }
- return nullptr;
- }
- CXCompileCommands
- clang_CompilationDatabase_getAllCompileCommands(CXCompilationDatabase CDb) {
- if (CompilationDatabase *db = static_cast<CompilationDatabase *>(CDb)) {
- std::vector<CompileCommand> CCmd(db->getAllCompileCommands());
- if (!CCmd.empty())
- return new AllocatedCXCompileCommands(std::move(CCmd));
- }
- return nullptr;
- }
- void
- clang_CompileCommands_dispose(CXCompileCommands Cmds)
- {
- delete static_cast<AllocatedCXCompileCommands *>(Cmds);
- }
- unsigned
- clang_CompileCommands_getSize(CXCompileCommands Cmds)
- {
- if (!Cmds)
- return 0;
- AllocatedCXCompileCommands *ACC =
- static_cast<AllocatedCXCompileCommands *>(Cmds);
- return ACC->CCmd.size();
- }
- CXCompileCommand
- clang_CompileCommands_getCommand(CXCompileCommands Cmds, unsigned I)
- {
- if (!Cmds)
- return nullptr;
- AllocatedCXCompileCommands *ACC =
- static_cast<AllocatedCXCompileCommands *>(Cmds);
- if (I >= ACC->CCmd.size())
- return nullptr;
- return &ACC->CCmd[I];
- }
- CXString
- clang_CompileCommand_getDirectory(CXCompileCommand CCmd)
- {
- if (!CCmd)
- return cxstring::createNull();
- CompileCommand *cmd = static_cast<CompileCommand *>(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)
- {
- if (!CCmd)
- return 0;
- return static_cast<CompileCommand *>(CCmd)->CommandLine.size();
- }
- CXString
- clang_CompileCommand_getArg(CXCompileCommand CCmd, unsigned Arg)
- {
- if (!CCmd)
- return cxstring::createNull();
- CompileCommand *Cmd = static_cast<CompileCommand *>(CCmd);
- if (Arg >= Cmd->CommandLine.size())
- return cxstring::createNull();
- return cxstring::createRef(Cmd->CommandLine[Arg].c_str());
- }
- unsigned
- clang_CompileCommand_getNumMappedSources(CXCompileCommand CCmd)
- {
- // Left here for backward compatibility. No mapped sources exists in the C++
- // backend anymore.
- return 0;
- }
- CXString
- clang_CompileCommand_getMappedSourcePath(CXCompileCommand CCmd, unsigned I)
- {
- // Left here for backward compatibility. No mapped sources exists in the C++
- // backend anymore.
- return cxstring::createNull();
- }
- CXString
- clang_CompileCommand_getMappedSourceContent(CXCompileCommand CCmd, unsigned I)
- {
- // Left here for backward compatibility. No mapped sources exists in the C++
- // backend anymore.
- return cxstring::createNull();
- }
|