update README & bug fixed

This commit is contained in:
ValKmjolnir 2022-02-13 16:10:02 +08:00
parent e7f503fae1
commit 9139e34c0b
7 changed files with 191 additions and 193 deletions

110
README.md
View File

@ -14,6 +14,8 @@
* [__Why Writing Nasal Interpreter__](#why-writing-nasal-interpreter)
* [__Compile__](#how-to-compile)
* [__Usage__](#how-to-use)
* [__Release Notes__](#release-notes)
* [v8.0](#version-80-release)
* [__Parser__](#parser)
* [v1.0](#version-10-parser-last-update-20191014)
* [__Abstract Syntax Tree__](#abstract-syntax-tree)
@ -27,11 +29,13 @@
* [v6.0](#version-60-vm-last-update-202161)
* [v6.5](#version-65-vm-last-update-2021624)
* [v7.0](#version-70-vm-last-update-2021108)
* [v8.0](#version-80-vm-latest)
* [v8.0](#version-80-vm-last-update-2022212)
* [v9.0](#version-90-vm-latest)
* [__Benchmark__](#benchmark)
* [v6.5 (i5-8250U windows 10)](#version-65-i5-8250u-windows10-2021619)
* [v6.5 (i5-8250U ubuntu-WSL)](#version-70-i5-8250u-ubuntu-wsl-on-windows10-2021629)
* [v8.0 (R9-5900HX ubuntu-WSL)](#version-80-r9-5900hx-ubuntu-wsl-2022123)
* [v9.0 (R9-5900HX ubuntu-WSL)](#version-90-r9-5900hx-ubuntu-wsl-2022213)
* [__Tutorial__](#tutorial)
* [basic value type](#basic-value-type)
* [operators](#operators)
@ -59,9 +63,9 @@
__Contact us if having great ideas to share!__
* __E-mail__: lhk101lhk101@qq.com
* __E-mail__: __lhk101lhk101@qq.com__
* __QQ__: 896693328
* __QQ__: __896693328__
## __Introduction__
@ -100,12 +104,11 @@ this interpreter a useful tool in your own projects (such as a script in a game
## __How to Compile__
Better choose the latest update of the interpreter.
Download the source code and build it!
It's quite easy to build this interpreter.
Download the source and build it! It's quite easy to build this interpreter.
__MUST USE__ __`-O2/-O3`__ if want to optimize the interpreter!
__CAUTION__: If want to use the release zip/tar.gz file to build the interpreter, please read the __Release Notes__ below to make sure this release file has no fatal bugs. Also in __Release Notes__ there's tips to fix the release manually.
Also remember to use g++ or clang++.(mingw-w64 in __`Windows`__)
Also remember to use g++ or clang++.(`mingw-w64` in __`Windows`__)
> [cpp compiler] -std=c++11 -O3 main.cpp -o nasal.exe -fno-exceptions
@ -129,7 +132,7 @@ Use these commands to get version of interpreter:
/ \/ / _` / __|/ _` | |
/ /\ / (_| \__ \ (_| | |
\_\ \/ \__,_|___/\__,_|_|
nasal interpreter ver 8.0
nasal interpreter ver 9.0
thanks to : https://github.com/andyross/nasal
code repo : https://github.com/ValKmjolnir/Nasal-Interpreter
code repo : https://gitee.com/valkmjolnir/Nasal-Interpreter
@ -145,7 +148,7 @@ Use these commands to get help(see more debug commands in help):
nasal <option>
option:
-h, --help | get help.
-v, --version | get version of nasal interpreter.
-v, --version | get version of nasal interpreter.
nasal <file>
file:
@ -154,12 +157,15 @@ file:
nasal [options...] <file>
option:
-l, --lex | view token info.
-a, --ast | view abstract syntax tree.
-a, --ast | view abstract syntax tree.
-c, --code | view bytecode.
-e, --exec | execute.
-t, --time | execute and get the running time.
-o, --opcnt | execute and count used operands.
-d, --detail | execute and get detail crash info.
| get garbage collector info if did not crash.
-op, --optimize| use optimizer(beta).
| if want to use -op and run, please use -op -e/-t/-o/-d.
-dbg, --debug | debug mode (this will ignore -t -o -d).
file:
input file name to execute script file.
@ -171,6 +177,21 @@ If your system is __`Windows`__ and you want to output unicode,please use this c
The interpreter's interactive mode will do this automatically,so you don't need to run this command if you use the interactive interpreter.
## __Release Notes__
### __version 8.0 release__
I made a __big mistake__ in `v8.0` release:
in __`nasal_dbg.h:215`__: `auto canary=gc.stack+STACK_MAX_DEPTH-1;`
this will cause incorrect `stackoverflow` error.
please change it to:
`canary=gc.stack+STACK_MAX_DEPTH-1;`
If do not change this line, only the debugger runs abnormally. this bug is fixed in `v9.0`
## __Parser__
`LL(k)` parser.
@ -562,7 +583,7 @@ a=b=0;
0x00000009: nop 0x00000000
```
### version 8.0 vm (latest)
### version 8.0 vm (last update 2022/2/12)
2021/10/8 update:
@ -627,6 +648,19 @@ The format of output information of bytecodes changes to this:
Delete `op_pone` and `op_pzero`.
Both of them are meaningless and will be replaced by `op_pnum`.
### version 9.0 vm (latest)
2022/2/12 update:
Local values now are __stored on stack__.
So function calling will be faster than before.
Because in v8.0 when calling a function,
new `vm_vec` will be allocated by `nasal_gc`, this makes gc doing mark-sweep too many times and spends a quite lot of time.
In test file `test/bf.nas`, it takes too much time to test the file because this file has too many function calls(see test data below in table `version 8.0 (R9-5900HX ubuntu-WSL 2022/1/23)`).
Upvalue now is generated when creating first new function in the local scope, using `vm_vec`.
And after that when creating new functions, they share the same upvalue, and the upvalue will synchronize with the local scope each time creating a new function.
## Benchmark
### version 6.5 (i5-8250U windows10 2021/6/19)
@ -702,8 +736,9 @@ running time:
|bf.nas|1100.19s||
|mandel.nas|28.98s||
|life.nas|0.857s(windows) 0.56(ubuntu WSL)||
|ycombinator.nas|0.64s||
|fib.nas|0.28s||
|bfs.nas|0.156s|changed test file|
|bfs.nas|0.156s|random result|
|pi.nas|0.0625s||
|bigloop.nas|0.047s||
|calc.nas|0.03125s|changed test file|
@ -711,10 +746,30 @@ running time:
|ascii-art.nas|0s||
|quick_sort.nas|0s||
### version 9.0 (R9-5900HX ubuntu-WSL 2022/2/13)
running time:
|file|total time|info|
|:----|:----|:----|
|bf.nas|276.55s|great improvement|
|mandel.nas|28.16s||
|ycombinator.nas|0.578s||
|life.nas|0.649s(windows) 0.2(ubuntu WSL)||
|fib.nas|0.234s|little improvement|
|bfs.nas|0.14s|random result|
|pi.nas|0.0625s||
|bigloop.nas|0.047s||
|calc.nas|0.0469s|changed test file|
|quick_sort.nas|0.016s|changed test file:100->1e4|
|mandelbrot.nas|0.0156s||
|ascii-art.nas|0s||
## __Tutorial__
Nasal is really __easy__ to learn.
Reading this tutorial will not takes you over 15 minutes.
__If you have learnt C/C++/Javascript before, this will take less time.__
You could totally use it after reading this simple tutorial:
### __basic value type__
@ -1516,3 +1571,34 @@ If want help, input `h` to get help.
<option> <filename> <line>
bk, break | set break point
```
When running the debugger, you could see what is on stack.
This will help you debugging or learning how the vm works:
```bash
source code:
import("lib.nas");
var fib=func(x)
{
--> if(x<2) return x;
return fib(x-1)+fib(x-2);
}
for(var i=0;i<31;i+=1)
print(fib(i),'\n');
next bytecode:
0x000002f0: para 0x3e ("x") (test/fib.nas:2)
0x000002f1: jmp 0x301 (test/fib.nas:2)
0x000002f2: calll 0x1 (test/fib.nas:4)
--> 0x000002f3: lessc 0x2 (2) (test/fib.nas:4)
0x000002f4: jf 0x2f7 (test/fib.nas:4)
0x000002f5: calll 0x1 (test/fib.nas:4)
0x000002f6: ret 0x0 (test/fib.nas:4)
0x000002f7: callg 0x33 (test/fib.nas:5)
vm stack(limit 5, total 6):
| num | 0
| addr | pc:0x30a
| num | 0
| nil |
| func | <0xed92d0> entry:0x2f2
>>
```

View File

@ -35,7 +35,7 @@ void help()
<<" | get garbage collector info if didn't crash.\n"
<<" -op, --optimize| use optimizer(beta).\n"
<<" | if want to use -op and run, please use -op -e/-t/-o/-d.\n"
<<" -dbg, --debug | debug mode (this will ignore -t -o -d).\n"
<<" -dbg, --debug | debug mode (this will ignore -t -o -d -e).\n"
<<"file:\n"
<<" input file name to execute script file.\n";
}

View File

@ -210,10 +210,6 @@ void nasal_dbg::run(
code.push_back(opr_table[i.op]);
imm.push_back(i.num);
}
// set canary and program counter
canary=gc.stack+STACK_MAX_DEPTH-1;
pc=0;
// goto the first operand
goto *code[pc];

View File

@ -39,6 +39,7 @@ protected:
void die(std::string);
/* vm calculation functions*/
bool condition(nasal_ref);
/* vm operands */
void opr_nop();
void opr_intg();
void opr_intl();
@ -132,6 +133,9 @@ void nasal_vm::init(
str_table=strs.data();
files=filenames.data();
files_size=filenames.size();
/* set canary and program counter */
canary=gc.stack+STACK_MAX_DEPTH-1;
pc=0;
}
void nasal_vm::valinfo(nasal_ref& val)
{
@ -900,10 +904,6 @@ void nasal_vm::run(
code.push_back(opr_table[i.op]);
imm.push_back(i.num);
}
// set canary and program counter
canary=gc.stack+STACK_MAX_DEPTH-1;
pc=0;
// goto the first operand
goto *code[pc];

View File

@ -151,7 +151,7 @@ var bf=func(program)
{
var stack=[];
var len=size(program);
var f="import('lib.nas');\nvar ptr=0;\nvar paper=[];\nsetsize(paper,131072);\n";
var f="#automatically generated by bfconvertor.nas\nimport('lib.nas');\nvar ptr=0;\nvar paper=[];\nsetsize(paper,131072);\n";
for(var i=0;i<len;i+=1)
{
var c=chr(program[i]);

View File

@ -87,7 +87,7 @@ var calc=func(codetype,files){
semi+=semi_cnt;
}
println('total: | ',line,' \tline | ',semi,' \tsemi');
println('bytes: | ',bytes,'\tbytes| ',int(bytes/1024),' \tkb');
println(' | ',bytes,'\tbytes| ',int(bytes/1024),' \tkb');
}
calc("source code:",source);

View File

@ -1,3 +1,4 @@
#automatically generated by bfconvertor.nas
import('lib.nas');
var ptr=0;
var paper=[];
@ -76,8 +77,7 @@ while(paper[ptr])
}
ptr+=7.000000;
paper[ptr]+=1.000000;
ptr+=26.000000;
ptr+=1.000000;
ptr+=27.000000;
paper[ptr]+=1.000000;
ptr-=17.000000;
while(paper[ptr])
@ -107,8 +107,7 @@ while(paper[ptr])
{
ptr-=9.000000;
}
ptr+=2.000000;
ptr+=5.000000;
ptr+=7.000000;
while(paper[ptr])
{
paper[ptr]-=1.000000;
@ -138,8 +137,7 @@ while(paper[ptr])
while(paper[ptr])
{
paper[ptr]-=1.000000;
ptr+=3.000000;
ptr+=6.000000;
ptr+=9.000000;
paper[ptr]+=1.000000;
ptr-=9.000000;
}
@ -162,8 +160,7 @@ while(paper[ptr])
ptr+=6.000000;
while(paper[ptr])
{
ptr+=5.000000;
ptr+=2.000000;
ptr+=7.000000;
while(paper[ptr])
{
paper[ptr]-=1.000000;
@ -218,8 +215,7 @@ while(paper[ptr])
ptr-=9.000000;
while(paper[ptr])
{
ptr-=7.000000;
ptr-=2.000000;
ptr-=9.000000;
}
ptr+=7.000000;
while(paper[ptr])
@ -368,8 +364,7 @@ while(paper[ptr])
{
ptr+=9.000000;
}
ptr-=7.000000;
ptr-=2.000000;
ptr-=9.000000;
while(paper[ptr])
{
ptr+=1.000000;
@ -443,8 +438,7 @@ while(paper[ptr])
paper[ptr]+=1.000000;
ptr-=9.000000;
}
ptr+=5.000000;
ptr+=4.000000;
ptr+=9.000000;
while(paper[ptr])
{
ptr+=1.000000;
@ -509,8 +503,7 @@ while(paper[ptr])
ptr+=9.000000;
while(paper[ptr])
{
ptr+=2.000000;
ptr+=7.000000;
ptr+=9.000000;
}
ptr-=9.000000;
while(paper[ptr])
@ -580,8 +573,7 @@ while(paper[ptr])
paper[ptr]-=1.000000;
ptr+=3.000000;
paper[ptr]+=1.000000;
ptr-=2.000000;
ptr-=1.000000;
ptr-=3.000000;
}
ptr-=1.000000;
paper[ptr]+=1.000000;
@ -596,8 +588,7 @@ while(paper[ptr])
paper[ptr]-=1.000000;
ptr-=36.000000;
paper[ptr]+=1.000000;
ptr+=13.000000;
ptr+=23.000000;
ptr+=36.000000;
}
ptr+=5.000000;
}
@ -612,8 +603,7 @@ while(paper[ptr])
{
while(paper[ptr])
{
ptr+=4.000000;
ptr+=5.000000;
ptr+=9.000000;
}
ptr-=9.000000;
paper[ptr]-=1.000000;
@ -631,8 +621,7 @@ while(paper[ptr])
ptr-=3.000000;
while(paper[ptr])
{
ptr-=6.000000;
ptr-=3.000000;
ptr-=9.000000;
}
ptr+=9.000000;
while(paper[ptr])
@ -669,8 +658,7 @@ while(paper[ptr])
ptr-=13.000000;
while(paper[ptr])
{
ptr-=5.000000;
ptr-=4.000000;
ptr-=9.000000;
}
ptr+=4.000000;
while(paper[ptr])
@ -716,8 +704,7 @@ while(paper[ptr])
while(paper[ptr])
{
paper[ptr]-=1.000000;
ptr+=1.000000;
ptr+=2.000000;
ptr+=3.000000;
paper[ptr]+=1.000000;
ptr-=12.000000;
while(paper[ptr])
@ -754,8 +741,7 @@ while(paper[ptr])
{
ptr+=9.000000;
}
ptr-=6.000000;
ptr-=2.000000;
ptr-=8.000000;
}
ptr+=8.000000;
}
@ -775,8 +761,7 @@ while(paper[ptr])
ptr-=4.000000;
}
ptr+=9.000000;
paper[ptr]+=19.000000;
paper[ptr]+=7.000000;
paper[ptr]+=26.000000;
ptr+=2.000000;
while(paper[ptr])
{
@ -898,8 +883,7 @@ while(paper[ptr])
while(paper[ptr])
{
paper[ptr]-=1.000000;
ptr-=8.000000;
ptr-=1.000000;
ptr-=9.000000;
paper[ptr]+=1.000000;
ptr+=9.000000;
}
@ -979,8 +963,7 @@ while(paper[ptr])
paper[ptr]+=1.000000;
ptr+=8.000000;
}
ptr-=3.000000;
ptr-=6.000000;
ptr-=9.000000;
while(paper[ptr])
{
ptr-=9.000000;
@ -1016,8 +999,7 @@ while(paper[ptr])
paper[ptr]+=1.000000;
ptr+=2.000000;
}
ptr-=1.000000;
ptr-=1.000000;
ptr-=2.000000;
while(paper[ptr])
{
paper[ptr]-=1.000000;
@ -1048,8 +1030,7 @@ while(paper[ptr])
while(paper[ptr])
{
paper[ptr]-=1.000000;
ptr+=4.000000;
ptr+=5.000000;
ptr+=9.000000;
paper[ptr]+=1.000000;
ptr-=9.000000;
}
@ -1123,8 +1104,7 @@ while(paper[ptr])
while(paper[ptr])
{
paper[ptr]-=1.000000;
ptr-=1.000000;
ptr-=4.000000;
ptr-=5.000000;
paper[ptr]+=1.000000;
ptr+=5.000000;
}
@ -1313,8 +1293,7 @@ while(paper[ptr])
paper[ptr]-=1.000000;
ptr-=36.000000;
paper[ptr]+=1.000000;
ptr+=1.000000;
ptr+=35.000000;
ptr+=36.000000;
}
ptr+=6.000000;
}
@ -1324,8 +1303,7 @@ while(paper[ptr])
ptr-=9.000000;
}
ptr+=9.000000;
paper[ptr]+=8.000000;
paper[ptr]+=7.000000;
paper[ptr]+=15.000000;
while(paper[ptr])
{
while(paper[ptr])
@ -1415,8 +1393,7 @@ while(paper[ptr])
while(paper[ptr])
{
paper[ptr]-=1.000000;
ptr-=1.000000;
ptr-=4.000000;
ptr-=5.000000;
paper[ptr]+=1.000000;
ptr+=5.000000;
}
@ -1550,8 +1527,7 @@ while(paper[ptr])
ptr-=11.000000;
while(paper[ptr])
{
ptr-=5.000000;
ptr-=4.000000;
ptr-=9.000000;
}
ptr+=4.000000;
while(paper[ptr])
@ -1629,8 +1605,7 @@ while(paper[ptr])
}
ptr+=8.000000;
}
ptr-=5.000000;
ptr-=3.000000;
ptr-=8.000000;
paper[ptr]+=1.000000;
ptr-=1.000000;
while(paper[ptr])
@ -1665,8 +1640,7 @@ while(paper[ptr])
paper[ptr]-=1.000000;
ptr+=3.000000;
paper[ptr]-=1.000000;
ptr-=9.000000;
ptr-=5.000000;
ptr-=14.000000;
paper[ptr]+=1.000000;
ptr+=11.000000;
}
@ -1698,8 +1672,7 @@ while(paper[ptr])
paper[ptr]+=1.000000;
ptr-=3.000000;
}
ptr-=2.000000;
ptr-=10.000000;
ptr-=12.000000;
}
ptr+=4.000000;
while(paper[ptr])
@ -1745,8 +1718,7 @@ while(paper[ptr])
}
ptr+=8.000000;
}
ptr-=3.000000;
ptr-=5.000000;
ptr-=8.000000;
paper[ptr]+=1.000000;
ptr-=1.000000;
while(paper[ptr])
@ -1781,8 +1753,7 @@ while(paper[ptr])
paper[ptr]-=1.000000;
ptr+=4.000000;
paper[ptr]-=1.000000;
ptr-=7.000000;
ptr-=7.000000;
ptr-=14.000000;
paper[ptr]+=1.000000;
ptr+=10.000000;
}
@ -1905,8 +1876,7 @@ while(paper[ptr])
paper[ptr]+=1.000000;
ptr-=3.000000;
}
ptr-=7.000000;
ptr-=5.000000;
ptr-=12.000000;
}
}
ptr+=1.000000;
@ -1951,8 +1921,7 @@ while(paper[ptr])
while(paper[ptr])
{
paper[ptr]-=1.000000;
ptr-=1.000000;
ptr-=3.000000;
ptr-=4.000000;
paper[ptr]+=1.000000;
ptr+=4.000000;
}
@ -2102,8 +2071,7 @@ while(paper[ptr])
{
ptr+=9.000000;
}
ptr-=8.000000;
ptr-=1.000000;
ptr-=9.000000;
while(paper[ptr])
{
ptr+=1.000000;
@ -2188,8 +2156,7 @@ while(paper[ptr])
paper[ptr]+=1.000000;
ptr+=36.000000;
}
ptr+=1.000000;
ptr+=5.000000;
ptr+=6.000000;
}
ptr-=9.000000;
while(paper[ptr])
@ -2211,8 +2178,7 @@ while(paper[ptr])
}
ptr-=9.000000;
paper[ptr]-=1.000000;
ptr-=5.000000;
ptr-=4.000000;
ptr-=9.000000;
while(paper[ptr])
{
ptr-=9.000000;
@ -2252,8 +2218,7 @@ while(paper[ptr])
paper[ptr]-=1.000000;
ptr+=4.000000;
paper[ptr]+=1.000000;
ptr-=5.000000;
ptr-=8.000000;
ptr-=13.000000;
while(paper[ptr])
{
ptr-=9.000000;
@ -2337,8 +2302,7 @@ while(paper[ptr])
ptr-=1.000000;
while(paper[ptr])
{
ptr+=2.000000;
ptr+=7.000000;
ptr+=9.000000;
}
ptr-=8.000000;
}
@ -2491,8 +2455,7 @@ while(paper[ptr])
paper[ptr]+=1.000000;
ptr-=2.000000;
}
ptr+=2.000000;
ptr+=6.000000;
ptr+=8.000000;
}
ptr-=8.000000;
paper[ptr]+=1.000000;
@ -2531,8 +2494,7 @@ while(paper[ptr])
paper[ptr]-=1.000000;
ptr-=10.000000;
paper[ptr]+=1.000000;
ptr+=4.000000;
ptr+=7.000000;
ptr+=11.000000;
}
ptr-=2.000000;
}
@ -2610,8 +2572,7 @@ while(paper[ptr])
while(paper[ptr])
{
paper[ptr]-=1.000000;
ptr-=5.000000;
ptr-=1.000000;
ptr-=6.000000;
paper[ptr]+=1.000000;
ptr+=6.000000;
}
@ -2642,8 +2603,7 @@ while(paper[ptr])
paper[ptr]-=1.000000;
ptr-=4.000000;
paper[ptr]+=1.000000;
ptr+=4.000000;
ptr+=1.000000;
ptr+=5.000000;
}
ptr+=2.000000;
while(paper[ptr])
@ -2687,8 +2647,7 @@ while(paper[ptr])
paper[ptr]-=1.000000;
ptr+=5.000000;
paper[ptr]+=1.000000;
ptr-=2.000000;
ptr-=3.000000;
ptr-=5.000000;
}
paper[ptr]+=1.000000;
ptr+=4.000000;
@ -2738,8 +2697,7 @@ while(paper[ptr])
paper[ptr]-=1.000000;
ptr+=2.000000;
paper[ptr]+=1.000000;
ptr-=2.000000;
ptr-=9.000000;
ptr-=11.000000;
while(paper[ptr])
{
ptr-=9.000000;
@ -2784,8 +2742,7 @@ while(paper[ptr])
paper[ptr]+=1.000000;
ptr+=3.000000;
}
ptr-=1.000000;
ptr-=2.000000;
ptr-=3.000000;
while(paper[ptr])
{
paper[ptr]-=1.000000;
@ -2826,8 +2783,7 @@ while(paper[ptr])
{
ptr+=9.000000;
}
ptr-=1.000000;
ptr-=7.000000;
ptr-=8.000000;
}
ptr+=8.000000;
}
@ -2972,8 +2928,7 @@ while(paper[ptr])
paper[ptr]-=1.000000;
ptr-=4.000000;
paper[ptr]+=1.000000;
ptr+=1.000000;
ptr+=3.000000;
ptr+=4.000000;
}
ptr-=4.000000;
while(paper[ptr])
@ -3087,8 +3042,7 @@ while(paper[ptr])
paper[ptr]-=1.000000;
ptr-=4.000000;
paper[ptr]+=1.000000;
ptr+=2.000000;
ptr+=2.000000;
ptr+=4.000000;
}
ptr-=4.000000;
while(paper[ptr])
@ -3122,8 +3076,7 @@ while(paper[ptr])
ptr+=9.000000;
while(paper[ptr])
{
ptr+=6.000000;
ptr+=3.000000;
ptr+=9.000000;
}
ptr-=9.000000;
while(paper[ptr])
@ -3158,8 +3111,7 @@ while(paper[ptr])
paper[ptr]-=1.000000;
ptr+=2.000000;
paper[ptr]-=1.000000;
ptr-=8.000000;
ptr-=5.000000;
ptr-=13.000000;
paper[ptr]+=1.000000;
ptr+=11.000000;
}
@ -3191,8 +3143,7 @@ while(paper[ptr])
paper[ptr]+=1.000000;
ptr-=2.000000;
}
ptr-=8.000000;
ptr-=4.000000;
ptr-=12.000000;
}
}
ptr+=9.000000;
@ -3287,8 +3238,7 @@ while(paper[ptr])
{
while(paper[ptr])
{
ptr+=4.000000;
ptr+=5.000000;
ptr+=9.000000;
}
paper[ptr]+=1.000000;
ptr+=1.000000;
@ -3349,8 +3299,7 @@ while(paper[ptr])
{
ptr+=1.000000;
paper[ptr]+=1.000000;
ptr+=2.000000;
ptr+=6.000000;
ptr+=8.000000;
}
ptr-=9.000000;
while(paper[ptr])
@ -3517,8 +3466,7 @@ while(paper[ptr])
paper[ptr]-=1.000000;
ptr+=5.000000;
paper[ptr]+=1.000000;
ptr-=4.000000;
ptr-=2.000000;
ptr-=6.000000;
while(paper[ptr])
{
paper[ptr]-=1.000000;
@ -3552,8 +3500,7 @@ while(paper[ptr])
ptr+=9.000000;
while(paper[ptr])
{
ptr+=6.000000;
ptr+=3.000000;
ptr+=9.000000;
}
ptr-=9.000000;
while(paper[ptr])
@ -3578,8 +3525,7 @@ while(paper[ptr])
}
ptr-=2.000000;
paper[ptr]+=1.000000;
ptr+=3.000000;
ptr+=5.000000;
ptr+=8.000000;
}
ptr-=9.000000;
while(paper[ptr])
@ -3639,8 +3585,7 @@ while(paper[ptr])
paper[ptr]-=1.000000;
ptr-=36.000000;
paper[ptr]+=1.000000;
ptr+=17.000000;
ptr+=19.000000;
ptr+=36.000000;
}
ptr+=5.000000;
}
@ -3655,8 +3600,7 @@ while(paper[ptr])
{
while(paper[ptr])
{
ptr+=8.000000;
ptr+=1.000000;
ptr+=9.000000;
}
ptr-=9.000000;
paper[ptr]-=1.000000;
@ -3759,8 +3703,7 @@ while(paper[ptr])
paper[ptr]-=1.000000;
ptr+=3.000000;
paper[ptr]+=1.000000;
ptr-=1.000000;
ptr-=11.000000;
ptr-=12.000000;
while(paper[ptr])
{
ptr-=9.000000;
@ -3797,8 +3740,7 @@ while(paper[ptr])
}
ptr-=8.000000;
}
ptr+=1.000000;
ptr+=7.000000;
ptr+=8.000000;
}
ptr-=9.000000;
while(paper[ptr])
@ -3962,8 +3904,7 @@ while(paper[ptr])
paper[ptr]+=1.000000;
ptr+=9.000000;
paper[ptr]+=1.000000;
ptr-=8.000000;
ptr-=6.000000;
ptr-=14.000000;
while(paper[ptr])
{
ptr-=9.000000;
@ -3991,8 +3932,7 @@ while(paper[ptr])
{
ptr+=9.000000;
}
ptr-=5.000000;
ptr-=4.000000;
ptr-=9.000000;
while(paper[ptr])
{
ptr+=7.000000;
@ -4022,8 +3962,7 @@ while(paper[ptr])
paper[ptr]+=1.000000;
ptr+=3.000000;
}
ptr-=4.000000;
ptr-=6.000000;
ptr-=10.000000;
}
}
ptr+=7.000000;
@ -4057,8 +3996,7 @@ while(paper[ptr])
while(paper[ptr])
{
paper[ptr]-=1.000000;
ptr+=3.000000;
ptr+=1.000000;
ptr+=4.000000;
paper[ptr]+=1.000000;
ptr-=4.000000;
}
@ -4084,8 +4022,7 @@ while(paper[ptr])
{
ptr+=9.000000;
}
ptr-=5.000000;
ptr-=4.000000;
ptr-=9.000000;
while(paper[ptr])
{
ptr+=1.000000;
@ -4163,8 +4100,7 @@ while(paper[ptr])
ptr+=2.000000;
while(paper[ptr])
{
ptr+=2.000000;
ptr+=3.000000;
ptr+=5.000000;
while(paper[ptr])
{
paper[ptr]-=1.000000;
@ -4211,8 +4147,7 @@ while(paper[ptr])
}
ptr+=7.000000;
}
ptr-=2.000000;
ptr-=4.000000;
ptr-=6.000000;
while(paper[ptr])
{
paper[ptr]-=1.000000;
@ -4240,8 +4175,7 @@ while(paper[ptr])
}
ptr+=4.000000;
paper[ptr]+=1.000000;
ptr-=3.000000;
ptr-=2.000000;
ptr-=5.000000;
while(paper[ptr])
{
ptr-=9.000000;
@ -4272,8 +4206,7 @@ while(paper[ptr])
paper[ptr]+=1.000000;
ptr+=7.000000;
}
ptr-=4.000000;
ptr-=3.000000;
ptr-=7.000000;
while(paper[ptr])
{
paper[ptr]-=1.000000;
@ -4305,8 +4238,7 @@ while(paper[ptr])
while(paper[ptr])
{
paper[ptr]-=1.000000;
ptr-=1.000000;
ptr-=6.000000;
ptr-=7.000000;
paper[ptr]-=1.000000;
ptr+=7.000000;
}
@ -4334,8 +4266,7 @@ while(paper[ptr])
ptr-=14.000000;
while(paper[ptr])
{
ptr-=3.000000;
ptr-=6.000000;
ptr-=9.000000;
}
ptr+=3.000000;
while(paper[ptr])
@ -4371,8 +4302,7 @@ while(paper[ptr])
}
ptr+=8.000000;
}
ptr-=7.000000;
ptr-=2.000000;
ptr-=9.000000;
while(paper[ptr])
{
ptr-=9.000000;
@ -4401,8 +4331,7 @@ while(paper[ptr])
ptr-=5.000000;
while(paper[ptr])
{
ptr-=7.000000;
ptr-=2.000000;
ptr-=9.000000;
}
}
ptr+=3.000000;
@ -4432,8 +4361,7 @@ while(paper[ptr])
while(paper[ptr])
{
paper[ptr]-=1.000000;
ptr+=8.000000;
ptr+=1.000000;
ptr+=9.000000;
paper[ptr]+=1.000000;
ptr-=9.000000;
}
@ -4452,8 +4380,7 @@ while(paper[ptr])
while(paper[ptr])
{
paper[ptr]-=1.000000;
ptr-=6.000000;
ptr-=2.000000;
ptr-=8.000000;
paper[ptr]+=1.000000;
ptr+=8.000000;
}
@ -4481,8 +4408,7 @@ while(paper[ptr])
paper[ptr]-=1.000000;
ptr-=7.000000;
paper[ptr]+=1.000000;
ptr+=6.000000;
ptr+=1.000000;
ptr+=7.000000;
}
ptr-=7.000000;
while(paper[ptr])
@ -4510,8 +4436,7 @@ while(paper[ptr])
while(paper[ptr])
{
paper[ptr]-=1.000000;
ptr-=5.000000;
ptr-=3.000000;
ptr-=8.000000;
paper[ptr]+=1.000000;
ptr+=8.000000;
}
@ -4542,8 +4467,7 @@ while(paper[ptr])
paper[ptr]+=1.000000;
ptr-=5.000000;
}
ptr+=6.000000;
ptr+=2.000000;
ptr+=8.000000;
}
ptr-=1.000000;
paper[ptr]+=1.000000;
@ -4612,8 +4536,7 @@ while(paper[ptr])
}
ptr-=1.000000;
paper[ptr]+=1.000000;
ptr-=6.000000;
ptr-=3.000000;
ptr-=9.000000;
}
ptr+=8.000000;
paper[ptr]-=1.000000;
@ -4644,8 +4567,7 @@ while(paper[ptr])
ptr+=1.000000;
while(paper[ptr])
{
ptr+=3.000000;
ptr+=3.000000;
ptr+=6.000000;
while(paper[ptr])
{
paper[ptr]-=1.000000;
@ -4692,8 +4614,7 @@ while(paper[ptr])
}
ptr+=8.000000;
}
ptr-=2.000000;
ptr-=5.000000;
ptr-=7.000000;
while(paper[ptr])
{
paper[ptr]-=1.000000;
@ -4740,8 +4661,7 @@ while(paper[ptr])
ptr+=6.000000;
}
paper[ptr]+=1.000000;
ptr-=1.000000;
ptr-=5.000000;
ptr-=6.000000;
while(paper[ptr])
{
paper[ptr]-=1.000000;
@ -4764,8 +4684,7 @@ while(paper[ptr])
ptr-=17.000000;
while(paper[ptr])
{
ptr-=7.000000;
ptr-=2.000000;
ptr-=9.000000;
}
ptr+=4.000000;
while(paper[ptr])
@ -4827,8 +4746,7 @@ while(paper[ptr])
ptr+=6.000000;
while(paper[ptr])
{
ptr+=6.000000;
ptr+=3.000000;
ptr+=9.000000;
}
ptr+=1.000000;
while(paper[ptr])
@ -4864,8 +4782,7 @@ while(paper[ptr])
paper[ptr]-=1.000000;
}
ptr-=3.000000;
paper[ptr]+=4.000000;
paper[ptr]+=1.000000;
paper[ptr]+=5.000000;
while(paper[ptr])
{
paper[ptr]-=1.000000;
@ -4885,8 +4802,7 @@ while(paper[ptr])
ptr-=6.000000;
while(paper[ptr])
{
ptr-=4.000000;
ptr-=5.000000;
ptr-=9.000000;
}
}
ptr+=3.000000;