diff --git a/core/rexcode/wasm/module/parse.odin b/core/rexcode/wasm/module/parse.odin index 4bdde92e0..1384a0292 100644 --- a/core/rexcode/wasm/module/parse.odin +++ b/core/rexcode/wasm/module/parse.odin @@ -443,7 +443,9 @@ build_functions :: proc(m: ^Module, func_typeidx: []u32, codes: []Code_Body, all for e in m.exports { if e.kind == .FUNC && int(e.index) < total && funcs[e.index].name == "" { - funcs[e.index].name = e.name + f := &funcs[e.index] + f.name = e.name + f.exported = true } } diff --git a/core/rexcode/wasm/module/print.odin b/core/rexcode/wasm/module/print.odin index 08a3f4f9d..ca5d9c58a 100644 --- a/core/rexcode/wasm/module/print.odin +++ b/core/rexcode/wasm/module/print.odin @@ -30,9 +30,21 @@ sbprint_module :: proc(sb: ^strings.Builder, m: Module) { } - strings.write_string(sb, "WebAssembly Module, Version: ") + strings.write_string(sb, "module\n") + strings.write_string(sb, " version: ") strings.write_u64(sb, u64(m.version)) strings.write_byte(sb, '\n') + for c in m.customs { + #partial switch v in c.variant { + case Custom_Section_Name: + if v.module_name != "" { + strings.write_string(sb, " file: ") + strings.write_quoted_string(sb, v.module_name) + strings.write_byte(sb, '\n') + } + } + } + label_names: map[u32]string defer delete(label_names) @@ -138,6 +150,10 @@ sbprint_module :: proc(sb: ^strings.Builder, m: Module) { fmt.sbprintf(sb, " %q\n", r.data[r.off:][:size]) case 1: // []byte fmt.sbprintf(sb, " %q\n", r.data[r.off:]) + case 48: + // fmt.sbprintf(sb, " %q\n", r.data[r.off:]) + case 49: + // fmt.sbprintf(sb, " %q\n", r.data[r.off:]) } } case .MEMORY: @@ -145,43 +161,53 @@ sbprint_module :: proc(sb: ^strings.Builder, m: Module) { count := rd_u32(&r) or_break section_printing assert(count == sec.count) for i in 0.. 0 { - strings.write_string(sb, "\n.import\n") - for imp, i in m.imports { - fmt.sbprintf(sb, " [%d] %s %q %q idx:%d\n", i, external_kind_string[imp.kind], imp.module_name, imp.field_name, imp.index) + strings.write_string(sb, ".import\n") + for imp in m.imports { + f := &m.functions[imp.index] + fmt.sbprintf(sb, " %s %q %q", external_kind_string[imp.kind], imp.module_name, imp.field_name) + write_func_type(sb, f.type) + strings.write_string(sb, "\n") } + strings.write_string(sb, "\n") } if len(m.exports) > 0 { - strings.write_string(sb, "\n.export\n") - for e, i in m.exports { - fmt.sbprintf(sb, " [%d] %s %q idx:%d\n", i, external_kind_string[e.kind], e.name, e.index) + strings.write_string(sb, ".export\n") + for e in m.exports { + f := &m.functions[e.index] + fmt.sbprintf(sb, " %s %q", external_kind_string[e.kind], e.name) + write_func_type(sb, f.type) + strings.write_string(sb, "\n") } + strings.write_string(sb, "\n") } - if len(m.types) > 0 { - strings.write_string(sb, "\n.") - strings.write_string(sb, section_name(.TYPE)) - strings.write_string(sb, "\n") - for t, i in m.types { - strings.write_string(sb, " [") - strings.write_u64(sb, u64(i)) - strings.write_string(sb, "] ") - write_func_type(sb, t) - strings.write_byte(sb, '\n') - } - } + // if len(m.types) > 0 { + // strings.write_string(sb, "\n.") + // strings.write_string(sb, section_name(.TYPE)) + // strings.write_string(sb, "\n") + // for t, i in m.types { + // strings.write_string(sb, " [") + // strings.write_u64(sb, u64(i)) + // strings.write_string(sb, "] ") + // write_func_type(sb, t) + // strings.write_byte(sb, '\n') + // } + // } func_relocs: []wasm.Relocation @@ -192,20 +218,20 @@ sbprint_module :: proc(sb: ^strings.Builder, m: Module) { } } - strings.write_string(sb, "\nfunctions:\n") for f in m.functions { - strings.write_string(sb, " [") - strings.write_u64(sb, u64(f.func_index)) - strings.write_string(sb, "] ") + if f.exported { + strings.write_string(sb, "export ") + } if f.name != "" { - strings.write_byte(sb, '$') - strings.write_quoted_string(sb, f.name) + strings.write_string(sb, external_kind_string[.FUNC]) strings.write_byte(sb, ' ') + strings.write_quoted_string(sb, f.name) } write_func_type(sb, f.type) + if f.imported { - strings.write_string(sb, "\n import ") + strings.write_string(sb, "\n import ") strings.write_quoted_string(sb, f.import_module) strings.write_string(sb, " ") strings.write_quoted_string(sb, f.import_field) @@ -216,7 +242,7 @@ sbprint_module :: proc(sb: ^strings.Builder, m: Module) { strings.write_byte(sb, '\n') if len(f.locals) != 0 { - strings.write_string(sb, " locals:") + strings.write_string(sb, " locals:") for g in f.locals { strings.write_byte(sb, ' ') if g.count > 1 { @@ -229,17 +255,7 @@ sbprint_module :: proc(sb: ^strings.Builder, m: Module) { } if f.body_size != 0 { - tmp_sb: strings.Builder - defer strings.builder_destroy(&tmp_sb) - text := sbprint_function(&tmp_sb, m, f, func_relocs, &label_names) - for line in strings.split_lines_iterator(&text) { - if line == "" { - continue - } - strings.write_string(sb, " ") - strings.write_string(sb, line) - strings.write_byte(sb, '\n') - } + sbprint_function(sb, m, f, func_relocs, &label_names) } } }