Implemented getuint and fixed a bug with variables
This commit is contained in:
parent
441d737cf1
commit
022e812c1d
7 changed files with 75 additions and 1 deletions
|
|
@ -6,6 +6,26 @@ proc getchar
|
|||
0xCFFFFFFFFFFFFFFE ld8
|
||||
endproc
|
||||
|
||||
proc getuint
|
||||
0 @val
|
||||
0 @char
|
||||
while 1 do
|
||||
:getchar @char
|
||||
if &char 0x30 u< then
|
||||
&val return
|
||||
endif
|
||||
if &char 0x39 u> then
|
||||
&val return
|
||||
endif
|
||||
|
||||
&val
|
||||
10 u*
|
||||
&char 0x30 u- u+
|
||||
@val
|
||||
endwhile
|
||||
&val
|
||||
endproc
|
||||
|
||||
proc putuint
|
||||
@val
|
||||
if &val 0 == then
|
||||
|
|
|
|||
|
|
@ -366,6 +366,19 @@ codegen:
|
|||
printf(" pushstack 112\n");
|
||||
break;
|
||||
}
|
||||
if (SBeq(&tokenAccumulator, "u<")) {
|
||||
printf(" popstack 97\n");
|
||||
printf(" popstack 98\n");
|
||||
printf(" Cmp64 98, 97\n");
|
||||
printf(" JmpIN __Cmp%d\n", counter);
|
||||
printf(" MovI64 112, 0\n");
|
||||
printf(" Jmp __DoneCmp%d\n", counter);
|
||||
printf("__Cmp%d:\n", counter);
|
||||
printf(" MovI64 112, 1\n");
|
||||
printf("__DoneCmp%d:\n", counter);
|
||||
printf(" pushstack 112\n");
|
||||
break;
|
||||
}
|
||||
if (SBeq(&tokenAccumulator, "pop")) {
|
||||
printf(" popstack 113\n");
|
||||
break;
|
||||
|
|
@ -416,7 +429,7 @@ codegen:
|
|||
if (tokenAccumulator.cnt < 128) {
|
||||
memcpy(varName, tokenAccumulator.data+1,
|
||||
tokenAccumulator.cnt-1);
|
||||
varName[tokenAccumulator.cnt] = 0;
|
||||
varName[tokenAccumulator.cnt-1] = 0;
|
||||
} else {
|
||||
memcpy(varName, tokenAccumulator.data+1, 127);
|
||||
varName[127] = 0;
|
||||
|
|
@ -439,6 +452,7 @@ codegen:
|
|||
allocHead += 8;
|
||||
}
|
||||
printf(" popstack 120\n");
|
||||
printf(" ; %s:%s\n", funcName, varName);
|
||||
printf(" MovI64 121, 0x%16lX\n", addr);
|
||||
printf(" St64 120, 121\n");
|
||||
break;
|
||||
|
|
|
|||
7
flagpole/tests/ascii.fp
Normal file
7
flagpole/tests/ascii.fp
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
$inc fvmstd.fp
|
||||
|
||||
proc main
|
||||
:getchar
|
||||
:putuint
|
||||
:newline
|
||||
endproc
|
||||
7
flagpole/tests/cat.fp
Normal file
7
flagpole/tests/cat.fp
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
$inc fvmstd.fp
|
||||
|
||||
proc main
|
||||
while 1 do
|
||||
:getchar :putchar
|
||||
endwhile
|
||||
endproc
|
||||
8
flagpole/tests/numinp.fp
Normal file
8
flagpole/tests/numinp.fp
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
$inc fvmstd.fp
|
||||
|
||||
proc main
|
||||
"Sum Program" :puts :newline
|
||||
:getuint
|
||||
:getuint u+
|
||||
:putuint :newline
|
||||
endproc
|
||||
Loading…
Add table
Add a link
Reference in a new issue