//===- WasmReader.cpp -----------------------------------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//

#include "WasmReader.h"

namespace llvm {
namespace objcopy {
namespace wasm {

using namespace object;
using namespace llvm::wasm;

Expected<std::unique_ptr<Object>> Reader::create() const {
  auto Obj = std::make_unique<Object>();
  Obj->Header = WasmObj.getHeader();
  Obj->isRelocatableObject = WasmObj.isRelocatableObject();
  Obj->Sections.reserve(WasmObj.getNumSections());
  for (const SectionRef &Sec : WasmObj.sections()) {
    const WasmSection &WS = WasmObj.getWasmSection(Sec);
    Obj->Sections.push_back({static_cast<uint8_t>(WS.Type),
                             WS.HeaderSecSizeEncodingLen, WS.Name, WS.Content});
    // Give known sections standard names to allow them to be selected. (Custom
    // sections already have their names filled in by the parser).
    Section &ReaderSec = Obj->Sections.back();
    if (ReaderSec.SectionType > WASM_SEC_CUSTOM &&
        ReaderSec.SectionType <= WASM_SEC_LAST_KNOWN)
      ReaderSec.Name = sectionTypeToString(ReaderSec.SectionType);
  }
  return std::move(Obj);
}

} // end namespace wasm
} // end namespace objcopy
} // end namespace llvm
