/// <summary> /// Reads a table section's payload from the given binary WebAssembly reader. /// </summary> /// <param name="header">The type section's header.</param> /// <param name="reader">A reader for a binary WebAssembly file.</param> /// <returns>A parsed type section.</returns> public static TableSection ReadSectionPayload(SectionHeader header, BinaryWasmReader reader) { long initPos = reader.Position; uint typeCount = reader.ReadVarUInt32(); var tables = new List <TableType>((int)typeCount); for (uint i = 0; i < typeCount; i++) { tables.Add(TableType.ReadFrom(reader)); } var extraBytes = reader.ReadRemainingPayload(initPos, header); return(new TableSection(tables, extraBytes)); }
/// <summary> /// Reads an imported value from the given binary WebAssembly reader. /// </summary> /// <param name="Reader">The WebAssembly reader.</param> /// <returns>The imported value that was read.</returns> public static ImportedValue ReadFrom(BinaryWasmReader Reader) { string moduleName = Reader.ReadString(); string fieldName = Reader.ReadString(); var kind = (ExternalKind)Reader.ReadByte(); switch (kind) { case ExternalKind.Function: return(new ImportedFunction(moduleName, fieldName, Reader.ReadVarUInt32())); case ExternalKind.Global: return(new ImportedGlobal(moduleName, fieldName, GlobalType.ReadFrom(Reader))); case ExternalKind.Memory: return(new ImportedMemory(moduleName, fieldName, MemoryType.ReadFrom(Reader))); case ExternalKind.Table: return(new ImportedTable(moduleName, fieldName, TableType.ReadFrom(Reader))); default: throw new WasmException("Unknown imported value kind: " + kind); } }