diff options
Diffstat (limited to 'clang/lib/Options')
| -rw-r--r-- | clang/lib/Options/CMakeLists.txt | 18 | ||||
| -rw-r--r-- | clang/lib/Options/DriverOptions.cpp | 51 | ||||
| -rw-r--r-- | clang/lib/Options/OptionUtils.cpp | 47 |
3 files changed, 116 insertions, 0 deletions
diff --git a/clang/lib/Options/CMakeLists.txt b/clang/lib/Options/CMakeLists.txt new file mode 100644 index 0000000..a762e99 --- /dev/null +++ b/clang/lib/Options/CMakeLists.txt @@ -0,0 +1,18 @@ +set(LLVM_LINK_COMPONENTS + Option + Support +) + +add_clang_library(clangOptions + DriverOptions.cpp + OptionUtils.cpp + + DEPENDS + ClangDriverOptions + # These generated headers are included transitively. + target_parser_gen + + LINK_LIBS + clangBasic + ${system_libs} +) diff --git a/clang/lib/Options/DriverOptions.cpp b/clang/lib/Options/DriverOptions.cpp new file mode 100644 index 0000000..d91e929 --- /dev/null +++ b/clang/lib/Options/DriverOptions.cpp @@ -0,0 +1,51 @@ +//===--- DriverOptions.cpp - Driver Options Table -------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "clang/Options/Options.h" +#include "llvm/Option/OptTable.h" +#include <cassert> + +using namespace clang::options; +using namespace llvm::opt; + +#define OPTTABLE_STR_TABLE_CODE +#include "clang/Options/Options.inc" +#undef OPTTABLE_STR_TABLE_CODE + +#define OPTTABLE_VALUES_CODE +#include "clang/Options/Options.inc" +#undef OPTTABLE_VALUES_CODE + +#define OPTTABLE_PREFIXES_TABLE_CODE +#include "clang/Options/Options.inc" +#undef OPTTABLE_PREFIXES_TABLE_CODE + +#define OPTTABLE_PREFIXES_UNION_CODE +#include "clang/Options/Options.inc" +#undef OPTTABLE_PREFIXES_UNION_CODE + +static constexpr OptTable::Info InfoTable[] = { +#define OPTION(...) LLVM_CONSTRUCT_OPT_INFO(__VA_ARGS__), +#include "clang/Options/Options.inc" +#undef OPTION +}; + +namespace { + +class DriverOptTable : public PrecomputedOptTable { +public: + DriverOptTable() + : PrecomputedOptTable(OptionStrTable, OptionPrefixesTable, InfoTable, + OptionPrefixesUnion) {} +}; +} // anonymous namespace + +const llvm::opt::OptTable &clang::getDriverOptTable() { + static DriverOptTable Table; + return Table; +} diff --git a/clang/lib/Options/OptionUtils.cpp b/clang/lib/Options/OptionUtils.cpp new file mode 100644 index 0000000..fcafd3c --- /dev/null +++ b/clang/lib/Options/OptionUtils.cpp @@ -0,0 +1,47 @@ +//===--- OptionUtils.cpp - Utilities for command line arguments -----------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "clang/Options/OptionUtils.h" +#include "clang/Basic/Diagnostic.h" +#include "clang/Basic/DiagnosticDriver.h" +#include "llvm/Option/ArgList.h" + +using namespace clang; +using namespace llvm::opt; + +namespace { +template <typename IntTy> +IntTy getLastArgIntValueImpl(const ArgList &Args, OptSpecifier Id, + IntTy Default, DiagnosticsEngine *Diags, + unsigned Base) { + IntTy Res = Default; + if (Arg *A = Args.getLastArg(Id)) { + if (StringRef(A->getValue()).getAsInteger(Base, Res)) { + if (Diags) + Diags->Report(diag::err_drv_invalid_int_value) + << A->getAsString(Args) << A->getValue(); + } + } + return Res; +} +} // namespace + +namespace clang { + +int getLastArgIntValue(const ArgList &Args, OptSpecifier Id, int Default, + DiagnosticsEngine *Diags, unsigned Base) { + return getLastArgIntValueImpl<int>(Args, Id, Default, Diags, Base); +} + +uint64_t getLastArgUInt64Value(const ArgList &Args, OptSpecifier Id, + uint64_t Default, DiagnosticsEngine *Diags, + unsigned Base) { + return getLastArgIntValueImpl<uint64_t>(Args, Id, Default, Diags, Base); +} + +} // namespace clang |
