diff options
Diffstat (limited to 'contrib/llvm-project/clang/include/clang/Basic/HeaderInclude.h')
-rw-r--r-- | contrib/llvm-project/clang/include/clang/Basic/HeaderInclude.h | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/contrib/llvm-project/clang/include/clang/Basic/HeaderInclude.h b/contrib/llvm-project/clang/include/clang/Basic/HeaderInclude.h new file mode 100644 index 000000000000..83c26543bbd3 --- /dev/null +++ b/contrib/llvm-project/clang/include/clang/Basic/HeaderInclude.h @@ -0,0 +1,73 @@ +//===--- HeaderInclude.h - Header Include -----------------------*- C++ -*-===// +// +// 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 +// +//===----------------------------------------------------------------------===// +/// +/// \file +/// Defines enums used when emitting included header information. +/// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_CLANG_BASIC_HEADERINCLUDEFORMATKIND_H +#define LLVM_CLANG_BASIC_HEADERINCLUDEFORMATKIND_H +#include "llvm/ADT/StringSwitch.h" +#include "llvm/Support/ErrorHandling.h" +#include <utility> + +namespace clang { +/// The format in which header information is emitted. +enum HeaderIncludeFormatKind { HIFMT_None, HIFMT_Textual, HIFMT_JSON }; + +/// Whether header information is filtered or not. If HIFIL_Only_Direct_System +/// is used, only information on system headers directly included from +/// non-system headers is emitted. +enum HeaderIncludeFilteringKind { HIFIL_None, HIFIL_Only_Direct_System }; + +inline HeaderIncludeFormatKind +stringToHeaderIncludeFormatKind(const char *Str) { + return llvm::StringSwitch<HeaderIncludeFormatKind>(Str) + .Case("textual", HIFMT_Textual) + .Case("json", HIFMT_JSON) + .Default(HIFMT_None); +} + +inline bool stringToHeaderIncludeFiltering(const char *Str, + HeaderIncludeFilteringKind &Kind) { + std::pair<bool, HeaderIncludeFilteringKind> P = + llvm::StringSwitch<std::pair<bool, HeaderIncludeFilteringKind>>(Str) + .Case("none", {true, HIFIL_None}) + .Case("only-direct-system", {true, HIFIL_Only_Direct_System}) + .Default({false, HIFIL_None}); + Kind = P.second; + return P.first; +} + +inline const char *headerIncludeFormatKindToString(HeaderIncludeFormatKind K) { + switch (K) { + case HIFMT_None: + llvm_unreachable("unexpected format kind"); + case HIFMT_Textual: + return "textual"; + case HIFMT_JSON: + return "json"; + } + llvm_unreachable("Unknown HeaderIncludeFormatKind enum"); +} + +inline const char * +headerIncludeFilteringKindToString(HeaderIncludeFilteringKind K) { + switch (K) { + case HIFIL_None: + return "none"; + case HIFIL_Only_Direct_System: + return "only-direct-system"; + } + llvm_unreachable("Unknown HeaderIncludeFilteringKind enum"); +} + +} // end namespace clang + +#endif // LLVM_CLANG_BASIC_HEADERINCLUDEFORMATKIND_H |