brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.3 KiB · 238e6f3 Raw
51 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9#include "llvm/ObjectYAML/ArchiveYAML.h"10#include "llvm/ObjectYAML/yaml2obj.h"11#include "llvm/Support/raw_ostream.h"12 13using namespace llvm;14using namespace ArchYAML;15 16namespace llvm {17namespace yaml {18 19bool yaml2archive(ArchYAML::Archive &Doc, raw_ostream &Out, ErrorHandler EH) {20  Out.write(Doc.Magic.data(), Doc.Magic.size());21 22  if (Doc.Content) {23    Doc.Content->writeAsBinary(Out);24    return true;25  }26 27  if (!Doc.Members)28    return true;29 30  auto WriteField = [&](StringRef Field, uint8_t Size) {31    Out.write(Field.data(), Field.size());32    for (size_t I = Field.size(); I != Size; ++I)33      Out.write(' ');34  };35 36  for (const Archive::Child &C : *Doc.Members) {37    for (auto &P : C.Fields)38      WriteField(P.second.Value, P.second.MaxLength);39 40    if (C.Content)41      C.Content->writeAsBinary(Out);42    if (C.PaddingByte)43      Out.write(*C.PaddingByte);44  }45 46  return true;47}48 49} // namespace yaml50} // namespace llvm51