10b57cec5SDimitry Andric //===- WasmYAML.h - Wasm YAMLIO implementation ------------------*- C++ -*-===// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric /// 90b57cec5SDimitry Andric /// \file 100b57cec5SDimitry Andric /// This file declares classes for handling the YAML representation 110b57cec5SDimitry Andric /// of wasm binaries. 120b57cec5SDimitry Andric /// 130b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 140b57cec5SDimitry Andric 150b57cec5SDimitry Andric #ifndef LLVM_OBJECTYAML_WASMYAML_H 160b57cec5SDimitry Andric #define LLVM_OBJECTYAML_WASMYAML_H 170b57cec5SDimitry Andric 180b57cec5SDimitry Andric #include "llvm/ADT/StringRef.h" 190b57cec5SDimitry Andric #include "llvm/BinaryFormat/Wasm.h" 200b57cec5SDimitry Andric #include "llvm/ObjectYAML/YAML.h" 210b57cec5SDimitry Andric #include "llvm/Support/Casting.h" 220b57cec5SDimitry Andric #include <cstdint> 230b57cec5SDimitry Andric #include <memory> 240b57cec5SDimitry Andric #include <vector> 250b57cec5SDimitry Andric 260b57cec5SDimitry Andric namespace llvm { 270b57cec5SDimitry Andric namespace WasmYAML { 280b57cec5SDimitry Andric 290b57cec5SDimitry Andric LLVM_YAML_STRONG_TYPEDEF(uint32_t, SectionType) 300b57cec5SDimitry Andric LLVM_YAML_STRONG_TYPEDEF(uint32_t, ValueType) 310b57cec5SDimitry Andric LLVM_YAML_STRONG_TYPEDEF(uint32_t, TableType) 320b57cec5SDimitry Andric LLVM_YAML_STRONG_TYPEDEF(uint32_t, SignatureForm) 330b57cec5SDimitry Andric LLVM_YAML_STRONG_TYPEDEF(uint32_t, ExportKind) 340b57cec5SDimitry Andric LLVM_YAML_STRONG_TYPEDEF(uint32_t, Opcode) 350b57cec5SDimitry Andric LLVM_YAML_STRONG_TYPEDEF(uint32_t, RelocType) 360b57cec5SDimitry Andric LLVM_YAML_STRONG_TYPEDEF(uint32_t, SymbolFlags) 370b57cec5SDimitry Andric LLVM_YAML_STRONG_TYPEDEF(uint32_t, SymbolKind) 380b57cec5SDimitry Andric LLVM_YAML_STRONG_TYPEDEF(uint32_t, SegmentFlags) 390b57cec5SDimitry Andric LLVM_YAML_STRONG_TYPEDEF(uint32_t, LimitFlags) 400b57cec5SDimitry Andric LLVM_YAML_STRONG_TYPEDEF(uint32_t, ComdatKind) 410b57cec5SDimitry Andric LLVM_YAML_STRONG_TYPEDEF(uint32_t, FeaturePolicyPrefix) 420b57cec5SDimitry Andric 430b57cec5SDimitry Andric struct FileHeader { 440b57cec5SDimitry Andric yaml::Hex32 Version; 450b57cec5SDimitry Andric }; 460b57cec5SDimitry Andric 470b57cec5SDimitry Andric struct Limits { 480b57cec5SDimitry Andric LimitFlags Flags; 490b57cec5SDimitry Andric yaml::Hex32 Initial; 500b57cec5SDimitry Andric yaml::Hex32 Maximum; 510b57cec5SDimitry Andric }; 520b57cec5SDimitry Andric 530b57cec5SDimitry Andric struct Table { 540b57cec5SDimitry Andric TableType ElemType; 550b57cec5SDimitry Andric Limits TableLimits; 560b57cec5SDimitry Andric }; 570b57cec5SDimitry Andric 580b57cec5SDimitry Andric struct Export { 590b57cec5SDimitry Andric StringRef Name; 600b57cec5SDimitry Andric ExportKind Kind; 610b57cec5SDimitry Andric uint32_t Index; 620b57cec5SDimitry Andric }; 630b57cec5SDimitry Andric 640b57cec5SDimitry Andric struct ElemSegment { 650b57cec5SDimitry Andric uint32_t TableIndex; 660b57cec5SDimitry Andric wasm::WasmInitExpr Offset; 670b57cec5SDimitry Andric std::vector<uint32_t> Functions; 680b57cec5SDimitry Andric }; 690b57cec5SDimitry Andric 700b57cec5SDimitry Andric struct Global { 710b57cec5SDimitry Andric uint32_t Index; 720b57cec5SDimitry Andric ValueType Type; 730b57cec5SDimitry Andric bool Mutable; 740b57cec5SDimitry Andric wasm::WasmInitExpr InitExpr; 750b57cec5SDimitry Andric }; 760b57cec5SDimitry Andric 770b57cec5SDimitry Andric struct Event { 780b57cec5SDimitry Andric uint32_t Index; 790b57cec5SDimitry Andric uint32_t Attribute; 800b57cec5SDimitry Andric uint32_t SigIndex; 810b57cec5SDimitry Andric }; 820b57cec5SDimitry Andric 830b57cec5SDimitry Andric struct Import { 840b57cec5SDimitry Andric StringRef Module; 850b57cec5SDimitry Andric StringRef Field; 860b57cec5SDimitry Andric ExportKind Kind; 870b57cec5SDimitry Andric union { 880b57cec5SDimitry Andric uint32_t SigIndex; 890b57cec5SDimitry Andric Global GlobalImport; 900b57cec5SDimitry Andric Table TableImport; 910b57cec5SDimitry Andric Limits Memory; 920b57cec5SDimitry Andric Event EventImport; 930b57cec5SDimitry Andric }; 940b57cec5SDimitry Andric }; 950b57cec5SDimitry Andric 960b57cec5SDimitry Andric struct LocalDecl { 970b57cec5SDimitry Andric ValueType Type; 980b57cec5SDimitry Andric uint32_t Count; 990b57cec5SDimitry Andric }; 1000b57cec5SDimitry Andric 1010b57cec5SDimitry Andric struct Function { 1020b57cec5SDimitry Andric uint32_t Index; 1030b57cec5SDimitry Andric std::vector<LocalDecl> Locals; 1040b57cec5SDimitry Andric yaml::BinaryRef Body; 1050b57cec5SDimitry Andric }; 1060b57cec5SDimitry Andric 1070b57cec5SDimitry Andric struct Relocation { 1080b57cec5SDimitry Andric RelocType Type; 1090b57cec5SDimitry Andric uint32_t Index; 1100b57cec5SDimitry Andric yaml::Hex32 Offset; 1110b57cec5SDimitry Andric int32_t Addend; 1120b57cec5SDimitry Andric }; 1130b57cec5SDimitry Andric 1140b57cec5SDimitry Andric struct DataSegment { 1150b57cec5SDimitry Andric uint32_t SectionOffset; 1160b57cec5SDimitry Andric uint32_t InitFlags; 1170b57cec5SDimitry Andric uint32_t MemoryIndex; 1180b57cec5SDimitry Andric wasm::WasmInitExpr Offset; 1190b57cec5SDimitry Andric yaml::BinaryRef Content; 1200b57cec5SDimitry Andric }; 1210b57cec5SDimitry Andric 1220b57cec5SDimitry Andric struct NameEntry { 1230b57cec5SDimitry Andric uint32_t Index; 1240b57cec5SDimitry Andric StringRef Name; 1250b57cec5SDimitry Andric }; 1260b57cec5SDimitry Andric 1270b57cec5SDimitry Andric struct ProducerEntry { 1280b57cec5SDimitry Andric std::string Name; 1290b57cec5SDimitry Andric std::string Version; 1300b57cec5SDimitry Andric }; 1310b57cec5SDimitry Andric 1320b57cec5SDimitry Andric struct FeatureEntry { 1330b57cec5SDimitry Andric FeaturePolicyPrefix Prefix; 1340b57cec5SDimitry Andric std::string Name; 1350b57cec5SDimitry Andric }; 1360b57cec5SDimitry Andric 1370b57cec5SDimitry Andric struct SegmentInfo { 1380b57cec5SDimitry Andric uint32_t Index; 1390b57cec5SDimitry Andric StringRef Name; 1400b57cec5SDimitry Andric uint32_t Alignment; 1410b57cec5SDimitry Andric SegmentFlags Flags; 1420b57cec5SDimitry Andric }; 1430b57cec5SDimitry Andric 1440b57cec5SDimitry Andric struct Signature { 1450b57cec5SDimitry Andric uint32_t Index; 1460b57cec5SDimitry Andric SignatureForm Form = wasm::WASM_TYPE_FUNC; 1470b57cec5SDimitry Andric std::vector<ValueType> ParamTypes; 148*8bcb0991SDimitry Andric std::vector<ValueType> ReturnTypes; 1490b57cec5SDimitry Andric }; 1500b57cec5SDimitry Andric 1510b57cec5SDimitry Andric struct SymbolInfo { 1520b57cec5SDimitry Andric uint32_t Index; 1530b57cec5SDimitry Andric StringRef Name; 1540b57cec5SDimitry Andric SymbolKind Kind; 1550b57cec5SDimitry Andric SymbolFlags Flags; 1560b57cec5SDimitry Andric union { 1570b57cec5SDimitry Andric uint32_t ElementIndex; 1580b57cec5SDimitry Andric wasm::WasmDataReference DataRef; 1590b57cec5SDimitry Andric }; 1600b57cec5SDimitry Andric }; 1610b57cec5SDimitry Andric 1620b57cec5SDimitry Andric struct InitFunction { 1630b57cec5SDimitry Andric uint32_t Priority; 1640b57cec5SDimitry Andric uint32_t Symbol; 1650b57cec5SDimitry Andric }; 1660b57cec5SDimitry Andric 1670b57cec5SDimitry Andric struct ComdatEntry { 1680b57cec5SDimitry Andric ComdatKind Kind; 1690b57cec5SDimitry Andric uint32_t Index; 1700b57cec5SDimitry Andric }; 1710b57cec5SDimitry Andric 1720b57cec5SDimitry Andric struct Comdat { 1730b57cec5SDimitry Andric StringRef Name; 1740b57cec5SDimitry Andric std::vector<ComdatEntry> Entries; 1750b57cec5SDimitry Andric }; 1760b57cec5SDimitry Andric 1770b57cec5SDimitry Andric struct Section { 1780b57cec5SDimitry Andric explicit Section(SectionType SecType) : Type(SecType) {} 1790b57cec5SDimitry Andric virtual ~Section(); 1800b57cec5SDimitry Andric 1810b57cec5SDimitry Andric SectionType Type; 1820b57cec5SDimitry Andric std::vector<Relocation> Relocations; 1830b57cec5SDimitry Andric }; 1840b57cec5SDimitry Andric 1850b57cec5SDimitry Andric struct CustomSection : Section { 1860b57cec5SDimitry Andric explicit CustomSection(StringRef Name) 1870b57cec5SDimitry Andric : Section(wasm::WASM_SEC_CUSTOM), Name(Name) {} 1880b57cec5SDimitry Andric 1890b57cec5SDimitry Andric static bool classof(const Section *S) { 1900b57cec5SDimitry Andric return S->Type == wasm::WASM_SEC_CUSTOM; 1910b57cec5SDimitry Andric } 1920b57cec5SDimitry Andric 1930b57cec5SDimitry Andric StringRef Name; 1940b57cec5SDimitry Andric yaml::BinaryRef Payload; 1950b57cec5SDimitry Andric }; 1960b57cec5SDimitry Andric 1970b57cec5SDimitry Andric struct DylinkSection : CustomSection { 1980b57cec5SDimitry Andric DylinkSection() : CustomSection("dylink") {} 1990b57cec5SDimitry Andric 2000b57cec5SDimitry Andric static bool classof(const Section *S) { 2010b57cec5SDimitry Andric auto C = dyn_cast<CustomSection>(S); 2020b57cec5SDimitry Andric return C && C->Name == "dylink"; 2030b57cec5SDimitry Andric } 2040b57cec5SDimitry Andric 2050b57cec5SDimitry Andric uint32_t MemorySize; 2060b57cec5SDimitry Andric uint32_t MemoryAlignment; 2070b57cec5SDimitry Andric uint32_t TableSize; 2080b57cec5SDimitry Andric uint32_t TableAlignment; 2090b57cec5SDimitry Andric std::vector<StringRef> Needed; 2100b57cec5SDimitry Andric }; 2110b57cec5SDimitry Andric 2120b57cec5SDimitry Andric struct NameSection : CustomSection { 2130b57cec5SDimitry Andric NameSection() : CustomSection("name") {} 2140b57cec5SDimitry Andric 2150b57cec5SDimitry Andric static bool classof(const Section *S) { 2160b57cec5SDimitry Andric auto C = dyn_cast<CustomSection>(S); 2170b57cec5SDimitry Andric return C && C->Name == "name"; 2180b57cec5SDimitry Andric } 2190b57cec5SDimitry Andric 2200b57cec5SDimitry Andric std::vector<NameEntry> FunctionNames; 2210b57cec5SDimitry Andric }; 2220b57cec5SDimitry Andric 2230b57cec5SDimitry Andric struct LinkingSection : CustomSection { 2240b57cec5SDimitry Andric LinkingSection() : CustomSection("linking") {} 2250b57cec5SDimitry Andric 2260b57cec5SDimitry Andric static bool classof(const Section *S) { 2270b57cec5SDimitry Andric auto C = dyn_cast<CustomSection>(S); 2280b57cec5SDimitry Andric return C && C->Name == "linking"; 2290b57cec5SDimitry Andric } 2300b57cec5SDimitry Andric 2310b57cec5SDimitry Andric uint32_t Version; 2320b57cec5SDimitry Andric std::vector<SymbolInfo> SymbolTable; 2330b57cec5SDimitry Andric std::vector<SegmentInfo> SegmentInfos; 2340b57cec5SDimitry Andric std::vector<InitFunction> InitFunctions; 2350b57cec5SDimitry Andric std::vector<Comdat> Comdats; 2360b57cec5SDimitry Andric }; 2370b57cec5SDimitry Andric 2380b57cec5SDimitry Andric struct ProducersSection : CustomSection { 2390b57cec5SDimitry Andric ProducersSection() : CustomSection("producers") {} 2400b57cec5SDimitry Andric 2410b57cec5SDimitry Andric static bool classof(const Section *S) { 2420b57cec5SDimitry Andric auto C = dyn_cast<CustomSection>(S); 2430b57cec5SDimitry Andric return C && C->Name == "producers"; 2440b57cec5SDimitry Andric } 2450b57cec5SDimitry Andric 2460b57cec5SDimitry Andric std::vector<ProducerEntry> Languages; 2470b57cec5SDimitry Andric std::vector<ProducerEntry> Tools; 2480b57cec5SDimitry Andric std::vector<ProducerEntry> SDKs; 2490b57cec5SDimitry Andric }; 2500b57cec5SDimitry Andric 2510b57cec5SDimitry Andric struct TargetFeaturesSection : CustomSection { 2520b57cec5SDimitry Andric TargetFeaturesSection() : CustomSection("target_features") {} 2530b57cec5SDimitry Andric 2540b57cec5SDimitry Andric static bool classof(const Section *S) { 2550b57cec5SDimitry Andric auto C = dyn_cast<CustomSection>(S); 2560b57cec5SDimitry Andric return C && C->Name == "target_features"; 2570b57cec5SDimitry Andric } 2580b57cec5SDimitry Andric 2590b57cec5SDimitry Andric std::vector<FeatureEntry> Features; 2600b57cec5SDimitry Andric }; 2610b57cec5SDimitry Andric 2620b57cec5SDimitry Andric struct TypeSection : Section { 2630b57cec5SDimitry Andric TypeSection() : Section(wasm::WASM_SEC_TYPE) {} 2640b57cec5SDimitry Andric 2650b57cec5SDimitry Andric static bool classof(const Section *S) { 2660b57cec5SDimitry Andric return S->Type == wasm::WASM_SEC_TYPE; 2670b57cec5SDimitry Andric } 2680b57cec5SDimitry Andric 2690b57cec5SDimitry Andric std::vector<Signature> Signatures; 2700b57cec5SDimitry Andric }; 2710b57cec5SDimitry Andric 2720b57cec5SDimitry Andric struct ImportSection : Section { 2730b57cec5SDimitry Andric ImportSection() : Section(wasm::WASM_SEC_IMPORT) {} 2740b57cec5SDimitry Andric 2750b57cec5SDimitry Andric static bool classof(const Section *S) { 2760b57cec5SDimitry Andric return S->Type == wasm::WASM_SEC_IMPORT; 2770b57cec5SDimitry Andric } 2780b57cec5SDimitry Andric 2790b57cec5SDimitry Andric std::vector<Import> Imports; 2800b57cec5SDimitry Andric }; 2810b57cec5SDimitry Andric 2820b57cec5SDimitry Andric struct FunctionSection : Section { 2830b57cec5SDimitry Andric FunctionSection() : Section(wasm::WASM_SEC_FUNCTION) {} 2840b57cec5SDimitry Andric 2850b57cec5SDimitry Andric static bool classof(const Section *S) { 2860b57cec5SDimitry Andric return S->Type == wasm::WASM_SEC_FUNCTION; 2870b57cec5SDimitry Andric } 2880b57cec5SDimitry Andric 2890b57cec5SDimitry Andric std::vector<uint32_t> FunctionTypes; 2900b57cec5SDimitry Andric }; 2910b57cec5SDimitry Andric 2920b57cec5SDimitry Andric struct TableSection : Section { 2930b57cec5SDimitry Andric TableSection() : Section(wasm::WASM_SEC_TABLE) {} 2940b57cec5SDimitry Andric 2950b57cec5SDimitry Andric static bool classof(const Section *S) { 2960b57cec5SDimitry Andric return S->Type == wasm::WASM_SEC_TABLE; 2970b57cec5SDimitry Andric } 2980b57cec5SDimitry Andric 2990b57cec5SDimitry Andric std::vector<Table> Tables; 3000b57cec5SDimitry Andric }; 3010b57cec5SDimitry Andric 3020b57cec5SDimitry Andric struct MemorySection : Section { 3030b57cec5SDimitry Andric MemorySection() : Section(wasm::WASM_SEC_MEMORY) {} 3040b57cec5SDimitry Andric 3050b57cec5SDimitry Andric static bool classof(const Section *S) { 3060b57cec5SDimitry Andric return S->Type == wasm::WASM_SEC_MEMORY; 3070b57cec5SDimitry Andric } 3080b57cec5SDimitry Andric 3090b57cec5SDimitry Andric std::vector<Limits> Memories; 3100b57cec5SDimitry Andric }; 3110b57cec5SDimitry Andric 3120b57cec5SDimitry Andric struct GlobalSection : Section { 3130b57cec5SDimitry Andric GlobalSection() : Section(wasm::WASM_SEC_GLOBAL) {} 3140b57cec5SDimitry Andric 3150b57cec5SDimitry Andric static bool classof(const Section *S) { 3160b57cec5SDimitry Andric return S->Type == wasm::WASM_SEC_GLOBAL; 3170b57cec5SDimitry Andric } 3180b57cec5SDimitry Andric 3190b57cec5SDimitry Andric std::vector<Global> Globals; 3200b57cec5SDimitry Andric }; 3210b57cec5SDimitry Andric 3220b57cec5SDimitry Andric struct EventSection : Section { 3230b57cec5SDimitry Andric EventSection() : Section(wasm::WASM_SEC_EVENT) {} 3240b57cec5SDimitry Andric 3250b57cec5SDimitry Andric static bool classof(const Section *S) { 3260b57cec5SDimitry Andric return S->Type == wasm::WASM_SEC_EVENT; 3270b57cec5SDimitry Andric } 3280b57cec5SDimitry Andric 3290b57cec5SDimitry Andric std::vector<Event> Events; 3300b57cec5SDimitry Andric }; 3310b57cec5SDimitry Andric 3320b57cec5SDimitry Andric struct ExportSection : Section { 3330b57cec5SDimitry Andric ExportSection() : Section(wasm::WASM_SEC_EXPORT) {} 3340b57cec5SDimitry Andric 3350b57cec5SDimitry Andric static bool classof(const Section *S) { 3360b57cec5SDimitry Andric return S->Type == wasm::WASM_SEC_EXPORT; 3370b57cec5SDimitry Andric } 3380b57cec5SDimitry Andric 3390b57cec5SDimitry Andric std::vector<Export> Exports; 3400b57cec5SDimitry Andric }; 3410b57cec5SDimitry Andric 3420b57cec5SDimitry Andric struct StartSection : Section { 3430b57cec5SDimitry Andric StartSection() : Section(wasm::WASM_SEC_START) {} 3440b57cec5SDimitry Andric 3450b57cec5SDimitry Andric static bool classof(const Section *S) { 3460b57cec5SDimitry Andric return S->Type == wasm::WASM_SEC_START; 3470b57cec5SDimitry Andric } 3480b57cec5SDimitry Andric 3490b57cec5SDimitry Andric uint32_t StartFunction; 3500b57cec5SDimitry Andric }; 3510b57cec5SDimitry Andric 3520b57cec5SDimitry Andric struct ElemSection : Section { 3530b57cec5SDimitry Andric ElemSection() : Section(wasm::WASM_SEC_ELEM) {} 3540b57cec5SDimitry Andric 3550b57cec5SDimitry Andric static bool classof(const Section *S) { 3560b57cec5SDimitry Andric return S->Type == wasm::WASM_SEC_ELEM; 3570b57cec5SDimitry Andric } 3580b57cec5SDimitry Andric 3590b57cec5SDimitry Andric std::vector<ElemSegment> Segments; 3600b57cec5SDimitry Andric }; 3610b57cec5SDimitry Andric 3620b57cec5SDimitry Andric struct CodeSection : Section { 3630b57cec5SDimitry Andric CodeSection() : Section(wasm::WASM_SEC_CODE) {} 3640b57cec5SDimitry Andric 3650b57cec5SDimitry Andric static bool classof(const Section *S) { 3660b57cec5SDimitry Andric return S->Type == wasm::WASM_SEC_CODE; 3670b57cec5SDimitry Andric } 3680b57cec5SDimitry Andric 3690b57cec5SDimitry Andric std::vector<Function> Functions; 3700b57cec5SDimitry Andric }; 3710b57cec5SDimitry Andric 3720b57cec5SDimitry Andric struct DataSection : Section { 3730b57cec5SDimitry Andric DataSection() : Section(wasm::WASM_SEC_DATA) {} 3740b57cec5SDimitry Andric 3750b57cec5SDimitry Andric static bool classof(const Section *S) { 3760b57cec5SDimitry Andric return S->Type == wasm::WASM_SEC_DATA; 3770b57cec5SDimitry Andric } 3780b57cec5SDimitry Andric 3790b57cec5SDimitry Andric std::vector<DataSegment> Segments; 3800b57cec5SDimitry Andric }; 3810b57cec5SDimitry Andric 3820b57cec5SDimitry Andric struct DataCountSection : Section { 3830b57cec5SDimitry Andric DataCountSection() : Section(wasm::WASM_SEC_DATACOUNT) {} 3840b57cec5SDimitry Andric 3850b57cec5SDimitry Andric static bool classof(const Section *S) { 3860b57cec5SDimitry Andric return S->Type == wasm::WASM_SEC_DATACOUNT; 3870b57cec5SDimitry Andric } 3880b57cec5SDimitry Andric 3890b57cec5SDimitry Andric uint32_t Count; 3900b57cec5SDimitry Andric }; 3910b57cec5SDimitry Andric 3920b57cec5SDimitry Andric struct Object { 3930b57cec5SDimitry Andric FileHeader Header; 3940b57cec5SDimitry Andric std::vector<std::unique_ptr<Section>> Sections; 3950b57cec5SDimitry Andric }; 3960b57cec5SDimitry Andric 3970b57cec5SDimitry Andric } // end namespace WasmYAML 3980b57cec5SDimitry Andric } // end namespace llvm 3990b57cec5SDimitry Andric 4000b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(std::unique_ptr<llvm::WasmYAML::Section>) 4010b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::Signature) 4020b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::ValueType) 4030b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::Table) 4040b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::Import) 4050b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::Export) 4060b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::ElemSegment) 4070b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::Limits) 4080b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::DataSegment) 4090b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::Global) 4100b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::Function) 4110b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::LocalDecl) 4120b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::Relocation) 4130b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::NameEntry) 4140b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::ProducerEntry) 4150b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::FeatureEntry) 4160b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::SegmentInfo) 4170b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::SymbolInfo) 4180b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::InitFunction) 4190b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::ComdatEntry) 4200b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::Comdat) 4210b57cec5SDimitry Andric LLVM_YAML_IS_SEQUENCE_VECTOR(llvm::WasmYAML::Event) 4220b57cec5SDimitry Andric 4230b57cec5SDimitry Andric namespace llvm { 4240b57cec5SDimitry Andric namespace yaml { 4250b57cec5SDimitry Andric 4260b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::FileHeader> { 4270b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::FileHeader &FileHdr); 4280b57cec5SDimitry Andric }; 4290b57cec5SDimitry Andric 4300b57cec5SDimitry Andric template <> struct MappingTraits<std::unique_ptr<WasmYAML::Section>> { 4310b57cec5SDimitry Andric static void mapping(IO &IO, std::unique_ptr<WasmYAML::Section> &Section); 4320b57cec5SDimitry Andric }; 4330b57cec5SDimitry Andric 4340b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::Object> { 4350b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::Object &Object); 4360b57cec5SDimitry Andric }; 4370b57cec5SDimitry Andric 4380b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::Import> { 4390b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::Import &Import); 4400b57cec5SDimitry Andric }; 4410b57cec5SDimitry Andric 4420b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::Export> { 4430b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::Export &Export); 4440b57cec5SDimitry Andric }; 4450b57cec5SDimitry Andric 4460b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::Global> { 4470b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::Global &Global); 4480b57cec5SDimitry Andric }; 4490b57cec5SDimitry Andric 4500b57cec5SDimitry Andric template <> struct ScalarBitSetTraits<WasmYAML::LimitFlags> { 4510b57cec5SDimitry Andric static void bitset(IO &IO, WasmYAML::LimitFlags &Value); 4520b57cec5SDimitry Andric }; 4530b57cec5SDimitry Andric 4540b57cec5SDimitry Andric template <> struct ScalarBitSetTraits<WasmYAML::SymbolFlags> { 4550b57cec5SDimitry Andric static void bitset(IO &IO, WasmYAML::SymbolFlags &Value); 4560b57cec5SDimitry Andric }; 4570b57cec5SDimitry Andric 4580b57cec5SDimitry Andric template <> struct ScalarEnumerationTraits<WasmYAML::SymbolKind> { 4590b57cec5SDimitry Andric static void enumeration(IO &IO, WasmYAML::SymbolKind &Kind); 4600b57cec5SDimitry Andric }; 4610b57cec5SDimitry Andric 4620b57cec5SDimitry Andric template <> struct ScalarBitSetTraits<WasmYAML::SegmentFlags> { 4630b57cec5SDimitry Andric static void bitset(IO &IO, WasmYAML::SegmentFlags &Value); 4640b57cec5SDimitry Andric }; 4650b57cec5SDimitry Andric 4660b57cec5SDimitry Andric template <> struct ScalarEnumerationTraits<WasmYAML::SectionType> { 4670b57cec5SDimitry Andric static void enumeration(IO &IO, WasmYAML::SectionType &Type); 4680b57cec5SDimitry Andric }; 4690b57cec5SDimitry Andric 4700b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::Signature> { 4710b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::Signature &Signature); 4720b57cec5SDimitry Andric }; 4730b57cec5SDimitry Andric 4740b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::Table> { 4750b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::Table &Table); 4760b57cec5SDimitry Andric }; 4770b57cec5SDimitry Andric 4780b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::Limits> { 4790b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::Limits &Limits); 4800b57cec5SDimitry Andric }; 4810b57cec5SDimitry Andric 4820b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::Function> { 4830b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::Function &Function); 4840b57cec5SDimitry Andric }; 4850b57cec5SDimitry Andric 4860b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::Relocation> { 4870b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::Relocation &Relocation); 4880b57cec5SDimitry Andric }; 4890b57cec5SDimitry Andric 4900b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::NameEntry> { 4910b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::NameEntry &NameEntry); 4920b57cec5SDimitry Andric }; 4930b57cec5SDimitry Andric 4940b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::ProducerEntry> { 4950b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::ProducerEntry &ProducerEntry); 4960b57cec5SDimitry Andric }; 4970b57cec5SDimitry Andric 4980b57cec5SDimitry Andric template <> struct ScalarEnumerationTraits<WasmYAML::FeaturePolicyPrefix> { 4990b57cec5SDimitry Andric static void enumeration(IO &IO, WasmYAML::FeaturePolicyPrefix &Prefix); 5000b57cec5SDimitry Andric }; 5010b57cec5SDimitry Andric 5020b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::FeatureEntry> { 5030b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::FeatureEntry &FeatureEntry); 5040b57cec5SDimitry Andric }; 5050b57cec5SDimitry Andric 5060b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::SegmentInfo> { 5070b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::SegmentInfo &SegmentInfo); 5080b57cec5SDimitry Andric }; 5090b57cec5SDimitry Andric 5100b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::LocalDecl> { 5110b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::LocalDecl &LocalDecl); 5120b57cec5SDimitry Andric }; 5130b57cec5SDimitry Andric 5140b57cec5SDimitry Andric template <> struct MappingTraits<wasm::WasmInitExpr> { 5150b57cec5SDimitry Andric static void mapping(IO &IO, wasm::WasmInitExpr &Expr); 5160b57cec5SDimitry Andric }; 5170b57cec5SDimitry Andric 5180b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::DataSegment> { 5190b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::DataSegment &Segment); 5200b57cec5SDimitry Andric }; 5210b57cec5SDimitry Andric 5220b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::ElemSegment> { 5230b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::ElemSegment &Segment); 5240b57cec5SDimitry Andric }; 5250b57cec5SDimitry Andric 5260b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::SymbolInfo> { 5270b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::SymbolInfo &Info); 5280b57cec5SDimitry Andric }; 5290b57cec5SDimitry Andric 5300b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::InitFunction> { 5310b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::InitFunction &Init); 5320b57cec5SDimitry Andric }; 5330b57cec5SDimitry Andric 5340b57cec5SDimitry Andric template <> struct ScalarEnumerationTraits<WasmYAML::ComdatKind> { 5350b57cec5SDimitry Andric static void enumeration(IO &IO, WasmYAML::ComdatKind &Kind); 5360b57cec5SDimitry Andric }; 5370b57cec5SDimitry Andric 5380b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::ComdatEntry> { 5390b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::ComdatEntry &ComdatEntry); 5400b57cec5SDimitry Andric }; 5410b57cec5SDimitry Andric 5420b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::Comdat> { 5430b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::Comdat &Comdat); 5440b57cec5SDimitry Andric }; 5450b57cec5SDimitry Andric 5460b57cec5SDimitry Andric template <> struct ScalarEnumerationTraits<WasmYAML::ValueType> { 5470b57cec5SDimitry Andric static void enumeration(IO &IO, WasmYAML::ValueType &Type); 5480b57cec5SDimitry Andric }; 5490b57cec5SDimitry Andric 5500b57cec5SDimitry Andric template <> struct ScalarEnumerationTraits<WasmYAML::ExportKind> { 5510b57cec5SDimitry Andric static void enumeration(IO &IO, WasmYAML::ExportKind &Kind); 5520b57cec5SDimitry Andric }; 5530b57cec5SDimitry Andric 5540b57cec5SDimitry Andric template <> struct ScalarEnumerationTraits<WasmYAML::TableType> { 5550b57cec5SDimitry Andric static void enumeration(IO &IO, WasmYAML::TableType &Type); 5560b57cec5SDimitry Andric }; 5570b57cec5SDimitry Andric 5580b57cec5SDimitry Andric template <> struct ScalarEnumerationTraits<WasmYAML::Opcode> { 5590b57cec5SDimitry Andric static void enumeration(IO &IO, WasmYAML::Opcode &Opcode); 5600b57cec5SDimitry Andric }; 5610b57cec5SDimitry Andric 5620b57cec5SDimitry Andric template <> struct ScalarEnumerationTraits<WasmYAML::RelocType> { 5630b57cec5SDimitry Andric static void enumeration(IO &IO, WasmYAML::RelocType &Kind); 5640b57cec5SDimitry Andric }; 5650b57cec5SDimitry Andric 5660b57cec5SDimitry Andric template <> struct MappingTraits<WasmYAML::Event> { 5670b57cec5SDimitry Andric static void mapping(IO &IO, WasmYAML::Event &Event); 5680b57cec5SDimitry Andric }; 5690b57cec5SDimitry Andric 5700b57cec5SDimitry Andric } // end namespace yaml 5710b57cec5SDimitry Andric } // end namespace llvm 5720b57cec5SDimitry Andric 5730b57cec5SDimitry Andric #endif // LLVM_OBJECTYAML_WASMYAML_H 574