code wiki / _hdl_build / nx_wasm_vm_gate.nx

nx_wasm_vm_gate.nx source

↩ module page · 46 lines · 3219 B

1// nx_wasm_vm_gate.nx -- R0: the sovereign WASM parser (nx_wasm_vm) parses the REAL shipped nx_vcodec.wasm binary and 2// recovers its structure -- function count, memory, and the named exports the codec.html demo calls. This proves the 3// parser works on the actual artifact before the executor runs it (R1/R2). 4import "nx_syscalls.nx" 5import "nx_gate_emit_lib.nx" 6import "nx_wasm_vm.nx" 7 8func main() -> i64 { 9 g_puts("nx_wasm_vm gate R0 (sovereign WASM parser on the REAL nx_vcodec.wasm, MEASURED)\n" as *u8) 10 var pass: i64 = 0; var total: i64 = 0 11 12 let box: *i64 = sys_mmap(16) as *i64 13 let wasm: *u8 = sys_read_file("/mnt/c/Users/elder/nishi-core/nxc2/web_assets/_video_build/nx_vcodec.wasm" as *u8, box) 14 if (wasm as i64) == 0 { g_puts(" FAIL cannot read nx_vcodec.wasm\n" as *u8); g_puts("verdict=RED\n" as *u8); sys_exit(1); return 1 } 15 let wlen: i64 = box[0] 16 g_puts(" [measure] wasm bytes=" as *u8); g_pn(wlen); g_puts(" magic ok=" as *u8) 17 var magic_ok: i64 = 0 18 if wasm[0]==(0 as u8) { if wasm[1]==(0x61 as u8) { if wasm[2]==(0x73 as u8) { if wasm[3]==(0x6d as u8) { magic_ok=1 } } } } 19 g_pn(magic_ok); g_puts("\n" as *u8) 20 pass = pass + g_check("valid wasm magic" as *u8, magic_ok); total=total+1 21 22 let mod: *WasmMod = wm_new(wasm, wlen) 23 let rc: i64 = wm_parse(mod) 24 g_puts(" [measure] parse rc=" as *u8); g_pn(rc); g_puts(" types=" as *u8); g_pn(mod.n_types) 25 g_puts(" imports=" as *u8); g_pn(mod.n_imports); g_puts(" funcs=" as *u8); g_pn(mod.n_funcs) 26 g_puts(" exports=" as *u8); g_pn(mod.n_exports); g_puts(" mem=" as *u8); g_pn(mod.mem_bytes); g_puts(" B\n" as *u8) 27 pass = pass + g_check("module parses cleanly (rc=0)" as *u8, rc == 0); total=total+1 28 pass = pass + g_check("recovered a sane function count (> 30)" as *u8, mod.n_funcs > 30); total=total+1 29 pass = pass + g_check("recovered a linear memory" as *u8, mod.mem_bytes > 0); total=total+1 30 31 let e_enc: i64 = wm_find_export(mod, "vc_wasm_encode" as *u8) 32 let e_dec: i64 = wm_find_export(mod, "vc_wasm_decode" as *u8) 33 let e_cur: i64 = wm_find_export(mod, "vc_cur_off" as *u8) 34 let e_str: i64 = wm_find_export(mod, "vc_stream_off" as *u8) 35 let e_bad: i64 = wm_find_export(mod, "does_not_exist" as *u8) 36 g_puts(" [measure] export indices: vc_wasm_encode=" as *u8); g_pn(e_enc); g_puts(" vc_wasm_decode=" as *u8); g_pn(e_dec) 37 g_puts(" vc_cur_off=" as *u8); g_pn(e_cur); g_puts(" vc_stream_off=" as *u8); g_pn(e_str); g_puts(" (missing=" as *u8); g_pn(e_bad); g_puts(")\n" as *u8) 38 pass = pass + g_check("found exported vc_wasm_encode" as *u8, e_enc >= 0); total=total+1 39 pass = pass + g_check("found exported vc_wasm_decode" as *u8, e_dec >= 0); total=total+1 40 pass = pass + g_check("found exported accessors (cur+stream)" as *u8, (e_cur >= 0) & (e_str >= 0)); total=total+1 41 pass = pass + g_check("unknown export correctly not found (-1)" as *u8, e_bad < 0); total=total+1 42 43 g_puts("---- wasm_vm gate R0: passed " as *u8); g_pn(pass); g_puts(" / " as *u8); g_pn(total); g_puts(" ----\n" as *u8) 44 if pass == total { g_puts("verdict=GREEN\n" as *u8); sys_exit(0); return 0 } 45 g_puts("verdict=RED\n" as *u8); sys_exit(1); return 1 46}