Configuration.h 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  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/AbstractMachine/AbstractMachine.h>
  8. namespace Wasm {
  9. class Configuration {
  10. public:
  11. explicit Configuration(Store& store)
  12. : m_store(store)
  13. {
  14. }
  15. Optional<Label> nth_label(size_t);
  16. void set_frame(NonnullOwnPtr<Frame> frame)
  17. {
  18. m_current_frame = frame.ptr();
  19. m_stack.push(move(frame));
  20. m_stack.push(make<Label>(m_current_frame->arity(), m_current_frame->expression().instructions().size()));
  21. }
  22. auto& frame() const { return m_current_frame; }
  23. auto& frame() { return m_current_frame; }
  24. auto& ip() const { return m_ip; }
  25. auto& ip() { return m_ip; }
  26. auto& depth() const { return m_depth; }
  27. auto& depth() { return m_depth; }
  28. auto& stack() const { return m_stack; }
  29. auto& stack() { return m_stack; }
  30. auto& store() const { return m_store; }
  31. auto& store() { return m_store; }
  32. Result call(FunctionAddress, Vector<Value> arguments);
  33. Result execute();
  34. void dump_stack();
  35. private:
  36. Store& m_store;
  37. Frame* m_current_frame { nullptr };
  38. Stack m_stack;
  39. size_t m_depth { 0 };
  40. InstructionPointer m_ip;
  41. };
  42. }