summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/Arg.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2010-06-09 18:49:38 +0000
committerDaniel Dunbar <daniel@zuster.org>2010-06-09 18:49:38 +0000
commit26a95c6717ee52043434c44e7bbb7ddc87cf30b0 (patch)
tree3d5fe6805368873b2ff28ad1ce8a542b2ff09ce1 /clang/lib/Driver/Arg.cpp
parentd96e279f0229ec64cb146071aa5cc951e6577cba (diff)
downloadbcm5719-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.cpp20
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);
}
OpenPOWER on IntegriCloud