Driver: Add default index (=0) for Arg::getValue and add Arg::claim

(will be used to emit "command line argument unused" diagnostics).

llvm-svn: 66756
This commit is contained in:
Daniel Dunbar 2009-03-12 01:32:10 +00:00
parent 9cdb9bb3e5
commit adca11c2dd
1 changed files with 18 additions and 7 deletions

View File

@ -53,6 +53,11 @@ namespace driver {
/// ArgList. /// ArgList.
unsigned Index; unsigned Index;
/// Flag indicating whether this argument was used to effect
/// compilation; used for generating "argument unused"
/// diagnostics.
bool Claimed;
protected: protected:
Arg(ArgClass Kind, const Option *Opt, unsigned Index); Arg(ArgClass Kind, const Option *Opt, unsigned Index);
@ -67,11 +72,17 @@ namespace driver {
unsigned getIndex() const { return Index; } unsigned getIndex() const { return Index; }
virtual unsigned getNumValues() const = 0; 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. /// render - Append the argument onto the given array as strings.
virtual void render(const ArgList &Args, ArgStringList &Output) const = 0; 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; } static bool classof(const Arg *) { return true; }
void dump() const; void dump() const;
@ -85,7 +96,7 @@ namespace driver {
virtual void render(const ArgList &Args, ArgStringList &Output) const; virtual void render(const ArgList &Args, ArgStringList &Output) const;
virtual unsigned getNumValues() const { return 0; } 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) { static bool classof(const Arg *A) {
return A->getKind() == Arg::FlagClass; return A->getKind() == Arg::FlagClass;
@ -101,7 +112,7 @@ namespace driver {
virtual void render(const ArgList &Args, ArgStringList &Output) const; virtual void render(const ArgList &Args, ArgStringList &Output) const;
virtual unsigned getNumValues() const { return 1; } 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) { static bool classof(const Arg *A) {
return A->getKind() == Arg::PositionalClass; return A->getKind() == Arg::PositionalClass;
@ -118,7 +129,7 @@ namespace driver {
virtual void render(const ArgList &Args, ArgStringList &Output) const; virtual void render(const ArgList &Args, ArgStringList &Output) const;
virtual unsigned getNumValues() const { return 1; } 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) { static bool classof(const Arg *A) {
return A->getKind() == Arg::JoinedClass; return A->getKind() == Arg::JoinedClass;
@ -137,7 +148,7 @@ namespace driver {
virtual void render(const ArgList &Args, ArgStringList &Output) const; virtual void render(const ArgList &Args, ArgStringList &Output) const;
virtual unsigned getNumValues() const { return NumValues; } 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) { static bool classof(const Arg *A) {
return A->getKind() == Arg::SeparateClass; return A->getKind() == Arg::SeparateClass;
@ -160,7 +171,7 @@ namespace driver {
virtual void render(const ArgList &Args, ArgStringList &Output) const; virtual void render(const ArgList &Args, ArgStringList &Output) const;
virtual unsigned getNumValues() const { return Values.size(); } 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) { static bool classof(const Arg *A) {
return A->getKind() == Arg::CommaJoinedClass; return A->getKind() == Arg::CommaJoinedClass;
@ -177,7 +188,7 @@ namespace driver {
virtual void render(const ArgList &Args, ArgStringList &Output) const; virtual void render(const ArgList &Args, ArgStringList &Output) const;
virtual unsigned getNumValues() const { return 2; } 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) { static bool classof(const Arg *A) {
return A->getKind() == Arg::JoinedAndSeparateClass; return A->getKind() == Arg::JoinedAndSeparateClass;