LLVM 20.0.0git
ArchiveEmitter.cpp
Go to the documentation of this file.
1//===- ArchiveEmitter.cpp ---------------------------- --------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
11#include "llvm/Support/Error.h"
13
14using namespace llvm;
15using namespace ArchYAML;
16
17namespace llvm {
18namespace yaml {
19
21 Out.write(Doc.Magic.data(), Doc.Magic.size());
22
23 if (Doc.Content) {
24 Doc.Content->writeAsBinary(Out);
25 return true;
26 }
27
28 if (!Doc.Members)
29 return true;
30
31 auto WriteField = [&](StringRef Field, uint8_t Size) {
32 Out.write(Field.data(), Field.size());
33 for (size_t I = Field.size(); I != Size; ++I)
34 Out.write(' ');
35 };
36
37 for (const Archive::Child &C : *Doc.Members) {
38 for (auto &P : C.Fields)
39 WriteField(P.second.Value, P.second.MaxLength);
40
41 if (C.Content)
42 C.Content->writeAsBinary(Out);
43 if (C.PaddingByte)
44 Out.write(*C.PaddingByte);
45 }
46
47 return true;
48}
49
50} // namespace yaml
51} // namespace llvm
This file declares classes for handling the YAML representation of archives.
uint64_t Size
#define I(x, y, z)
Definition: MD5.cpp:58
OptimizedStructLayoutField Field
#define P(N)
StringRef - Represent a constant reference to a string, i.e.
Definition: StringRef.h:50
constexpr size_t size() const
size - Get the string size.
Definition: StringRef.h:137
constexpr const char * data() const
data - Get a pointer to the start of the string (which may not be null terminated).
Definition: StringRef.h:131
An efficient, type-erasing, non-owning reference to a callable.
This class implements an extremely fast bulk output stream that can only output to a stream.
Definition: raw_ostream.h:52
raw_ostream & write(unsigned char C)
@ C
The default llvm calling convention, compatible with C.
Definition: CallingConv.h:34
bool yaml2archive(ArchYAML::Archive &Doc, raw_ostream &Out, ErrorHandler EH)
This is an optimization pass for GlobalISel generic memory operations.
Definition: AddressRanges.h:18
std::optional< yaml::BinaryRef > Content
Definition: ArchiveYAML.h:54
std::optional< std::vector< Child > > Members
Definition: ArchiveYAML.h:53
Common declarations for yaml2obj.