#include "clang/Driver/ArgList.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Support/ErrorHandling.h"
+#include "llvm/ADT/Twine.h"
#include <cassert>
#include <algorithm>
using namespace clang::driver;
Arg *Option::accept(const ArgList &Args,
unsigned &Index,
unsigned ArgSize) const {
- StringRef Spelling(Args.getArgString(Index), ArgSize);
+ const Option &UnaliasedOption = getUnaliasedOption();
+ StringRef Spelling;
+ // If the option was an alias, get the spelling from the unaliased one.
+ if (getID() == UnaliasedOption.getID()) {
+ Spelling = StringRef(Args.getArgString(Index), ArgSize);
+ } else {
+ Spelling = Args.MakeArgString(Twine(UnaliasedOption.getPrefix()) +
+ Twine(UnaliasedOption.getName()));
+ }
+
switch (getKind()) {
case FlagClass:
if (ArgSize != strlen(Args.getArgString(Index)))
return 0;
- return new Arg(getUnaliasedOption(), Spelling, Index++);
+ return new Arg(UnaliasedOption, Spelling, Index++);
case JoinedClass: {
const char *Value = Args.getArgString(Index) + ArgSize;
- return new Arg(getUnaliasedOption(), Spelling, Index++, Value);
+ return new Arg(UnaliasedOption, Spelling, Index++, Value);
}
case CommaJoinedClass: {
// Always matches.
const char *Str = Args.getArgString(Index) + ArgSize;
- Arg *A = new Arg(getUnaliasedOption(), Spelling, Index++);
+ Arg *A = new Arg(UnaliasedOption, Spelling, Index++);
// Parse out the comma separated values.
const char *Prev = Str;
if (Index > Args.getNumInputArgStrings())
return 0;
- return new Arg(getUnaliasedOption(), Spelling,
+ return new Arg(UnaliasedOption, Spelling,
Index - 2, Args.getArgString(Index - 1));
case MultiArgClass: {
// Matches iff this is an exact match.
if (Index > Args.getNumInputArgStrings())
return 0;
- Arg *A = new Arg(getUnaliasedOption(), Spelling, Index - 1 - getNumArgs(),
+ Arg *A = new Arg(UnaliasedOption, Spelling, Index - 1 - getNumArgs(),
Args.getArgString(Index - getNumArgs()));
for (unsigned i = 1; i != getNumArgs(); ++i)
A->getValues().push_back(Args.getArgString(Index - getNumArgs() + i));
if (Index > Args.getNumInputArgStrings())
return 0;
- return new Arg(getUnaliasedOption(), Spelling,
+ return new Arg(UnaliasedOption, Spelling,
Index - 2, Args.getArgString(Index - 1));
}
case JoinedAndSeparateClass:
if (Index > Args.getNumInputArgStrings())
return 0;
- return new Arg(getUnaliasedOption(), Spelling, Index - 2,
+ return new Arg(UnaliasedOption, Spelling, Index - 2,
Args.getArgString(Index - 2) + ArgSize,
Args.getArgString(Index - 1));
default: