diff options
| -rw-r--r-- | clang/include/clang/Driver/CC1Options.td | 14 | ||||
| -rw-r--r-- | clang/lib/Driver/DriverOptions.cpp | 11 | ||||
| -rw-r--r-- | clang/test/Driver/autocomplete.c | 2 | ||||
| -rw-r--r-- | llvm/include/llvm/Option/OptParser.td | 2 | ||||
| -rw-r--r-- | llvm/include/llvm/Option/OptTable.h | 15 | ||||
| -rw-r--r-- | llvm/lib/Option/OptTable.cpp | 25 | ||||
| -rw-r--r-- | llvm/utils/TableGen/OptParserEmitter.cpp | 26 |
7 files changed, 10 insertions, 85 deletions
diff --git a/clang/include/clang/Driver/CC1Options.td b/clang/include/clang/Driver/CC1Options.td index 74e4fb60eef..c53d7a9136a 100644 --- a/clang/include/clang/Driver/CC1Options.td +++ b/clang/include/clang/Driver/CC1Options.td @@ -99,19 +99,7 @@ def analyzer_stats : Flag<["-"], "analyzer-stats">, HelpText<"Print internal analyzer statistics.">; def analyzer_checker : Separate<["-"], "analyzer-checker">, - HelpText<"Choose analyzer checkers to enable">, - ValuesCode<[{ - const char *Values = - #define GET_CHECKERS - #define CHECKER(FULLNAME, CLASS, DESCFILE, HT, G, H) FULLNAME "," - #include "clang/StaticAnalyzer/Checkers/Checkers.inc" - #undef GET_CHECKERS - #define GET_PACKAGES - #define PACKAGE(FULLNAME, G, D) FULLNAME "," - #include "clang/StaticAnalyzer/Checkers/Checkers.inc" - #undef GET_PACKAGES - ; - }]>; + HelpText<"Choose analyzer checkers to enable">; def analyzer_checker_EQ : Joined<["-"], "analyzer-checker=">, Alias<analyzer_checker>; diff --git a/clang/lib/Driver/DriverOptions.cpp b/clang/lib/Driver/DriverOptions.cpp index 11e7e4c8fe2..ac63b96cf96 100644 --- a/clang/lib/Driver/DriverOptions.cpp +++ b/clang/lib/Driver/DriverOptions.cpp @@ -11,7 +11,6 @@ #include "llvm/ADT/STLExtras.h" #include "llvm/Option/OptTable.h" #include "llvm/Option/Option.h" -#include <cassert> using namespace clang::driver; using namespace clang::driver::options; @@ -41,13 +40,5 @@ public: } std::unique_ptr<OptTable> clang::driver::createDriverOptTable() { - auto Result = llvm::make_unique<DriverOptTable>(); - // Options.inc is included in DriverOptions.cpp, and calls OptTable's - // addValues function. - // Opt is a variable used in the code fragment in Options.inc. - OptTable &Opt = *Result; -#define OPTTABLE_ARG_INIT -#include "clang/Driver/Options.inc" -#undef OPTTABLE_ARG_INIT - return std::move(Result); + return llvm::make_unique<DriverOptTable>(); } diff --git a/clang/test/Driver/autocomplete.c b/clang/test/Driver/autocomplete.c index 06e700f1ac8..5680801a64a 100644 --- a/clang/test/Driver/autocomplete.c +++ b/clang/test/Driver/autocomplete.c @@ -93,5 +93,3 @@ // WARNING-NEXT: -Wmax-unsigned-zero // RUN: %clang --autocomplete=-Wno-invalid-pp- | FileCheck %s -check-prefix=NOWARNING // NOWARNING: -Wno-invalid-pp-token -// RUN: %clang --autocomplete=-analyzer-checker, | FileCheck %s -check-prefix=ANALYZER -// ANALYZER: unix.Malloc diff --git a/llvm/include/llvm/Option/OptParser.td b/llvm/include/llvm/Option/OptParser.td index 9c373741770..48122369871 100644 --- a/llvm/include/llvm/Option/OptParser.td +++ b/llvm/include/llvm/Option/OptParser.td @@ -93,7 +93,6 @@ class Option<list<string> prefixes, string name, OptionKind kind> { string HelpText = ?; string MetaVarName = ?; string Values = ?; - code ValuesCode = ?; list<OptionFlag> Flags = []; OptionGroup Group = ?; Option Alias = ?; @@ -129,7 +128,6 @@ class Group<OptionGroup group> { OptionGroup Group = group; } class HelpText<string text> { string HelpText = text; } class MetaVarName<string name> { string MetaVarName = name; } class Values<string value> { string Values = value; } -class ValuesCode<code valuecode> { code ValuesCode = valuecode; } // Predefined options. diff --git a/llvm/include/llvm/Option/OptTable.h b/llvm/include/llvm/Option/OptTable.h index 57a6954f487..6acece96703 100644 --- a/llvm/include/llvm/Option/OptTable.h +++ b/llvm/include/llvm/Option/OptTable.h @@ -57,8 +57,8 @@ public: }; private: - /// \brief The option information table. - std::vector<Info> OptionInfos; + /// \brief The static option information table. + ArrayRef<Info> OptionInfos; bool IgnoreCase; unsigned TheInputOptionID = 0; @@ -143,17 +143,6 @@ public: std::vector<std::string> findByPrefix(StringRef Cur, unsigned short DisableFlags) const; - /// Add Values to Option's Values class - /// - /// \param [in] Option - Prefix + Name of the flag which Values will be - /// changed. For example, "-analyzer-checker". - /// \param [in] Values - String of Values seperated by ",", such as - /// "foo, bar..", where foo and bar is the argument which the Option flag - /// takes - /// - /// \return true in success, and false in fail. - bool addValues(const char *Option, const char *Values); - /// \brief Parse a single argument; returning the new argument and /// updating Index. /// diff --git a/llvm/lib/Option/OptTable.cpp b/llvm/lib/Option/OptTable.cpp index d4486c6e8fd..7910bea0dcc 100644 --- a/llvm/lib/Option/OptTable.cpp +++ b/llvm/lib/Option/OptTable.cpp @@ -196,7 +196,7 @@ static unsigned matchOption(const OptTable::Info *I, StringRef Str, // Returns true if one of the Prefixes + In.Names matches Option static bool optionMatches(const OptTable::Info &In, StringRef Option) { - if (In.Prefixes) + if (In.Values && In.Prefixes) for (size_t I = 0; In.Prefixes[I]; I++) if (Option == std::string(In.Prefixes[I]) + In.Name) return true; @@ -209,9 +209,8 @@ static bool optionMatches(const OptTable::Info &In, StringRef Option) { std::vector<std::string> OptTable::suggestValueCompletions(StringRef Option, StringRef Arg) const { // Search all options and return possible values. - for (size_t I = FirstSearchableIndex, E = OptionInfos.size(); I < E; I++) { - const Info &In = OptionInfos[I]; - if (!In.Values || !optionMatches(In, Option)) + for (const Info &In : OptionInfos.slice(FirstSearchableIndex)) { + if (!optionMatches(In, Option)) continue; SmallVector<StringRef, 8> Candidates; @@ -229,8 +228,7 @@ OptTable::suggestValueCompletions(StringRef Option, StringRef Arg) const { std::vector<std::string> OptTable::findByPrefix(StringRef Cur, unsigned short DisableFlags) const { std::vector<std::string> Ret; - for (size_t I = FirstSearchableIndex, E = OptionInfos.size(); I < E; I++) { - const Info &In = OptionInfos[I]; + for (const Info &In : OptionInfos.slice(FirstSearchableIndex)) { if (!In.Prefixes || (!In.HelpText && !In.GroupID)) continue; if (In.Flags & DisableFlags) @@ -247,17 +245,6 @@ OptTable::findByPrefix(StringRef Cur, unsigned short DisableFlags) const { return Ret; } -bool OptTable::addValues(const char *Option, const char *Values) { - for (size_t I = FirstSearchableIndex, E = OptionInfos.size(); I < E; I++) { - Info &In = OptionInfos[I]; - if (optionMatches(In, Option)) { - In.Values = Values; - return true; - } - } - return false; -} - Arg *OptTable::ParseOneArg(const ArgList &Args, unsigned &Index, unsigned FlagsToInclude, unsigned FlagsToExclude) const { @@ -269,8 +256,8 @@ Arg *OptTable::ParseOneArg(const ArgList &Args, unsigned &Index, if (isInput(PrefixesUnion, Str)) return new Arg(getOption(TheInputOptionID), Str, Index++, Str); - const Info *Start = OptionInfos.data() + FirstSearchableIndex; - const Info *End = OptionInfos.data() + OptionInfos.size(); + const Info *Start = OptionInfos.begin() + FirstSearchableIndex; + const Info *End = OptionInfos.end(); StringRef Name = StringRef(Str).ltrim(PrefixChars); // Search for the first next option which could be a prefix. diff --git a/llvm/utils/TableGen/OptParserEmitter.cpp b/llvm/utils/TableGen/OptParserEmitter.cpp index ce0541d9794..e3777d036a2 100644 --- a/llvm/utils/TableGen/OptParserEmitter.cpp +++ b/llvm/utils/TableGen/OptParserEmitter.cpp @@ -298,31 +298,5 @@ void EmitOptParser(RecordKeeper &Records, raw_ostream &OS) { OS << ")\n"; } OS << "#endif // OPTION\n"; - - OS << "\n"; - OS << "#ifdef OPTTABLE_ARG_INIT\n"; - OS << "//////////\n"; - OS << "// Option Values\n\n"; - for (unsigned I = 0, E = Opts.size(); I != E; ++I) { - const Record &R = *Opts[I]; - if (isa<UnsetInit>(R.getValueInit("ValuesCode"))) - continue; - OS << "{\n"; - OS << R.getValueAsString("ValuesCode"); - OS << "\n"; - for (const std::string &Pref : R.getValueAsListOfStrings("Prefixes")) { - OS << "bool ValuesWereAdded = "; - OS << "Opt.addValues("; - std::string S = (Pref + R.getValueAsString("Name")).str(); - write_cstring(OS, S); - OS << ", Values);\n"; - OS << "(void)ValuesWereAdded;\n"; - OS << "assert(ValuesWereAdded && \"Couldn't add values to " - "OptTable!\");\n"; - } - OS << "}\n"; - } - OS << "\n"; - OS << "#endif // OPTTABLE_ARG_INIT\n"; } } // end namespace llvm |

