/// <summary> /// Writes a textual representation of this WebAssembly file to the given text writer. /// Note that this representation is intended as a human-readable debugging format that may /// change at any time, not as a first-class textual WebAssembly module encoding. /// </summary> /// <param name="writer">The text writer use.</param> public void Dump(TextWriter writer) { writer.Write( "WebAssembly module; magic number: {0}, version number: {1}", DumpHelpers.FormatHex(Header.Magic), Header.Version); foreach (var section in Sections) { writer.WriteLine(); section.Dump(writer); } }
/// <summary> /// Writes a textual representation of this global variable definition to the given writer. /// </summary> /// <param name="writer">The writer to which text is written.</param> public void Dump(TextWriter writer) { writer.Write("- Type: "); Type.Dump(writer); writer.WriteLine(); writer.Write("- Initial value:"); var indentedWriter = DumpHelpers.CreateIndentedTextWriter(writer); foreach (var instruction in InitialValue.BodyInstructions) { indentedWriter.WriteLine(); instruction.Dump(indentedWriter); } }
/// <summary> /// Writes a textual representation of this name entry to the given writer. /// </summary> /// <param name="Writer">The text writer.</param> public virtual void Dump(TextWriter Writer) { using (var memStream = new MemoryStream()) { using (var binaryWriter = new BinaryWriter(memStream)) { WritePayloadTo(new BinaryWasmWriter(binaryWriter)); memStream.Seek(0, SeekOrigin.Begin); Writer.WriteLine("entry kind '{0}', payload size: {1}", Kind, memStream.Length); var instructionWriter = DumpHelpers.CreateIndentedTextWriter(Writer); DumpHelpers.DumpStream(memStream, Writer); } } }
/// <inheritdoc/> public override void Dump(TextWriter writer) { writer.Write(Name.ToString()); writer.Write("; entry point: function #"); writer.Write(StartFunctionIndex); writer.WriteLine(); if (ExtraPayload.Length > 0) { writer.Write("Extra payload size: "); writer.Write(ExtraPayload.Length); writer.WriteLine(); DumpHelpers.DumpBytes(ExtraPayload, writer); writer.WriteLine(); } }
/// <summary> /// Verifies that this version header is a WebAssembly version header for a known /// version. /// </summary> public void Verify() { if (Magic != WasmMagic) { throw new BadHeaderException( this, string.Format( "Invalid magic number. Got '{0}', expected '{1}'.", DumpHelpers.FormatHex(Magic), DumpHelpers.FormatHex(WasmMagic))); } if (Version != PreMvpVersion && Version != MvpVersion) { throw new BadHeaderException(this, "Invalid version number '" + Version + "'."); } }
/// <summary> /// Writes a textual representation of this exported value to the given writer. /// </summary> /// <param name="Writer">The writer to which text is written.</param> public void Dump(TextWriter Writer) { Writer.Write("- Memory index: "); Writer.Write(MemoryIndex); Writer.WriteLine(); Writer.Write("- Offset:"); var indentedWriter = DumpHelpers.CreateIndentedTextWriter(Writer); foreach (var instruction in Offset.BodyInstructions) { indentedWriter.WriteLine(); instruction.Dump(indentedWriter); } Writer.WriteLine(); Writer.Write("- Data:"); indentedWriter.WriteLine(); DumpHelpers.DumpBytes(Data, indentedWriter); }
/// <summary> /// Writes a textual representation of this function body to the given writer. /// </summary> /// <param name="Writer">The writer to which text is written.</param> public void Dump(TextWriter Writer) { if (Locals.Count > 0) { Writer.Write("- Local entries:"); var varEntryWriter = DumpHelpers.CreateIndentedTextWriter(Writer); for (int i = 0; i < Locals.Count; i++) { varEntryWriter.WriteLine(); varEntryWriter.Write("#{0}: ", i); Locals[i].Dump(varEntryWriter); } Writer.WriteLine(); } else { Writer.WriteLine("- No local entries"); } if (BodyInstructions.Count > 0) { Writer.Write("- Function body:"); var instructionWriter = DumpHelpers.CreateIndentedTextWriter(Writer); foreach (var instr in BodyInstructions) { instructionWriter.WriteLine(); instr.Dump(instructionWriter); } Writer.WriteLine(); } else { Writer.WriteLine("- Empty function body"); } if (HasExtraPayload) { Writer.Write("- Extra payload size: "); Writer.Write(ExtraPayload.Length); Writer.WriteLine(); DumpHelpers.DumpBytes(ExtraPayload, Writer); Writer.WriteLine(); } }
/// <summary> /// Writes a textual representation of this element segment to the given writer. /// </summary> /// <param name="Writer">The writer to which text is written.</param> public void Dump(TextWriter Writer) { Writer.Write("- Table index: "); Writer.Write(TableIndex); Writer.WriteLine(); Writer.Write("- Offset:"); var indentedWriter = DumpHelpers.CreateIndentedTextWriter(Writer); foreach (var instruction in Offset.BodyInstructions) { indentedWriter.WriteLine(); instruction.Dump(indentedWriter); } Writer.WriteLine(); Writer.Write("- Elements:"); for (int i = 0; i < Elements.Count; i++) { indentedWriter.WriteLine(); indentedWriter.Write("#{0} -> func #{1}", i, Elements[i]); } }
/// <inheritdoc/> public override void Dump(TextWriter writer) { writer.Write(Name.ToString()); writer.Write("; number of entries: "); writer.Write(FunctionTypes.Count); writer.WriteLine(); for (int i = 0; i < FunctionTypes.Count; i++) { writer.Write("#"); writer.Write(i); writer.Write(" -> "); FunctionTypes[i].Dump(writer); writer.WriteLine(); } if (ExtraPayload.Length > 0) { writer.Write("Extra payload size: "); writer.Write(ExtraPayload.Length); writer.WriteLine(); DumpHelpers.DumpBytes(ExtraPayload, writer); writer.WriteLine(); } }
/// <inheritdoc/> public override void Dump(TextWriter Writer) { Writer.Write(Name.ToString()); Writer.Write("; number of entries: "); Writer.Write(Memories.Count); Writer.WriteLine(); for (int i = 0; i < Memories.Count; i++) { Writer.Write("#"); Writer.Write(i); Writer.Write(" -> "); Memories[i].Dump(Writer); Writer.WriteLine(); } if (ExtraPayload.Length > 0) { Writer.Write("Extra payload size: "); Writer.Write(ExtraPayload.Length); Writer.WriteLine(); DumpHelpers.DumpBytes(ExtraPayload, Writer); Writer.WriteLine(); } }
/// <inheritdoc/> public override void Dump(TextWriter Writer) { Writer.Write(Name.ToString()); Writer.Write("; number of entries: "); Writer.Write(Bodies.Count); Writer.WriteLine(); var indentedWriter = DumpHelpers.CreateIndentedTextWriter(Writer); for (int i = 0; i < Bodies.Count; i++) { Writer.Write("#{0}: ", i); indentedWriter.WriteLine(); Bodies[i].Dump(indentedWriter); } if (ExtraPayload.Length > 0) { Writer.Write("Extra payload size: "); Writer.Write(ExtraPayload.Length); Writer.WriteLine(); DumpHelpers.DumpBytes(ExtraPayload, Writer); Writer.WriteLine(); } }
/// <summary> /// Writes a textual representation of this exported value to the given writer. /// </summary> /// <param name="writer">The writer to which text is written.</param> public void Dump(TextWriter writer) { writer.Write("func("); for (int i = 0; i < ParameterTypes.Count; i++) { if (i > 0) { writer.Write(", "); } DumpHelpers.DumpWasmType(ParameterTypes[i], writer); } writer.Write(") returns ("); for (int i = 0; i < ReturnTypes.Count; i++) { if (i > 0) { writer.Write(", "); } DumpHelpers.DumpWasmType(ReturnTypes[i], writer); } writer.Write(")"); }
/// <summary> /// Writes a textual representation of this local entry to the given writer. /// </summary> /// <param name="Writer">The writer to which text is written.</param> public void Dump(TextWriter Writer) { Writer.Write(LocalCount); Writer.Write(" x "); DumpHelpers.DumpWasmType(LocalType, Writer); }