Printer.h 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. /*
  2. * Copyright (c) 2021, Ali Mohammad Pur <mpfard@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #pragma once
  7. #include <LibWasm/Types.h>
  8. namespace Wasm {
  9. class Value;
  10. String instruction_name(OpCode const& opcode);
  11. struct Printer {
  12. explicit Printer(OutputStream& stream, size_t initial_indent = 0)
  13. : m_stream(stream)
  14. , m_indent(initial_indent)
  15. {
  16. }
  17. void print(Wasm::BlockType const&);
  18. void print(Wasm::CodeSection const&);
  19. void print(Wasm::CodeSection::Code const&);
  20. void print(Wasm::CodeSection::Func const&);
  21. void print(Wasm::CustomSection const&);
  22. void print(Wasm::DataCountSection const&);
  23. void print(Wasm::DataSection const&);
  24. void print(Wasm::DataSection::Data const&);
  25. void print(Wasm::ElementSection const&);
  26. void print(Wasm::ElementSection::Element const&);
  27. void print(Wasm::ExportSection const&);
  28. void print(Wasm::ExportSection::Export const&);
  29. void print(Wasm::Expression const&);
  30. void print(Wasm::FunctionSection const&);
  31. void print(Wasm::FunctionType const&);
  32. void print(Wasm::GlobalSection const&);
  33. void print(Wasm::GlobalSection::Global const&);
  34. void print(Wasm::GlobalType const&);
  35. void print(Wasm::ImportSection const&);
  36. void print(Wasm::ImportSection::Import const&);
  37. void print(Wasm::Instruction const&);
  38. void print(Wasm::Limits const&);
  39. void print(Wasm::Locals const&);
  40. void print(Wasm::MemorySection const&);
  41. void print(Wasm::MemorySection::Memory const&);
  42. void print(Wasm::MemoryType const&);
  43. void print(Wasm::Module const&);
  44. void print(Wasm::Module::Function const&);
  45. void print(Wasm::Reference const&);
  46. void print(Wasm::StartSection const&);
  47. void print(Wasm::StartSection::StartFunction const&);
  48. void print(Wasm::TableSection const&);
  49. void print(Wasm::TableSection::Table const&);
  50. void print(Wasm::TableType const&);
  51. void print(Wasm::TypeSection const&);
  52. void print(Wasm::ValueType const&);
  53. void print(Wasm::Value const&);
  54. private:
  55. void print_indent();
  56. template<typename... Args>
  57. void print(CheckedFormatString<Args...> fmt, Args&&... args)
  58. {
  59. StringBuilder builder;
  60. builder.appendff(fmt.view(), forward<Args>(args)...);
  61. m_stream.write_or_error(builder.string_view().bytes());
  62. }
  63. OutputStream& m_stream;
  64. size_t m_indent { 0 };
  65. };
  66. }