aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-03-12 01:32:10 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-03-12 01:32:10 +0000
commitd377522ba694e52128b419c98dabae7086ccf9c6 (patch)
tree223ab4052f3b59f5e0db61c6b6cb27afc5e04187
parent35adb754b618655941d033328240d1799abcb48f (diff)
Driver: Add default index (=0) for Arg::getValue and add Arg::claim
(will be used to emit "command line argument unused" diagnostics). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66756 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/clang/Driver/Arg.h25
1 files changed, 18 insertions, 7 deletions
diff --git a/include/clang/Driver/Arg.h b/include/clang/Driver/Arg.h
index ba72aac719..95086c10ac 100644
--- a/include/clang/Driver/Arg.h
+++ b/include/clang/Driver/Arg.h
@@ -53,6 +53,11 @@ namespace driver {
/// ArgList.
unsigned Index;
+ /// Flag indicating whether this argument was used to effect
+ /// compilation; used for generating "argument unused"
+ /// diagnostics.
+ bool Claimed;
+
protected:
Arg(ArgClass Kind, const Option *Opt, unsigned Index);
@@ -67,11 +72,17 @@ namespace driver {
unsigned getIndex() const { return Index; }
virtual unsigned getNumValues() const = 0;
- virtual const char *getValue(const ArgList &Args, unsigned N) const = 0;
+ virtual const char *getValue(const ArgList &Args, unsigned N=0) const = 0;
/// render - Append the argument onto the given array as strings.
virtual void render(const ArgList &Args, ArgStringList &Output) const = 0;
+ /// claim - Set the Arg claimed bit.
+
+ // FIXME: We need to deal with derived arguments and set the bit
+ // in the original argument; not the derived one.
+ void claim() { Claimed = true; }
+
static bool classof(const Arg *) { return true; }
void dump() const;
@@ -85,7 +96,7 @@ namespace driver {
virtual void render(const ArgList &Args, ArgStringList &Output) const;
virtual unsigned getNumValues() const { return 0; }
- virtual const char *getValue(const ArgList &Args, unsigned N) const;
+ virtual const char *getValue(const ArgList &Args, unsigned N=0) const;
static bool classof(const Arg *A) {
return A->getKind() == Arg::FlagClass;
@@ -101,7 +112,7 @@ namespace driver {
virtual void render(const ArgList &Args, ArgStringList &Output) const;
virtual unsigned getNumValues() const { return 1; }
- virtual const char *getValue(const ArgList &Args, unsigned N) const;
+ virtual const char *getValue(const ArgList &Args, unsigned N=0) const;
static bool classof(const Arg *A) {
return A->getKind() == Arg::PositionalClass;
@@ -118,7 +129,7 @@ namespace driver {
virtual void render(const ArgList &Args, ArgStringList &Output) const;
virtual unsigned getNumValues() const { return 1; }
- virtual const char *getValue(const ArgList &Args, unsigned N) const;
+ virtual const char *getValue(const ArgList &Args, unsigned N=0) const;
static bool classof(const Arg *A) {
return A->getKind() == Arg::JoinedClass;
@@ -137,7 +148,7 @@ namespace driver {
virtual void render(const ArgList &Args, ArgStringList &Output) const;
virtual unsigned getNumValues() const { return NumValues; }
- virtual const char *getValue(const ArgList &Args, unsigned N) const;
+ virtual const char *getValue(const ArgList &Args, unsigned N=0) const;
static bool classof(const Arg *A) {
return A->getKind() == Arg::SeparateClass;
@@ -160,7 +171,7 @@ namespace driver {
virtual void render(const ArgList &Args, ArgStringList &Output) const;
virtual unsigned getNumValues() const { return Values.size(); }
- virtual const char *getValue(const ArgList &Args, unsigned N) const;
+ virtual const char *getValue(const ArgList &Args, unsigned N=0) const;
static bool classof(const Arg *A) {
return A->getKind() == Arg::CommaJoinedClass;
@@ -177,7 +188,7 @@ namespace driver {
virtual void render(const ArgList &Args, ArgStringList &Output) const;
virtual unsigned getNumValues() const { return 2; }
- virtual const char *getValue(const ArgList &Args, unsigned N) const;
+ virtual const char *getValue(const ArgList &Args, unsigned N=0) const;
static bool classof(const Arg *A) {
return A->getKind() == Arg::JoinedAndSeparateClass;