mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 21:07:35 +00:00
LibWasm: Make Interpreter a virtual interface
This allows multiply different kinds of interpreters to be used by the runtime; currently a BytecodeInterpreter and a DebuggerBytecodeInterpreter is provided.
This commit is contained in:
parent
f91fa79fc5
commit
c5df55a8a2
7 changed files with 86 additions and 66 deletions
|
@ -11,15 +11,20 @@
|
|||
namespace Wasm {
|
||||
|
||||
struct Interpreter {
|
||||
void interpret(Configuration&);
|
||||
bool did_trap() const { return m_do_trap; }
|
||||
void clear_trap() { m_do_trap = false; }
|
||||
virtual ~Interpreter() = default;
|
||||
virtual void interpret(Configuration&) = 0;
|
||||
virtual bool did_trap() const = 0;
|
||||
virtual void clear_trap() = 0;
|
||||
};
|
||||
|
||||
Function<bool(Configuration&, InstructionPointer&, const Instruction&)>* pre_interpret_hook { nullptr };
|
||||
Function<bool(Configuration&, InstructionPointer&, const Instruction&, const Interpreter&)>* post_interpret_hook { nullptr };
|
||||
struct BytecodeInterpreter : public Interpreter {
|
||||
virtual void interpret(Configuration&) override;
|
||||
virtual ~BytecodeInterpreter() override = default;
|
||||
virtual bool did_trap() const override { return m_do_trap; }
|
||||
virtual void clear_trap() override { m_do_trap = false; }
|
||||
|
||||
private:
|
||||
void interpret(Configuration&, InstructionPointer&, const Instruction&);
|
||||
protected:
|
||||
virtual void interpret(Configuration&, InstructionPointer&, const Instruction&);
|
||||
void branch_to_label(Configuration&, LabelIndex);
|
||||
ReadonlyBytes load_from_memory(Configuration&, const Instruction&, size_t);
|
||||
void store_to_memory(Configuration&, const Instruction&, ReadonlyBytes data);
|
||||
|
@ -44,4 +49,14 @@ private:
|
|||
bool m_do_trap { false };
|
||||
};
|
||||
|
||||
struct DebuggerBytecodeInterpreter : public BytecodeInterpreter {
|
||||
virtual ~DebuggerBytecodeInterpreter() override = default;
|
||||
|
||||
Function<bool(Configuration&, InstructionPointer&, const Instruction&)> pre_interpret_hook;
|
||||
Function<bool(Configuration&, InstructionPointer&, const Instruction&, const Interpreter&)> post_interpret_hook;
|
||||
|
||||
private:
|
||||
virtual void interpret(Configuration&, InstructionPointer&, const Instruction&) override;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue