1*da58b97aSjoerg //===- ArchiveEmitter.cpp ---------------------------- --------------------===// 2*da58b97aSjoerg // 3*da58b97aSjoerg // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*da58b97aSjoerg // See https://llvm.org/LICENSE.txt for license information. 5*da58b97aSjoerg // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*da58b97aSjoerg // 7*da58b97aSjoerg //===----------------------------------------------------------------------===// 8*da58b97aSjoerg 9*da58b97aSjoerg #include "llvm/ObjectYAML/ArchiveYAML.h" 10*da58b97aSjoerg #include "llvm/ObjectYAML/yaml2obj.h" 11*da58b97aSjoerg #include "llvm/Support/Error.h" 12*da58b97aSjoerg #include "llvm/Support/raw_ostream.h" 13*da58b97aSjoerg 14*da58b97aSjoerg using namespace llvm; 15*da58b97aSjoerg using namespace ArchYAML; 16*da58b97aSjoerg 17*da58b97aSjoerg namespace llvm { 18*da58b97aSjoerg namespace yaml { 19*da58b97aSjoerg yaml2archive(ArchYAML::Archive & Doc,raw_ostream & Out,ErrorHandler EH)20*da58b97aSjoergbool yaml2archive(ArchYAML::Archive &Doc, raw_ostream &Out, ErrorHandler EH) { 21*da58b97aSjoerg Out.write(Doc.Magic.data(), Doc.Magic.size()); 22*da58b97aSjoerg 23*da58b97aSjoerg if (Doc.Content) { 24*da58b97aSjoerg Doc.Content->writeAsBinary(Out); 25*da58b97aSjoerg return true; 26*da58b97aSjoerg } 27*da58b97aSjoerg 28*da58b97aSjoerg if (!Doc.Members) 29*da58b97aSjoerg return true; 30*da58b97aSjoerg 31*da58b97aSjoerg auto WriteField = [&](StringRef Field, uint8_t Size) { 32*da58b97aSjoerg Out.write(Field.data(), Field.size()); 33*da58b97aSjoerg for (size_t I = Field.size(); I != Size; ++I) 34*da58b97aSjoerg Out.write(' '); 35*da58b97aSjoerg }; 36*da58b97aSjoerg 37*da58b97aSjoerg for (const Archive::Child &C : *Doc.Members) { 38*da58b97aSjoerg for (auto &P : C.Fields) 39*da58b97aSjoerg WriteField(P.second.Value, P.second.MaxLength); 40*da58b97aSjoerg 41*da58b97aSjoerg if (C.Content) 42*da58b97aSjoerg C.Content->writeAsBinary(Out); 43*da58b97aSjoerg if (C.PaddingByte) 44*da58b97aSjoerg Out.write(*C.PaddingByte); 45*da58b97aSjoerg } 46*da58b97aSjoerg 47*da58b97aSjoerg return true; 48*da58b97aSjoerg } 49*da58b97aSjoerg 50*da58b97aSjoerg } // namespace yaml 51*da58b97aSjoerg } // namespace llvm 52