Samsung / walrus

WebAssembly Lightweight RUntime
Apache License 2.0
37 stars 10 forks source link

Bugfix and improve debug mode #109

Closed GorogPeter closed 1 year ago

GorogPeter commented 1 year ago

Old debug mode:

function type 0x556f7987a5d0
requiredStackSize 16, requiredStackSizeDueToLocal 0
0: I32Eqz src: 0 dst: 8
16: jump_if_true srcOffset: 8 dst: 64
32: const32 dstOffset: 8 value: 42
48: move64 srcOffset: 8 dstOffset: 0 
64: end resultOffsets: 0  
function type 0x556f7987a5d0
requiredStackSize 32, requiredStackSizeDueToLocal 8
0: I32Eqz src: 0 dst: 16
16: jump_if_true srcOffset: 16 dst: 128
32: const32 dstOffset: 24 value: 1
48: I32Eqsrc1: 0 src2: 24 dst: 16
64: jump_if_true srcOffset: 16 dst: 176
80: const32 dstOffset: 16 value: 7
96: move64 srcOffset: 16 dstOffset: 8 
112: jump dst: 208
128: const32 dstOffset: 16 value: 42
144: move64 srcOffset: 16 dstOffset: 8 
160: jump dst: 208
176: const32 dstOffset: 16 value: 99
192: move64 srcOffset: 16 dstOffset: 8 
208: end resultOffsets: 8  
invoke block1(0) expect value(0) (line: 35) : OK
invoke block1(1) expect value(42) (line: 36) : OK
invoke block2(0) expect value(42) (line: 38) : OK
invoke block2(1) expect value(99) (line: 39) : OK
invoke block2(2) expect value(7) (line: 40) : OK

New one:

| function type                   : 0x55f83d3bc5d0
| required stack size             :       16 bytes
| required stack size due to local:        0 bytes
| bytecode size                   :      122 bytes
|
|  address        | size | opcode          | note      
|-----------------+------+-----------------+-----------------
|               0 |   24 | I32Eqz          | src: 0 dst: 8
|              24 |   24 | jump_if_true    | srcOffset: 8 dst: 96
|              48 |   24 | const32         | dstOffset: 8 value: 42
|              72 |   24 | move64          | srcOffset: 8 dstOffset: 0 
|              96 |   26 | end             | resultOffsets: 0 
|-----------------+------+-----------------+-----------------

| function type                   : 0x55f83d3bc5d0
| required stack size             :       32 bytes
| required stack size due to local:        8 bytes
| bytecode size                   :      338 bytes
|
|  address        | size | opcode          | note      
|-----------------+------+-----------------+-----------------
|               0 |   24 | I32Eqz          | src: 0 dst: 16
|              24 |   24 | jump_if_true    | srcOffset: 16 dst: 192
|              48 |   24 | const32         | dstOffset: 24 value: 1
|              72 |   24 | I32Eq           | src1: 0 src2: 24 dst: 16
|              96 |   24 | jump_if_true    | srcOffset: 16 dst: 264
|             120 |   24 | const32         | dstOffset: 16 value: 7
|             144 |   24 | move64          | srcOffset: 16 dstOffset: 8 
|             168 |   24 | jump            | dst: 312
|             192 |   24 | const32         | dstOffset: 16 value: 42
|             216 |   24 | move64          | srcOffset: 16 dstOffset: 8 
|             240 |   24 | jump            | dst: 312
|             264 |   24 | const32         | dstOffset: 16 value: 99
|             288 |   24 | move64          | srcOffset: 16 dstOffset: 8 
|             312 |   26 | end             | resultOffsets: 8 
|-----------------+------+-----------------+-----------------

invoke block1(0) expect value(0) (line: 35) : OK
invoke block1(1) expect value(42) (line: 36) : OK
invoke block2(0) expect value(42) (line: 38) : OK
invoke block2(1) expect value(99) (line: 39) : OK
invoke block2(2) expect value(7) (line: 40) : OK
GorogPeter commented 1 year ago

I closed this pull request to separate the two main improvements (improving debug mode and printing error messages). Soon I'll make 2 separate pull request for each improvements. Sorry for the overcomplicating.

clover2123 commented 1 year ago

Ok thanks!