#include "clang/APINotes/APINotesYAMLCompiler.h"
#include "clang/APINotes/APINotesWriter.h"
#include "clang/APINotes/Types.h"
#include "clang/Basic/LLVM.h"
#include "clang/Basic/Specifiers.h"
#include "llvm/ADT/StringSet.h"
#include "llvm/Support/SourceMgr.h"
#include "llvm/Support/VersionTuple.h"
#include "llvm/Support/YAMLTraits.h"
#include <optional>
#include <vector>
usingnamespaceclang;
usingnamespaceapi_notes;
namespace {
enum class APIAvailability { … };
}
namespace llvm {
namespace yaml {
template <> struct ScalarEnumerationTraits<APIAvailability> { … };
}
}
namespace {
enum class MethodKind { … };
}
namespace llvm {
namespace yaml {
template <> struct ScalarEnumerationTraits<MethodKind> { … };
}
}
namespace {
struct Param { … };
ParamsSeq;
}
LLVM_YAML_IS_SEQUENCE_VECTOR(Param)
LLVM_YAML_IS_FLOW_SEQUENCE_VECTOR(NullabilityKind)
namespace llvm {
namespace yaml {
template <> struct ScalarEnumerationTraits<NullabilityKind> { … };
template <> struct ScalarEnumerationTraits<RetainCountConventionKind> { … };
template <> struct MappingTraits<Param> { … };
}
}
namespace {
NullabilitySeq;
struct AvailabilityItem { … };
enum class FactoryAsInitKind { … };
struct Method { … };
MethodsSeq;
}
LLVM_YAML_IS_SEQUENCE_VECTOR(Method)
namespace llvm {
namespace yaml {
template <> struct ScalarEnumerationTraits<FactoryAsInitKind> { … };
template <> struct MappingTraits<Method> { … };
}
}
namespace {
struct Property { … };
PropertiesSeq;
}
LLVM_YAML_IS_SEQUENCE_VECTOR(Property)
namespace llvm {
namespace yaml {
template <> struct MappingTraits<Property> { … };
}
}
namespace {
struct Class { … };
ClassesSeq;
}
LLVM_YAML_IS_SEQUENCE_VECTOR(Class)
namespace llvm {
namespace yaml {
template <> struct MappingTraits<Class> { … };
}
}
namespace {
struct Function { … };
FunctionsSeq;
}
LLVM_YAML_IS_SEQUENCE_VECTOR(Function)
namespace llvm {
namespace yaml {
template <> struct MappingTraits<Function> { … };
}
}
namespace {
struct GlobalVariable { … };
GlobalVariablesSeq;
}
LLVM_YAML_IS_SEQUENCE_VECTOR(GlobalVariable)
namespace llvm {
namespace yaml {
template <> struct MappingTraits<GlobalVariable> { … };
}
}
namespace {
struct EnumConstant { … };
EnumConstantsSeq;
}
LLVM_YAML_IS_SEQUENCE_VECTOR(EnumConstant)
namespace llvm {
namespace yaml {
template <> struct MappingTraits<EnumConstant> { … };
}
}
namespace {
enum class EnumConvenienceAliasKind { … };
}
namespace llvm {
namespace yaml {
template <> struct ScalarEnumerationTraits<EnumConvenienceAliasKind> { … };
}
}
namespace {
struct Field { … };
FieldsSeq;
}
LLVM_YAML_IS_SEQUENCE_VECTOR(Field)
namespace llvm {
namespace yaml {
template <> struct MappingTraits<Field> { … };
}
}
namespace {
struct Tag;
TagsSeq;
struct Tag { … };
}
LLVM_YAML_IS_SEQUENCE_VECTOR(Tag)
namespace llvm {
namespace yaml {
template <> struct ScalarEnumerationTraits<EnumExtensibilityKind> { … };
template <> struct MappingTraits<Tag> { … };
}
}
namespace {
struct Typedef { … };
TypedefsSeq;
}
LLVM_YAML_IS_SEQUENCE_VECTOR(Typedef)
namespace llvm {
namespace yaml {
template <> struct ScalarEnumerationTraits<SwiftNewTypeKind> { … };
template <> struct MappingTraits<Typedef> { … };
}
}
namespace {
struct Namespace;
NamespacesSeq;
struct TopLevelItems { … };
}
namespace llvm {
namespace yaml {
static void mapTopLevelItems(IO &IO, TopLevelItems &TLI) { … }
}
}
namespace {
struct Namespace { … };
}
LLVM_YAML_IS_SEQUENCE_VECTOR(Namespace)
namespace llvm {
namespace yaml {
template <> struct MappingTraits<Namespace> { … };
}
}
namespace {
struct Versioned { … };
VersionedSeq;
}
LLVM_YAML_IS_SEQUENCE_VECTOR(Versioned)
namespace llvm {
namespace yaml {
template <> struct MappingTraits<Versioned> { … };
}
}
namespace {
struct Module { … };
}
namespace llvm {
namespace yaml {
template <> struct MappingTraits<Module> { … };
}
}
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
LLVM_DUMP_METHOD void Module::dump() {
llvm::yaml::Output OS(llvm::errs());
OS << *this;
}
#endif
namespace {
bool parseAPINotes(StringRef YI, Module &M, llvm::SourceMgr::DiagHandlerTy Diag,
void *DiagContext) { … }
}
bool clang::api_notes::parseAndDumpAPINotes(StringRef YI,
llvm::raw_ostream &OS) { … }
namespace {
usingnamespaceapi_notes;
class YAMLConverter { … };
}
static bool compile(const Module &M, const FileEntry *SourceFile,
llvm::raw_ostream &OS,
llvm::SourceMgr::DiagHandlerTy DiagHandler,
void *DiagHandlerCtxt) { … }
static void printDiagnostic(const llvm::SMDiagnostic &Diag, void *Context) { … }
bool api_notes::compileAPINotes(StringRef YAMLInput,
const FileEntry *SourceFile,
llvm::raw_ostream &OS,
llvm::SourceMgr::DiagHandlerTy DiagHandler,
void *DiagHandlerCtxt) { … }