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/unittests/Option | |
| 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/unittests/Option')
| -rw-r--r-- | llvm/unittests/Option/OptionParsingTest.cpp | 27 | ||||
| -rw-r--r-- | llvm/unittests/Option/Opts.td | 2 |
2 files changed, 29 insertions, 0 deletions
diff --git a/llvm/unittests/Option/OptionParsingTest.cpp b/llvm/unittests/Option/OptionParsingTest.cpp index 5a76d65d0fa..4a7b7b1106d 100644 --- a/llvm/unittests/Option/OptionParsingTest.cpp +++ b/llvm/unittests/Option/OptionParsingTest.cpp @@ -169,3 +169,30 @@ TEST(Option, DashDash) { EXPECT_EQ(AL->getAllArgValues(OPT_INPUT)[0], "-B"); EXPECT_EQ(AL->getAllArgValues(OPT_INPUT)[1], "--"); } + +TEST(Option, SlurpEmpty) { + TestOptTable T; + unsigned MAI, MAC; + + const char *MyArgs[] = { "-A", "-slurp" }; + OwningPtr<InputArgList> AL(T.ParseArgs(MyArgs, array_endof(MyArgs), MAI, MAC)); + EXPECT_TRUE(AL->hasArg(OPT_A)); + EXPECT_TRUE(AL->hasArg(OPT_Slurp)); + EXPECT_EQ(AL->getAllArgValues(OPT_Slurp).size(), 0); +} + +TEST(Option, Slurp) { + TestOptTable T; + unsigned MAI, MAC; + + const char *MyArgs[] = { "-A", "-slurp", "-B", "--", "foo" }; + OwningPtr<InputArgList> AL(T.ParseArgs(MyArgs, array_endof(MyArgs), MAI, MAC)); + EXPECT_EQ(AL->size(), 2U); + EXPECT_TRUE(AL->hasArg(OPT_A)); + EXPECT_FALSE(AL->hasArg(OPT_B)); + EXPECT_TRUE(AL->hasArg(OPT_Slurp)); + EXPECT_EQ(AL->getAllArgValues(OPT_Slurp).size(), 3U); + EXPECT_EQ(AL->getAllArgValues(OPT_Slurp)[0], "-B"); + EXPECT_EQ(AL->getAllArgValues(OPT_Slurp)[1], "--"); + EXPECT_EQ(AL->getAllArgValues(OPT_Slurp)[2], "foo"); +} diff --git a/llvm/unittests/Option/Opts.td b/llvm/unittests/Option/Opts.td index 986b3122af7..aaed6b2101e 100644 --- a/llvm/unittests/Option/Opts.td +++ b/llvm/unittests/Option/Opts.td @@ -22,3 +22,5 @@ def I : Flag<["-"], "I">, Alias<H>, Group<my_group>; def J : Flag<["-"], "J">, Alias<B>, AliasArgs<["foo"]>; def Joo : Flag<["-"], "Joo">, Alias<B>, AliasArgs<["bar"]>; + +def Slurp : Option<["-"], "slurp", KIND_REMAINING_ARGS>; |

