diff options
| author | Hans Wennborg <hans@hanshq.net> | 2013-08-13 21:09:50 +0000 |
|---|---|---|
| committer | Hans Wennborg <hans@hanshq.net> | 2013-08-13 21:09:50 +0000 |
| commit | d505fbf40376dd7ace0ef50e794a840f54091586 (patch) | |
| tree | 9a547901540e3b2ccf0e03a4788fdb87ab590673 /llvm/lib/Option/Option.cpp | |
| parent | 3a2c2d42b85b657535dfb39e811045403ccdd195 (diff) | |
| download | bcm5719-llvm-d505fbf40376dd7ace0ef50e794a840f54091586.tar.gz bcm5719-llvm-d505fbf40376dd7ace0ef50e794a840f54091586.zip | |
Options: Add new option kind that consumes remaining arguments
This adds KIND_REMAINING_ARGS, a class of options that consume
all remaining arguments on the command line.
This will be used to support /link in clang-cl, which is used
to forward all remaining arguments to the linker.
It also allows us to remove the hard-coded handling of "--",
allowing clients (clang and lld) to implement that functionality
themselves with this new option class.
Differential Revision: http://llvm-reviews.chandlerc.com/D1387
llvm-svn: 188314
Diffstat (limited to 'llvm/lib/Option/Option.cpp')
| -rw-r--r-- | llvm/lib/Option/Option.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/llvm/lib/Option/Option.cpp b/llvm/lib/Option/Option.cpp index 1d6a3d38040..7b5ff2be9a7 100644 --- a/llvm/lib/Option/Option.cpp +++ b/llvm/lib/Option/Option.cpp @@ -52,6 +52,7 @@ void Option::dump() const { P(MultiArgClass); P(JoinedOrSeparateClass); P(JoinedAndSeparateClass); + P(RemainingArgsClass); #undef P } @@ -214,6 +215,16 @@ Arg *Option::accept(const ArgList &Args, return new Arg(UnaliasedOption, Spelling, Index - 2, Args.getArgString(Index - 2) + ArgSize, Args.getArgString(Index - 1)); + case RemainingArgsClass: { + // Matches iff this is an exact match. + // FIXME: Avoid strlen. + if (ArgSize != strlen(Args.getArgString(Index))) + return 0; + Arg *A = new Arg(UnaliasedOption, Spelling, Index++); + while (Index < Args.getNumInputArgStrings()) + A->getValues().push_back(Args.getArgString(Index++)); + return A; + } default: llvm_unreachable("Invalid option kind!"); } |

