aboutsummaryrefslogtreecommitdiff
path: root/contrib/llvm-project/clang/include/clang/Basic/HeaderInclude.h
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/llvm-project/clang/include/clang/Basic/HeaderInclude.h')
-rw-r--r--contrib/llvm-project/clang/include/clang/Basic/HeaderInclude.h73
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