🎨 format

This commit is contained in:
ValKmjolnir
2025-06-02 13:43:00 +08:00
parent 2cc5bb8625
commit af3d93ab64
53 changed files with 185 additions and 185 deletions
+15 -15
View File
@@ -40,15 +40,15 @@ These two expressions have the same first set,so `LL(1)` is useless for this lan
Problems mentioned above have been solved for a long time, but recently i found a new problem here:
```javascript
var f=func(x,y,z){return x+y+z}
(a,b,c)=(0,1,2);
var f = func(x, y, z) { return x + y + z }
(a, b, c) = (0, 1, 2);
```
This will be recognized as this:
```javascript
var f=func(x,y,z){return x+y+z}(a,b,c)
=(0,1,2);
var f = func(x, y, z) { return x + y + z }(a, b, c)
= (0, 1, 2);
```
and causes fatal syntax error.
@@ -58,9 +58,9 @@ I think this is a serious design fault.
To avoid this syntax error, change program like this, just add a semicolon:
```javascript
var f=func(x,y,z){return x+y+z};
^ here
(a,b,c)=(0,1,2);
var f = func(x, y, z) { return x + y + z };
^ here
(a, b, c) = (0, 1, 2);
```
### version 1.0 parser (last update 2019/10/14)
@@ -222,8 +222,8 @@ Better use `callfv` instead of `callfh`,
making this process slow.
```javascript
var f=func(x,y){return x+y;}
f(1024,2048);
var f = func(x, y) { return x + y; }
f(1024, 2048);
```
```x86asm
@@ -530,12 +530,12 @@ func <0x2a3>:
Now we add coroutine in this runtime:
```javascript
var coroutine={
create: func(function){return __cocreate;},
resume: func(co) {return __coresume;},
yield: func(args...) {return __coyield; },
status: func(co) {return __costatus;},
running:func() {return __corun; }
var coroutine = {
create: func(function) { return __cocreate; },
resume: func(co) { return __coresume; },
yield: func(args...) { return __coyield; },
status: func(co) { return __costatus; },
running: func() { return __corun; }
};
```
+16 -16
View File
@@ -40,23 +40,23 @@
上面这个问题已经解决很久了,不过我最近发现了一个新的语法问题:
```javascript
var f=func(x,y,z){return x+y+z}
(a,b,c)=(0,1,2);
var f = func(x, y, z) { return x + y + z }
(a, b, c) = (0, 1, 2);
```
这种写法会被错误识别合并成下面这种:
```javascript
var f=func(x,y,z){return x+y+z}(a,b,c)
=(0,1,2);
var f = func(x, y, z) { return x + y + z }(a, b, c)
= (0, 1, 2);
```
语法分析器会认为这是个严重的语法错误。我在Flightgear中也测试了这个代码,它内置的语法分析器也认为这是错误语法。当然我认为这是语法设计中的一个比较严重的缺漏。为了避免这个语法问题,只需要添加一个分号就可以了:
```javascript
var f=func(x,y,z){return x+y+z};
^ 就是这里
(a,b,c)=(0,1,2);
var f = func(x, y, z) { return x + y + z };
^ 就是这里
(a, b, c) = (0, 1, 2);
```
### version 1.0 parser (last update 2019/10/14)
@@ -193,15 +193,15 @@ for (var i=0;i<4000000;i+=1);
2021/6/3 update:
修复了垃圾收集器还是他妈的会重复收集的bug,这次我设计了三个标记状态来保证垃圾是被正确收集了。
修复了垃圾收集器还是会重复收集的bug,这次我设计了三个标记状态来保证垃圾是被正确收集了。
`callf`指令拆分为`callfv``callfh`。并且`callfv`将直接从`val_stack`获取传参,而不是先通过一个`vm_vec`把参数收集起来再传入,后者是非常低效的做法。
建议更多使用`callfv`而不是`callfh`,因为`callfh`只能从栈上获取参数并整合为`vm_hash`之后才能传给该指令进行处理,拖慢执行速度。
```javascript
var f=func(x,y){return x+y;}
f(1024,2048);
var f = func(x, y) { return x + y; }
f(1024, 2048);
```
```x86asm
@@ -475,12 +475,12 @@ func <0x2a3>:
在这个版本中我们给nasal加入了协程:
```javascript
var coroutine={
create: func(function){return __cocreate;},
resume: func(co) {return __coresume;},
yield: func(args...) {return __coyield; },
status: func(co) {return __costatus;},
running:func() {return __corun; }
var coroutine = {
create: func(function) { return __cocreate; },
resume: func(co) { return __coresume; },
yield: func(args...) { return __coyield; },
status: func(co) { return __costatus; },
running: func() { return __corun; }
};
```
+4 -4
View File
@@ -67,7 +67,7 @@ __`vec`__ has unlimited length and can store all types of values.
```javascript
var vec = [];
var vec = [0, nil, {}, [], func(){return 0}];
var vec = [0, nil, {}, [], func() { return 0 }];
append(vec, 0, 1, 2);
```
@@ -255,7 +255,7 @@ if (1) {
While loop and for loop is simalar to C/C++.
```javascript
while(condition) {
while (condition) {
continue;
}
for (var i = 0; i<10; i += 1) {
@@ -327,7 +327,7 @@ var fib = func(f) {
}(
func(f) {
return func(x) {
if(x<2) return x;
if (x<2) return x;
return f(f)(x-1)+f(f)(x-2);
}
}
@@ -597,7 +597,7 @@ var fib(var* args, usize size, gc* ngc) {
// if you want your function safer, try this
// nas_err will print the error info on screen
// and return vm_null for runtime to interrupt
if(num.type!=vm_num) {
if (num.type!=vm_num) {
return nas_err("extern_fib", "\"num\" must be number");
}
// ok, you must know that vm_num now is not managed by gc
+4 -4
View File
@@ -64,7 +64,7 @@ __`vec`__ 有不受限制的长度并且可以存储所有类型的数据。(当
```javascript
var vec = [];
var vec = [0, nil, {}, [], func(){return 0}];
var vec = [0, nil, {}, [], func() { return 0 }];
append(vec, 0, 1, 2);
```
@@ -247,7 +247,7 @@ if (1) {
while循环和for循环大体上与C/C++是一致的。
```javascript
while(condition) {
while (condition) {
continue;
}
for (var i = 0; i<10; i += 1) {
@@ -314,7 +314,7 @@ var fib = func(f) {
}(
func(f) {
return func(x) {
if(x<2) return x;
if (x<2) return x;
return f(f)(x-1)+f(f)(x-2);
}
}
@@ -579,7 +579,7 @@ var fib(var* args, usize size, gc* ngc) {
var num = args[0];
// 如果你想让这个函数有更强的稳定性,那么一定要进行合法性检查
// nas_err会输出错误信息并返回错误类型让虚拟机终止执行
if(num.type!=vm_num) {
if (num.type!=vm_num) {
return nas_err("extern_fib", "\"num\" must be number");
}
// vm_num作为普通的数字类型,不是内存管理的对象,所以无需申请