diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-06-09 22:31:00 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-06-09 22:31:00 +0000 |
commit | 4465a776a56de81211ae4672e5782c6bef075135 (patch) | |
tree | 8d13f1e726299f975fdd658cbe3b80d67e0eef7c /lib/Driver/Option.cpp | |
parent | bfbb39deabba4f7b8c89d69a28653074c8936086 (diff) |
Driver: Change Arg to just hold the values directly, instead of implicitly
deriving them from the Arg type.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@105760 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Driver/Option.cpp')
-rw-r--r-- | lib/Driver/Option.cpp | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/lib/Driver/Option.cpp b/lib/Driver/Option.cpp index 5a967ea3df..ea3b3bc418 100644 --- a/lib/Driver/Option.cpp +++ b/lib/Driver/Option.cpp @@ -133,7 +133,8 @@ JoinedOption::JoinedOption(OptSpecifier ID, const char *Name, Arg *JoinedOption::accept(const InputArgList &Args, unsigned &Index) const { // Always matches. - return new JoinedArg(this, Index++, strlen(getName())); + const char *Value = Args.getArgString(Index) + strlen(getName()); + return new JoinedArg(this, Index++, Value); } CommaJoinedOption::CommaJoinedOption(OptSpecifier ID, const char *Name, @@ -168,7 +169,7 @@ Arg *SeparateOption::accept(const InputArgList &Args, unsigned &Index) const { if (Index > Args.getNumInputArgStrings()) return 0; - return new SeparateArg(this, Index - 2, 1); + return new SeparateArg(this, Index - 2, Args.getArgString(Index - 1)); } MultiArgOption::MultiArgOption(OptSpecifier ID, const char *Name, @@ -188,7 +189,11 @@ Arg *MultiArgOption::accept(const InputArgList &Args, unsigned &Index) const { if (Index > Args.getNumInputArgStrings()) return 0; - return new SeparateArg(this, Index - 1 - NumArgs, NumArgs); + Arg *A = new SeparateArg(this, Index - 1 - NumArgs, + Args.getArgString(Index - NumArgs)); + for (unsigned i = 1; i != NumArgs; ++i) + A->getValues().push_back(Args.getArgString(Index - NumArgs + i)); + return A; } JoinedOrSeparateOption::JoinedOrSeparateOption(OptSpecifier ID, @@ -202,15 +207,18 @@ Arg *JoinedOrSeparateOption::accept(const InputArgList &Args, unsigned &Index) const { // If this is not an exact match, it is a joined arg. // FIXME: Avoid strlen. - if (strlen(getName()) != strlen(Args.getArgString(Index))) - return new JoinedArg(this, Index++, strlen(getName())); + if (strlen(getName()) != strlen(Args.getArgString(Index))) { + const char *Value = Args.getArgString(Index) + strlen(getName()); + return new JoinedArg(this, Index++, Value); + } // Otherwise it must be separate. Index += 2; if (Index > Args.getNumInputArgStrings()) return 0; - return new SeparateArg(this, Index - 2, 1); + return new SeparateArg(this, Index - 2, + Args.getArgString(Index - 1)); } JoinedAndSeparateOption::JoinedAndSeparateOption(OptSpecifier ID, @@ -228,6 +236,7 @@ Arg *JoinedAndSeparateOption::accept(const InputArgList &Args, if (Index > Args.getNumInputArgStrings()) return 0; - return new JoinedAndSeparateArg(this, Index - 2, strlen(getName())); + return new JoinedAndSeparateArg(this, Index - 2, + Args.getArgString(Index-2)+strlen(getName()), + Args.getArgString(Index-1)); } - |