aboutsummaryrefslogtreecommitdiff
path: root/lib/Driver/Arg.cpp
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2009-03-29 22:29:05 +0000
committerDaniel Dunbar <daniel@zuster.org>2009-03-29 22:29:05 +0000
commit478edc295efc560627053e2320bedd2f696ae028 (patch)
tree9545e251b27d675c2e0920177f7ee87bb6ad9ad0 /lib/Driver/Arg.cpp
parent9120f179fd2e354f067e4ef2c76dcf3fc4db8a16 (diff)
Driver: Track which original arguments an arg is derived from, so that
we can properly claim arguments, even if they have been translated by the tool chain. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@68020 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Driver/Arg.cpp')
-rw-r--r--lib/Driver/Arg.cpp35
1 files changed, 18 insertions, 17 deletions
diff --git a/lib/Driver/Arg.cpp b/lib/Driver/Arg.cpp
index 1d8d2497b6..e227d7e2ea 100644
--- a/lib/Driver/Arg.cpp
+++ b/lib/Driver/Arg.cpp
@@ -14,11 +14,9 @@
using namespace clang::driver;
-Arg::Arg(ArgClass _Kind, const Option *_Opt, unsigned _Index)
- : Kind(_Kind),
- Opt(_Opt),
- Index(_Index),
- Claimed(false)
+Arg::Arg(ArgClass _Kind, const Option *_Opt, unsigned _Index,
+ const Arg *_BaseArg)
+ : Kind(_Kind), Opt(_Opt), BaseArg(_BaseArg), Index(_Index), Claimed(false)
{
}
@@ -76,8 +74,8 @@ void Arg::renderAsInput(const ArgList &Args, ArgStringList &Output) const {
Output.push_back(getValue(Args, i));
}
-FlagArg::FlagArg(const Option *Opt, unsigned Index)
- : Arg(FlagClass, Opt, Index) {
+FlagArg::FlagArg(const Option *Opt, unsigned Index, const Arg *BaseArg)
+ : Arg(FlagClass, Opt, Index, BaseArg) {
}
void FlagArg::render(const ArgList &Args, ArgStringList &Output) const {
@@ -89,8 +87,9 @@ const char *FlagArg::getValue(const ArgList &Args, unsigned N) const {
return 0;
}
-PositionalArg::PositionalArg(const Option *Opt, unsigned Index)
- : Arg(PositionalClass, Opt, Index) {
+PositionalArg::PositionalArg(const Option *Opt, unsigned Index,
+ const Arg *BaseArg)
+ : Arg(PositionalClass, Opt, Index, BaseArg) {
}
void PositionalArg::render(const ArgList &Args, ArgStringList &Output) const {
@@ -102,8 +101,8 @@ const char *PositionalArg::getValue(const ArgList &Args, unsigned N) const {
return Args.getArgString(getIndex());
}
-JoinedArg::JoinedArg(const Option *Opt, unsigned Index)
- : Arg(JoinedClass, Opt, Index) {
+JoinedArg::JoinedArg(const Option *Opt, unsigned Index, const Arg *BaseArg)
+ : Arg(JoinedClass, Opt, Index, BaseArg) {
}
void JoinedArg::render(const ArgList &Args, ArgStringList &Output) const {
@@ -122,8 +121,8 @@ const char *JoinedArg::getValue(const ArgList &Args, unsigned N) const {
}
CommaJoinedArg::CommaJoinedArg(const Option *Opt, unsigned Index,
- const char *Str)
- : Arg(CommaJoinedClass, Opt, Index) {
+ const char *Str, const Arg *BaseArg)
+ : Arg(CommaJoinedClass, Opt, Index, BaseArg) {
const char *Prev = Str;
for (;; ++Str) {
char c = *Str;
@@ -149,8 +148,9 @@ const char *CommaJoinedArg::getValue(const ArgList &Args, unsigned N) const {
return Values[N].c_str();
}
-SeparateArg::SeparateArg(const Option *Opt, unsigned Index, unsigned _NumValues)
- : Arg(SeparateClass, Opt, Index), NumValues(_NumValues) {
+SeparateArg::SeparateArg(const Option *Opt, unsigned Index, unsigned _NumValues,
+ const Arg *BaseArg)
+ : Arg(SeparateClass, Opt, Index, BaseArg), NumValues(_NumValues) {
}
void SeparateArg::render(const ArgList &Args, ArgStringList &Output) const {
@@ -172,8 +172,9 @@ const char *SeparateArg::getValue(const ArgList &Args, unsigned N) const {
return Args.getArgString(getIndex() + 1 + N);
}
-JoinedAndSeparateArg::JoinedAndSeparateArg(const Option *Opt, unsigned Index)
- : Arg(JoinedAndSeparateClass, Opt, Index) {
+JoinedAndSeparateArg::JoinedAndSeparateArg(const Option *Opt, unsigned Index,
+ const Arg *BaseArg)
+ : Arg(JoinedAndSeparateClass, Opt, Index, BaseArg) {
}
void JoinedAndSeparateArg::render(const ArgList &Args,