update README.md

This commit is contained in:
ValKmjolnir 2022-04-27 12:49:29 +08:00
parent 7417d5e635
commit c4b7712e53
1 changed files with 160 additions and 83 deletions

243
README.md
View File

@ -1556,15 +1556,20 @@ hello
[vm] error: error occurred this line [vm] error: error occurred this line
[vm] native function error. [vm] native function error.
trace back: trace back:
0x00000088: callb 0x22 <__builtin_die@0x417620> (lib.nas:19) 0x000000ac: 40 00 00 00 25 callb 0x25 <__builtin_die@0x419c00> (lib.nas:131)
0x000002af: callfv 0x1 (a.nas:5) 0x00000463: 3e 00 00 00 01 callfv 0x1 (a.nas:4)
0x000002b3: callfv 0x0 (a.nas:7) 0x00000467: 3e 00 00 00 00 callfv 0x0 (a.nas:6)
vm stack(limit 10, total 5): vm stack(0x7fffcdeb0210<sp+77>, limit 10, total 10):
| null | 0x00000056 | null |
| addr | pc:0x2af 0x00000055 | pc | 0x463
| func | <0x6c62c0> entry:0x88 0x00000054 | addr | 0x7fffcdeb0220
| addr | pc:0x2b3 0x00000053 | str | <0xf38370> error occurred this line
| func | <0x6c8910> entry:0x2a9 0x00000052 | nil |
0x00000051 | func | <0xef2d70> entry:0x45d
0x00000050 | pc | 0x467
0x0000004f | addr | 0x0
0x0000004e | nil |
0x0000004d | nil |
``` ```
### 2. stack overflow crash info ### 2. stack overflow crash info
@ -1584,22 +1589,21 @@ func(f){
```javascript ```javascript
[vm] stack overflow [vm] stack overflow
trace back: trace back:
0x0000000d: calll 0x1 (a.nas:5) 0x00000468: 3e 00 00 00 01 callfv 0x1 (a.nas:5)
0x0000000f: callfv 0x1 (a.nas:5) 0x00000468: 1620 same call(s)
0x0000000f: 2044 same call(s) 0x00000460: 3e 00 00 00 01 callfv 0x1 (a.nas:2)
0x00000007: callfv 0x1 (a.nas:2) 0x0000046c: 3e 00 00 00 01 callfv 0x1 (a.nas:3)
0x00000013: callfv 0x1 (a.nas:3) vm stack(0x7ffffb444450<sp+77>, limit 10, total 8112):
vm stack(limit 10, total 4095): 0x00001ffc | func | <0x11f3860> entry:0x466
| func | <0x24f1f10> entry:0xd 0x00001ffb | func | <0x11f3860> entry:0x466
| addr | pc:0xf 0x00001ffa | pc | 0x468
| func | <0x24f1f10> entry:0xd 0x00001ff9 | addr | 0x7ffffb463ea0
| addr | pc:0xf 0x00001ff8 | func | <0x11f3860> entry:0x466
| func | <0x24f1f10> entry:0xd 0x00001ff7 | nil |
| addr | pc:0xf 0x00001ff6 | func | <0x11f3860> entry:0x466
| func | <0x24f1f10> entry:0xd 0x00001ff5 | pc | 0x468
| addr | pc:0xf 0x00001ff4 | addr | 0x7ffffb463e50
| func | <0x24f1f10> entry:0xd 0x00001ff3 | func | <0x11f3860> entry:0x466
| addr | pc:0xf
``` ```
### 3. normal vm error crash info ### 3. normal vm error crash info
@ -1615,9 +1619,9 @@ func(){
```javascript ```javascript
[vm] callv: must call a vector/hash/string [vm] callv: must call a vector/hash/string
trace back: trace back:
0x00000008: callv 0x0 (a.nas:3) 0x00000461: 3b 00 00 00 00 callv 0x0 (a.nas:3)
vm stack(limit 10, total 1): vm stack(0x7fffecc93c50<sp+77>, limit 10, total 1):
| num | 0 0x0000004d | num | 0
``` ```
### 4. detailed crash info ### 4. detailed crash info
@ -1625,39 +1629,111 @@ vm stack(limit 10, total 1):
Use command __`-d`__ or __`--detail`__ the trace back info will show more details: Use command __`-d`__ or __`--detail`__ the trace back info will show more details:
```javascript ```javascript
hello world hello
[vm] error: exception test [vm] error: error occurred this line
[vm] native function error. [vm] native function error.
trace back: trace back:
0x00000088: callb 0x22 <__builtin_die@0x417280> (lib.nas:19) 0x000000ac: 40 00 00 00 25 callb 0x25 <__builtin_die@0x419c00> (lib.nas:131)
0x00000312: callfv 0x1 (test/exception.nas:16) 0x00000463: 3e 00 00 00 01 callfv 0x1 (a.nas:4)
0x00000346: callfv 0x0 (test/exception.nas:39) 0x00000467: 3e 00 00 00 00 callfv 0x0 (a.nas:6)
vm stack(limit 10, total 5): vm stack(0x7ffff0019810<sp+77>, limit 10, total 10):
| null | 0x00000056 | null |
| addr | pc:0x312 0x00000055 | pc | 0x463
| func | <0x23ced40> entry:0x88 0x00000054 | addr | 0x7ffff0019820
| addr | pc:0x346 0x00000053 | str | <0x14a7890> error occurred this line
| func | <0x23d1610> entry:0x30c 0x00000052 | nil |
mcall address: 0x24c2158 0x00000051 | func | <0x1462290> entry:0x45d
global: 0x00000050 | pc | 0x467
[0x00000000] | func | <0x23f11f0> entry:0x5 0x0000004f | addr | 0x0
[0x00000001] | func | <0x23ce2a0> entry:0xc 0x0000004e | nil |
[0x00000002] | func | <0x23ce340> entry:0x14 0x0000004d | nil |
... maddr:
[0x0000001b] | hash | <0x24a8480> {14 val} (0x0)
... localr:
[0x00000021] | num | 0.3048 (0x7ffff0019860)
[0x00000022] | num | 3.7854 funcr:
... (<0x1452d40> entry:0xac)
[0x0000002e] | num | 57.2958 global(0x7ffff0019340<sp+0>):
[0x0000002f] | hash | <0x24a85a0> {16 val} 0x00000000 | func | <0x146faf0> entry:0x5
[0x00000030] | hash | <0x24a8600> {4 val} 0x00000001 | func | <0x14528e0> entry:0xc
... 0x00000002 | func | <0x146fc10> entry:0x14
[0x00000035] | func | <0x23d17f0> entry:0x335 0x00000003 | func | <0x1445700> entry:0x1c
local: 0x00000004 | func | <0x1452900> entry:0x23
[0x00000000] | nil | 0x00000005 | func | <0x14411c0> entry:0x29
[0x00000001] | str | <0x24b9410> exception test 0x00000006 | func | <0x1441260> entry:0x31
no upvalue exists 0x00000007 | func | <0x1441300> entry:0x39
0x00000008 | func | <0x14413a0> entry:0x40
0x00000009 | func | <0x1441440> entry:0x47
0x0000000a | func | <0x14414e0> entry:0x4e
0x0000000b | func | <0x145eea0> entry:0x54
0x0000000c | func | <0x145ef40> entry:0x5d
0x0000000d | func | <0x145efe0> entry:0x6a
0x0000000e | func | <0x145f080> entry:0x71
0x0000000f | func | <0x145f120> entry:0x78
0x00000010 | func | <0x145f1c0> entry:0x7f
0x00000011 | func | <0x14457a0> entry:0x87
0x00000012 | func | <0x14457c0> entry:0x8f
0x00000013 | func | <0x1452b60> entry:0x96
0x00000014 | func | <0x1452c00> entry:0x9d
0x00000015 | func | <0x1452ca0> entry:0xa3
0x00000016 | func | <0x1452d40> entry:0xac
0x00000017 | func | <0x1452de0> entry:0xb4
0x00000018 | func | <0x1452e80> entry:0xbb
0x00000019 | func | <0x1452ea0> entry:0xc5
0x0000001a | func | <0x146cd70> entry:0xdc
0x0000001b | func | <0x146ce10> entry:0xe4
0x0000001c | func | <0x146ceb0> entry:0xec
0x0000001d | func | <0x146cf50> entry:0xf4
0x0000001e | func | <0x146cff0> entry:0xfc
0x0000001f | func | <0x146d090> entry:0x103
0x00000020 | func | <0x14724c0> entry:0x10a
0x00000021 | func | <0x1472560> entry:0x111
0x00000022 | func | <0x1472600> entry:0x11e
0x00000023 | func | <0x14726a0> entry:0x125
0x00000024 | func | <0x1472740> entry:0x131
0x00000025 | func | <0x14727e0> entry:0x13c
0x00000026 | func | <0x1472880> entry:0x147
0x00000027 | func | <0x1472ee0> entry:0x152
0x00000028 | func | <0x1472f80> entry:0x15d
0x00000029 | func | <0x1473020> entry:0x174
0x0000002a | func | <0x14730c0> entry:0x18d
0x0000002b | func | <0x1473160> entry:0x198
0x0000002c | func | <0x1473200> entry:0x1a4
0x0000002d | func | <0x14732a0> entry:0x1bd
0x0000002e | func | <0x146d0b0> entry:0x1e9
0x0000002f | func | <0x146d0d0> entry:0x1f8
0x00000030 | hash | <0x1495130> {14 val}
0x00000031 | func | <0x145d1a0> entry:0x25c
0x00000032 | hash | <0x1495150> {9 val}
0x00000033 | hash | <0x1495170> {14 val}
0x00000034 | hash | <0x1495190> {16 val}
0x00000035 | hash | <0x14951b0> {4 val}
0x00000036 | hash | <0x14951d0> {1 val}
0x00000037 | hash | <0x14951f0> {1 val}
0x00000038 | num | 0.0174533
0x00000039 | num | 0.5925
0x0000003a | num | 0.3048
0x0000003b | num | 3.7854
0x0000003c | num | 0.0254
0x0000003d | num | 2.2046
0x0000003e | num | 1.6878
0x0000003f | num | 0.5144
0x00000040 | num | 0.2642
0x00000041 | num | 0.4536
0x00000042 | num | 3.2808
0x00000043 | num | 39.3701
0x00000044 | num | 0.00054
0x00000045 | num | 1.9438
0x00000046 | num | 1852
0x00000047 | num | 57.2958
0x00000048 | func | <0x1461f70> entry:0x41a
0x00000049 | func | <0x1462010> entry:0x42d
0x0000004a | func | <0x14620b0> entry:0x439
0x0000004b | func | <0x1462150> entry:0x446
0x0000004c | func | <0x14621f0> entry:0x453
local(0x7ffff0019860<sp+82>):
0x00000000 | nil |
0x00000001 | str | <0x14a7890> error occurred this line
``` ```
## __Debugger__ ## __Debugger__
@ -1671,6 +1747,7 @@ and the debugger will print this:
```javascript ```javascript
[debug] nasal debug mode [debug] nasal debug mode
input 'h' to get help input 'h' to get help
source code: source code:
--> import("lib.nas"); --> import("lib.nas");
var fib=func(x) var fib=func(x)
@ -1681,15 +1758,15 @@ source code:
for(var i=0;i<31;i+=1) for(var i=0;i<31;i+=1)
print(fib(i),'\n'); print(fib(i),'\n');
next bytecode: next bytecode:
--> 0x00000000: intg 0x34 (test/fib.nas:0) --> 0x00000000: 01 00 00 00 4f intg 0x4f (a.nas:0)
0x00000001: newf 0x5 (lib.nas:1) 0x00000001: 0b 00 00 00 05 newf 0x5 (lib.nas:5)
0x00000002: intl 0x2 (lib.nas:1) 0x00000002: 02 00 00 00 02 intl 0x2 (lib.nas:5)
0x00000003: para 0x0 ("filename") (lib.nas:1) 0x00000003: 0d 00 00 00 00 para 0x0 ("filename") (lib.nas:5)
0x00000004: jmp 0x7 (lib.nas:1) 0x00000004: 32 00 00 00 07 jmp 0x7 (lib.nas:5)
0x00000005: callb 0x21 <__builtin_import@0x417190> (lib.nas:1) 0x00000005: 40 00 00 00 24 callb 0x24 <__builtin_import@0x419b20> (lib.nas:6)
0x00000006: ret 0x0 (lib.nas:1) 0x00000006: 4a 00 00 00 00 ret 0x0 (lib.nas:6)
0x00000007: loadg 0x0 (lib.nas:1) 0x00000007: 03 00 00 00 00 loadg 0x0 (lib.nas:5)
vm stack(limit 5, total 0) vm stack(0x7fffe05e3190<sp+79>, limit 5, total 0)
>> >>
``` ```
@ -1714,7 +1791,7 @@ If want help, input `h` to get help.
When running the debugger, you could see what is on stack. When running the debugger, you could see what is on stack.
This will help you debugging or learning how the vm works: This will help you debugging or learning how the vm works:
```bash ```javascript
source code: source code:
import("lib.nas"); import("lib.nas");
var fib=func(x) var fib=func(x)
@ -1725,19 +1802,19 @@ source code:
for(var i=0;i<31;i+=1) for(var i=0;i<31;i+=1)
print(fib(i),'\n'); print(fib(i),'\n');
next bytecode: next bytecode:
0x000002f0: para 0x3e ("x") (test/fib.nas:2) 0x00000458: 4a 00 00 00 00 ret 0x0 (lib.nas:463)
0x000002f1: jmp 0x301 (test/fib.nas:2) 0x00000459: 03 00 00 00 4c loadg 0x4c (lib.nas:463)
0x000002f2: calll 0x1 (test/fib.nas:4) 0x0000045a: 0b 00 00 04 5e newf 0x45e (a.nas:2)
--> 0x000002f3: lessc 0x2 (2) (test/fib.nas:4) 0x0000045b: 02 00 00 00 02 intl 0x2 (a.nas:2)
0x000002f4: jf 0x2f7 (test/fib.nas:4) 0x0000045c: 0d 00 00 00 1c para 0x1c ("x") (a.nas:2)
0x000002f5: calll 0x1 (test/fib.nas:4) 0x0000045d: 32 00 00 04 6d jmp 0x46d (a.nas:2)
0x000002f6: ret 0x0 (test/fib.nas:4) --> 0x0000045e: 39 00 00 00 01 calll 0x1 (a.nas:4)
0x000002f7: callg 0x33 (test/fib.nas:5) 0x0000045f: 2d 00 00 00 02 lessc 0x2 (2) (a.nas:4)
vm stack(limit 5, total 6): vm stack(0x7fffe05e3190<sp+79>, limit 5, total 6):
| num | 0 0x00000054 | pc | 0x476
| addr | pc:0x30a 0x00000053 | addr | 0x0
| num | 0 0x00000052 | num | 0
| nil | 0x00000051 | nil |
| func | <0xed92d0> entry:0x2f2 0x00000050 | nil |
>> >>
``` ```