MCPcopy Create free account
hub / github.com/WasmVM/WasmVM / parse_gcinstr

Method parse_gcinstr

src/lib/parse/instr_parse.cpp:661–685  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

659// ── GC struct/array instructions ──────────────────────────────────────────────
660
661WasmInstr ParseContext::parse_gcinstr(const std::string& name) {
662 // Struct
663 if (name == "struct.new") return Instr::Struct_new(parse_typeidx());
664 if (name == "struct.new_default") return Instr::Struct_new_default(parse_typeidx());
665 if (name == "struct.get") { index_t t = parse_typeidx(); return Instr::Struct_get(t, parse_u32()); }
666 if (name == "struct.get_s") { index_t t = parse_typeidx(); return Instr::Struct_get_s(t, parse_u32()); }
667 if (name == "struct.get_u") { index_t t = parse_typeidx(); return Instr::Struct_get_u(t, parse_u32()); }
668 if (name == "struct.set") { index_t t = parse_typeidx(); return Instr::Struct_set(t, parse_u32()); }
669 // Array
670 if (name == "array.new") return Instr::Array_new(parse_typeidx());
671 if (name == "array.new_default") return Instr::Array_new_default(parse_typeidx());
672 if (name == "array.new_fixed") { index_t t = parse_typeidx(); return Instr::Array_new_fixed(t, parse_u32()); }
673 if (name == "array.new_data") { index_t t = parse_typeidx(); return Instr::Array_new_data(t, parse_dataidx()); }
674 if (name == "array.new_elem") { index_t t = parse_typeidx(); return Instr::Array_new_elem(t, parse_elemidx()); }
675 if (name == "array.get") return Instr::Array_get(parse_typeidx());
676 if (name == "array.get_s") return Instr::Array_get_s(parse_typeidx());
677 if (name == "array.get_u") return Instr::Array_get_u(parse_typeidx());
678 if (name == "array.set") return Instr::Array_set(parse_typeidx());
679 if (name == "array.len") return Instr::Array_len();
680 if (name == "array.fill") return Instr::Array_fill(parse_typeidx());
681 if (name == "array.copy") { index_t d = parse_typeidx(); return Instr::Array_copy(d, parse_typeidx()); }
682 if (name == "array.init_data") { index_t t = parse_typeidx(); return Instr::Array_init_data(t, parse_dataidx()); }
683 if (name == "array.init_elem") { index_t t = parse_typeidx(); return Instr::Array_init_elem(t, parse_elemidx()); }
684 throw Exception::Parse("unknown GC instruction '" + name + "'", tok_.location());
685}

Callers

nothing calls this directly

Calls 13

Struct_getClass · 0.85
Struct_get_sClass · 0.85
Struct_get_uClass · 0.85
Struct_setClass · 0.85
Array_new_fixedClass · 0.85
Array_new_dataClass · 0.85
Array_new_elemClass · 0.85
Array_fillClass · 0.85
Array_copyClass · 0.85
Array_init_dataClass · 0.85
Array_init_elemClass · 0.85
ParseClass · 0.85

Tested by

no test coverage detected