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 | 26a95c6717ee52043434c44e7bbb7ddc87cf30b0 (patch) | |
tree | 3d5fe6805368873b2ff28ad1ce8a542b2ff09ce1 /clang/lib/Driver/Arg.cpp | |
parent | d96e279f0229ec64cb146071aa5cc951e6577cba (diff) | |
download | bcm5719-llvm-26a95c6717ee52043434c44e7bbb7ddc87cf30b0.tar.gz bcm5719-llvm-26a95c6717ee52043434c44e7bbb7ddc87cf30b0.zip |
Driver: Add an explicit offset to JoinedArg and JoinedAndSeparateArg, so that
they can be independent of the exact option that created them.
llvm-svn: 105739
Diffstat (limited to 'clang/lib/Driver/Arg.cpp')
-rw-r--r-- | clang/lib/Driver/Arg.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/clang/lib/Driver/Arg.cpp b/clang/lib/Driver/Arg.cpp index 8243caba77b..9b02378d15a 100644 --- a/clang/lib/Driver/Arg.cpp +++ b/clang/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); } |