diff options
author | Daniel Dunbar <daniel@zuster.org> | 2010-06-09 18:49:38 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2010-06-09 18:49:38 +0000 |
commit | 312a8b726e24078d3bd3b2328f9f895d1407cdb7 (patch) | |
tree | 5170f5e2111c978f108af2f284cfcceeee5a125c /lib/Driver/Arg.cpp | |
parent | a3f28c341a1b69fc1b8deefb4f9abd64ac949ec1 (diff) |
Driver: Add an explicit offset to JoinedArg and JoinedAndSeparateArg, so that
they can be independent of the exact option that created them.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@105739 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Driver/Arg.cpp')
-rw-r--r-- | lib/Driver/Arg.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/lib/Driver/Arg.cpp b/lib/Driver/Arg.cpp index 8243caba77..9b02378d15 100644 --- a/lib/Driver/Arg.cpp +++ b/lib/Driver/Arg.cpp @@ -101,8 +101,9 @@ const char *PositionalArg::getValue(const ArgList &Args, unsigned N) const { return Args.getArgString(getIndex()); } -JoinedArg::JoinedArg(const Option *Opt, unsigned Index, const Arg *BaseArg) - : Arg(JoinedClass, Opt, Index, BaseArg) { +JoinedArg::JoinedArg(const Option *Opt, unsigned Index, unsigned _Offset, + const Arg *BaseArg) + : Arg(JoinedClass, Opt, Index, BaseArg), Offset(_Offset) { } void JoinedArg::render(const ArgList &Args, ArgStringList &Output) const { @@ -110,14 +111,14 @@ void JoinedArg::render(const ArgList &Args, ArgStringList &Output) const { Output.push_back(getOption().getName()); Output.push_back(getValue(Args, 0)); } else { - Output.push_back(Args.getArgString(getIndex())); + Output.push_back(Args.GetOrMakeJoinedArgString( + getIndex(), getOption().getName(), getValue(Args, 0))); } } const char *JoinedArg::getValue(const ArgList &Args, unsigned N) const { assert(N < getNumValues() && "Invalid index."); - // FIXME: Avoid strlen. - return Args.getArgString(getIndex()) + strlen(getOption().getName()); + return Args.getArgString(getIndex()) + Offset; } CommaJoinedArg::CommaJoinedArg(const Option *Opt, unsigned Index, @@ -171,13 +172,14 @@ const char *SeparateArg::getValue(const ArgList &Args, unsigned N) const { } JoinedAndSeparateArg::JoinedAndSeparateArg(const Option *Opt, unsigned Index, - const Arg *BaseArg) - : Arg(JoinedAndSeparateClass, Opt, Index, BaseArg) { + unsigned _Offset, const Arg *BaseArg) + : Arg(JoinedAndSeparateClass, Opt, Index, BaseArg), Offset(_Offset) { } void JoinedAndSeparateArg::render(const ArgList &Args, ArgStringList &Output) const { - Output.push_back(Args.getArgString(getIndex())); + Output.push_back(Args.GetOrMakeJoinedArgString( + getIndex(), getOption().getName(), getValue(Args, 0))); Output.push_back(Args.getArgString(getIndex() + 1)); } @@ -185,6 +187,6 @@ const char *JoinedAndSeparateArg::getValue(const ArgList &Args, unsigned N) const { assert(N < getNumValues() && "Invalid index."); if (N == 0) - return Args.getArgString(getIndex()) + strlen(getOption().getName()); + return Args.getArgString(getIndex()) + Offset; return Args.getArgString(getIndex() + 1); } |