$ /opt/homebrew/bin/wasm-validate --enable-all fixtures/wasm/ledger.wasm [exit 0] $ /opt/homebrew/bin/wasm-objdump -h -x fixtures/wasm/ledger.wasm ledger.wasm: file format wasm 0x1 Sections: Type start=0x0000000a end=0x0000001a (size=0x00000010) count: 3 Import start=0x0000001c end=0x00000027 (size=0x0000000b) count: 1 Function start=0x00000029 end=0x0000002e (size=0x00000005) count: 4 Memory start=0x00000030 end=0x00000033 (size=0x00000003) count: 1 Export start=0x00000035 end=0x0000006e (size=0x00000039) count: 5 Code start=0x00000071 end=0x0000010f (size=0x0000009e) count: 4 Data start=0x00000111 end=0x00000122 (size=0x00000011) count: 1 Section Details: Type[3]: - type[0] (i32) -> nil - type[1] (i32, i32) -> i32 - type[2] (i32) -> i32 Import[1]: - func[0] sig=0 <- env.log Function[4]: - func[1] sig=1 - func[2] sig=2 - func[3] sig=1 - func[4] sig=2 Memory[1]: - memory[0] pages: initial=1 Export[5]: - memory[0] -> "memory" - func[1] -> "percent_change" - func[2] -> "grade" - func[3] -> "total" - func[4] -> "grade_label" Code[4]: - func[1] size=23 - func[2] size=63 - func[3] size=44 - func[4] size=23 Data[1]: - segment[0] memory=0 size=10 - init i32=1024 - 0000400: 4600 4400 4300 4200 4100 F.D.C.B.A. [exit 0] $ /opt/homebrew/bin/wasm2wat --enable-all fixtures/wasm/ledger.wasm (module (type (;0;) (func (param i32))) (type (;1;) (func (param i32 i32) (result i32))) (type (;2;) (func (param i32) (result i32))) (import "env" "log" (func (;0;) (type 0))) (func (;1;) (type 1) (param i32 i32) (result i32) local.get 0 i32.eqz if (result i32) ;; label = @1 i32.const 0 else local.get 1 local.get 0 i32.sub i32.const 100 i32.mul local.get 0 i32.div_s end) (func (;2;) (type 2) (param i32) (result i32) (local i32) local.get 0 i32.const 10 i32.div_s local.set 1 block (result i32) ;; label = @1 block ;; label = @2 block ;; label = @3 block ;; label = @4 block ;; label = @5 block ;; label = @6 local.get 1 br_table 4 (;@2;) 4 (;@2;) 4 (;@2;) 4 (;@2;) 4 (;@2;) 4 (;@2;) 3 (;@3;) 2 (;@4;) 1 (;@5;) 0 (;@6;) 0 (;@6;) 4 (;@2;) end i32.const 4 br 4 (;@1;) end i32.const 3 br 3 (;@1;) end i32.const 2 br 2 (;@1;) end i32.const 1 br 1 (;@1;) end i32.const 0 end) (func (;3;) (type 1) (param i32 i32) (result i32) (local i32 i32) block ;; label = @1 loop ;; label = @2 local.get 3 local.get 1 i32.ge_s br_if 1 (;@1;) local.get 2 local.get 0 local.get 3 i32.const 4 i32.mul i32.add i32.load i32.add local.set 2 local.get 3 i32.const 1 i32.add local.set 3 br 0 (;@2;) end end local.get 2) (func (;4;) (type 2) (param i32) (result i32) (local i32) local.get 0 call 2 local.set 1 local.get 1 call 0 i32.const 1024 local.get 1 i32.const 2 i32.mul i32.add) (memory (;0;) 1) (export "memory" (memory 0)) (export "percent_change" (func 1)) (export "grade" (func 2)) (export "total" (func 3)) (export "grade_label" (func 4)) (data (;0;) (i32.const 1024) "F\00D\00C\00B\00A\00")) [exit 0]