File: ArchiveYAML.cpp

package info (click to toggle)
llvm-toolchain-17 1%3A17.0.6-22
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,799,624 kB
  • sloc: cpp: 6,428,607; ansic: 1,383,196; asm: 793,408; python: 223,504; objc: 75,364; f90: 60,502; lisp: 33,869; pascal: 15,282; sh: 9,684; perl: 7,453; ml: 4,937; awk: 3,523; makefile: 2,889; javascript: 2,149; xml: 888; fortran: 619; cs: 573
file content (58 lines) | stat: -rw-r--r-- 2,003 bytes parent folder | download | duplicates (24)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
//===- 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