diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-12-02 03:23:45 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-12-02 03:23:45 +0000 |
commit | 7b55668db7618334cc40011d3c1e128524d89462 (patch) | |
tree | 96291a6941a167a8e7a1ed721a88ab164a8eefa8 /tools/index-test/index-test.cpp | |
parent | daab7b1016f0a82fefa4f7be6e63c57c06b19ffc (diff) |
Add ASTUnit::LoadFromCommandLine, which creates an ASTUnit out of a list of
(clang/driver) command line arguments (including the source file).
- The arguments are expected to include the source file.
- The idea is that even though this is a somewhat odd API, its the form which
many tools can most easily use (for example, by interposing with the compiler).
Also, switch index-test's -ast-from-source to use this entry point, and provide
a -arg command line argument which can be used to test that the command line
arguments are handled correctly.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@90288 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'tools/index-test/index-test.cpp')
-rw-r--r-- | tools/index-test/index-test.cpp | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/tools/index-test/index-test.cpp b/tools/index-test/index-test.cpp index dd7cbb2164..fc8547b784 100644 --- a/tools/index-test/index-test.cpp +++ b/tools/index-test/index-test.cpp @@ -208,20 +208,24 @@ static void ProcessASTLocation(ASTLocation ASTLoc, Indexer &Idxer) { static llvm::cl::opt<bool> ASTFromSource("ast-from-source", - llvm::cl::desc("Treat the inputs as source files to parse.")); + llvm::cl::desc("Treat the inputs as source files to parse")); + +static llvm::cl::list<std::string> +CompilerArgs("arg", llvm::cl::desc("Extra arguments to use during parsing")); static llvm::cl::list<std::string> InputFilenames(llvm::cl::Positional, llvm::cl::desc("<input AST files>")); -void CreateCompilerInvocation(const std::string &Filename, - CompilerInvocation &CI, Diagnostic &Diags, - const char *argv0) { +ASTUnit *CreateFromSource(const std::string &Filename, Diagnostic &Diags, + const char *Argv0) { llvm::SmallVector<const char *, 16> Args; Args.push_back(Filename.c_str()); + for (unsigned i = 0, e = CompilerArgs.size(); i != e; ++i) + Args.push_back(CompilerArgs[i].c_str()); - void *MainAddr = (void*) (intptr_t) CreateCompilerInvocation; - CompilerInvocation::CreateFromArgs(CI, Args.data(), Args.data() + Args.size(), - argv0, MainAddr, Diags); + return ASTUnit::LoadFromCommandLine(Args.data(), Args.data() + Args.size(), + Diags, Argv0, + (void*) (intptr_t) CreateFromSource); } int main(int argc, char **argv) { @@ -249,10 +253,8 @@ int main(int argc, char **argv) { llvm::OwningPtr<ASTUnit> AST; if (ASTFromSource) { - CompilerInvocation CI; - CreateCompilerInvocation(InFile, CI, *Diags, argv[0]); - AST.reset(ASTUnit::LoadFromCompilerInvocation(CI, *Diags)); - if (!AST) + AST.reset(CreateFromSource(InFile, *Diags, argv[0])); + if (!AST || Diags->getNumErrors()) ErrMsg = "unable to create AST"; } else AST.reset(ASTUnit::LoadFromPCHFile(InFile, &ErrMsg)); |