mirror of
https://github.com/RGBCube/serenity
synced 2025-07-26 19:27:45 +00:00
LibWasm: Add a instruction_from_name getter
This commit is contained in:
parent
d471405caf
commit
afa3d06ea6
2 changed files with 13 additions and 0 deletions
|
@ -13,6 +13,7 @@ namespace Wasm {
|
||||||
|
|
||||||
struct Names {
|
struct Names {
|
||||||
static HashMap<OpCode, String> instruction_names;
|
static HashMap<OpCode, String> instruction_names;
|
||||||
|
static HashMap<String, OpCode> instructions_by_name;
|
||||||
};
|
};
|
||||||
|
|
||||||
String instruction_name(OpCode const& opcode)
|
String instruction_name(OpCode const& opcode)
|
||||||
|
@ -20,6 +21,16 @@ String instruction_name(OpCode const& opcode)
|
||||||
return Names::instruction_names.get(opcode).value_or("<unknown>");
|
return Names::instruction_names.get(opcode).value_or("<unknown>");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Optional<OpCode> instruction_from_name(StringView name)
|
||||||
|
{
|
||||||
|
if (Names::instructions_by_name.is_empty()) {
|
||||||
|
for (auto& entry : Names::instruction_names)
|
||||||
|
Names::instructions_by_name.set(entry.value, entry.key);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Names::instructions_by_name.get(name);
|
||||||
|
}
|
||||||
|
|
||||||
void Printer::print_indent()
|
void Printer::print_indent()
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < m_indent; ++i)
|
for (size_t i = 0; i < m_indent; ++i)
|
||||||
|
@ -866,3 +877,4 @@ HashMap<Wasm::OpCode, String> Wasm::Names::instruction_names {
|
||||||
{ Instructions::structured_else, "synthetic:else" },
|
{ Instructions::structured_else, "synthetic:else" },
|
||||||
{ Instructions::structured_end, "synthetic:end" },
|
{ Instructions::structured_end, "synthetic:end" },
|
||||||
};
|
};
|
||||||
|
HashMap<String, Wasm::OpCode> Wasm::Names::instructions_by_name;
|
||||||
|
|
|
@ -14,6 +14,7 @@ class Reference;
|
||||||
class Value;
|
class Value;
|
||||||
|
|
||||||
String instruction_name(OpCode const& opcode);
|
String instruction_name(OpCode const& opcode);
|
||||||
|
Optional<OpCode> instruction_from_name(StringView name);
|
||||||
|
|
||||||
struct Printer {
|
struct Printer {
|
||||||
explicit Printer(OutputStream& stream, size_t initial_indent = 0)
|
explicit Printer(OutputStream& stream, size_t initial_indent = 0)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue