12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- //===- 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
|