summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/Driver.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-03-05 06:38:47 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-03-05 06:38:47 +0000
commitd02cb1dc2b58a1a95f3b467eddfe88c0f90acaac (patch)
tree3cd27c990c544f9cd1e3b89cc63afdb3c7a9f3e4 /clang/lib/Driver/Driver.cpp
parent359df7420f821d431c98d1b9145398de4558d370 (diff)
downloadbcm5719-llvm-d02cb1dc2b58a1a95f3b467eddfe88c0f90acaac.tar.gz
bcm5719-llvm-d02cb1dc2b58a1a95f3b467eddfe88c0f90acaac.zip
Driver: Basic argument parsing.
- Add Driver::ParseArgStrings. - Store values directly in CommaJoinedArg to support simple access. - Add FlagArg class. llvm-svn: 66142
Diffstat (limited to 'clang/lib/Driver/Driver.cpp')
-rw-r--r--clang/lib/Driver/Driver.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index d3c959499a1..541a6d8eeba 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -12,7 +12,10 @@
#include "clang/Driver/Arg.h"
#include "clang/Driver/ArgList.h"
#include "clang/Driver/Compilation.h"
+#include "clang/Driver/Option.h"
#include "clang/Driver/Options.h"
+
+#include "llvm/Support/raw_ostream.h"
using namespace clang::driver;
Driver::Driver() : Opts(new OptTable()) {
@@ -23,6 +26,42 @@ Driver::~Driver() {
delete Opts;
}
+ArgList *Driver::ParseArgStrings(const char **ArgBegin, const char **ArgEnd) {
+ ArgList *Args = new ArgList(ArgBegin, ArgEnd);
+
+ unsigned Index = 0, End = ArgEnd - ArgBegin;
+ while (Index < End) {
+ unsigned Prev = Index;
+ Arg *A = getOpts().ParseOneArg(*Args, Index, End);
+ if (A)
+ Args->append(A);
+
+ assert(Index > Prev && "Parser failed to consume argument.");
+ }
+
+ return Args;
+}
+
Compilation *Driver::BuildCompilation(int argc, const char **argv) {
+ ArgList *Args = ParseArgStrings(argv + 1, argv + argc);
+
+ // Hard coded to print-options behavior.
+ unsigned i = 0;
+ for (ArgList::iterator it = Args->begin(), ie = Args->end();
+ it != ie; ++it, ++i) {
+ Arg *A = *it;
+ llvm::errs() << "Option " << i << " - "
+ << "Name: \"" << A->getOption().getName() << "\", "
+ << "Values: {";
+ for (unsigned j = 0; j < A->getNumValues(); ++j) {
+ if (j)
+ llvm::errs() << ", ";
+ llvm::errs() << '"' << A->getValue(*Args, j) << '"';
+ }
+ llvm::errs() << "}\n";
+
+ llvm::errs().flush(); // FIXME
+ }
+
return new Compilation();
}
OpenPOWER on IntegriCloud