opnsense-src/contrib/llvm-project/llvm/lib/ObjectYAML/ArchiveYAML.cpp
Dimitry Andric e8d8bef961 Merge llvm-project main llvmorg-12-init-17869-g8e464dd76bef
This updates llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and
openmp to llvmorg-12-init-17869-g8e464dd76bef, the last commit before the
upstream release/12.x branch was created.

PR:		255570
MFC after:	6 weeks
2021-06-13 21:37:19 +02:00

58 lines
2 KiB
C++

//===- ArchiveYAML.cpp - ELF YAMLIO implementation -------------------- ----===//
//
// 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
//
//===----------------------------------------------------------------------===//
//
// This file defines classes for handling the YAML representation of archives.
//
//===----------------------------------------------------------------------===//
#include "llvm/ObjectYAML/ArchiveYAML.h"
namespace llvm {
namespace yaml {
void MappingTraits<ArchYAML::Archive>::mapping(IO &IO, ArchYAML::Archive &A) {
assert(!IO.getContext() && "The IO context is initialized already");
IO.setContext(&A);
IO.mapTag("!Arch", true);
IO.mapOptional("Magic", A.Magic, "!<arch>\n");
IO.mapOptional("Members", A.Members);
IO.mapOptional("Content", A.Content);
IO.setContext(nullptr);
}
std::string MappingTraits<ArchYAML::Archive>::validate(IO &,
ArchYAML::Archive &A) {
if (A.Members && A.Content)
return "\"Content\" and \"Members\" cannot be used together";
return "";
}
void MappingTraits<ArchYAML::Archive::Child>::mapping(
IO &IO, ArchYAML::Archive::Child &E) {
assert(IO.getContext() && "The IO context is not initialized");
for (auto &P : E.Fields)
IO.mapOptional(P.first.data(), P.second.Value, P.second.DefaultValue);
IO.mapOptional("Content", E.Content);
IO.mapOptional("PaddingByte", E.PaddingByte);
}
std::string
MappingTraits<ArchYAML::Archive::Child>::validate(IO &,
ArchYAML::Archive::Child &C) {
for (auto &P : C.Fields)
if (P.second.Value.size() > P.second.MaxLength)
return ("the maximum length of \"" + P.first + "\" field is " +
Twine(P.second.MaxLength))
.str();
return "";
}
} // end namespace yaml
} // end namespace llvm