wip arrays

This commit is contained in:
zongor 2026-05-23 12:24:18 -07:00
parent c5ce5179f0
commit cbb904abd9
13 changed files with 256 additions and 71 deletions

View File

@ -676,6 +676,27 @@ grouping()
consume(TOKEN_RPAREN); consume(TOKEN_RPAREN);
} }
void calculate_strides(i32* dims, i32 num_dims, i32* out_strides) {
int current_stride = 1;
for (int i = num_dims - 1; i >= 0; i--) {
out_strides[i] = current_stride;
current_stride *= dims[i];
}
}
void
define_array()
{
/* example
i32 dims[3] = {3, 3, 3};
i32 strides[3];
calculate_strides(dims, 3, strides);
*/
}
void void
number() number()
{ {

View File

@ -82,3 +82,64 @@ nat_to_int(unsigned n)
{ {
return (int)n; return (int)n;
} }
int
int_add(int a, int b)
{
return a + b;
}
int
int_sub(int a, int b)
{
return a - b;
}
int
int_mul(int a, int b)
{
return a * b;
}
int
int_div(int a, int b)
{
return a / b;
}
int
int_eq(int a, int b)
{
return a == b;
}
int
int_ne(int a, int b)
{
return a != b;
}
int
int_lt(int a, int b)
{
return a < b;
}
int
int_le(int a, int b)
{
return a <= b;
}
int
int_gt(int a, int b)
{
return a > b;
}
int
int_ge(int a, int b)
{
return a >= b;
}
int
int_neg(int f)
{
return -f;
}
int
int_abs(int f)
{
return (f < 0) ? -f : f;
}

View File

@ -147,6 +147,120 @@
&return &return
POP2r JMP2r POP2r JMP2r
@int_add_ ( b* a* -- result* )
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
STH2kr STA2
STH2kr INC2 INC2 LDA2 STH2kr LDA2 ADD2 !&return
#0000
&return
POP2r JMP2r
@int_sub_ ( b* a* -- result* )
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
STH2kr STA2
STH2kr INC2 INC2 LDA2 STH2kr LDA2 SUB2 !&return
#0000
&return
POP2r JMP2r
@int_mul_ ( b* a* -- result* )
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
STH2kr STA2
STH2kr INC2 INC2 LDA2 STH2kr LDA2 MUL2 !&return
#0000
&return
POP2r JMP2r
@int_div_ ( b* a* -- result* )
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
STH2kr STA2
STH2kr INC2 INC2 LDA2 STH2kr LDA2 sdiv
!&return
#0000
&return
POP2r JMP2r
@int_eq_ ( b* a* -- result* )
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
STH2kr STA2
STH2kr INC2 INC2 LDA2 STH2kr LDA2 EQU2 #00 SWP !&return
#0000
&return
POP2r JMP2r
@int_ne_ ( b* a* -- result* )
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
STH2kr STA2
STH2kr INC2 INC2 LDA2 STH2kr LDA2 NEQ2 #00 SWP !&return
#0000
&return
POP2r JMP2r
@int_lt_ ( b* a* -- result* )
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
STH2kr STA2
STH2kr INC2 INC2 LDA2 #8000 EOR2 STH2kr LDA2 #8000 EOR2 LTH2 #00 SWP !&return
#0000
&return
POP2r JMP2r
@int_le_ ( b* a* -- result* )
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
STH2kr STA2
STH2kr INC2 INC2 LDA2 #8000 EOR2 STH2kr LDA2 #8000 EOR2 GTH2 #00 SWP #01 EOR !&return
#0000
&return
POP2r JMP2r
@int_gt_ ( b* a* -- result* )
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
STH2kr STA2
STH2kr LDA2 #8000 EOR2 STH2kr INC2 INC2 LDA2 #8000 EOR2 LTH2 #00 SWP !&return
#0000
&return
POP2r JMP2r
@int_ge_ ( b* a* -- result* )
OVR2r LIT2r 0004 SUB2r STH2kr INC2 INC2 STA2
STH2kr STA2
STH2kr LDA2 #8000 EOR2 STH2kr INC2 INC2 LDA2 #8000 EOR2 GTH2 #00 SWP #01 EOR !&return
#0000
&return
POP2r JMP2r
@int_neg_ ( f* -- result* )
OVR2r LIT2r 0002 SUB2r STH2kr STA2
#0000 STH2kr LDA2 SUB2 !&return
#0000
&return
POP2r JMP2r
@int_abs_ ( f* -- result* )
OVR2r LIT2r 0002 SUB2r STH2kr STA2
STH2kr LDA2 #8000 EOR2 #8000 LTH2 ?&then.1
STH2kr LDA2 !&end.1
&then.1
#0000 STH2kr LDA2 SUB2
&end.1
!&return
#0000
&return
POP2r JMP2r
@str/<print> ( str* -- ) @str/<print> ( str* -- )
LDAk DUP ?{ POP POP2 JMP2r } LDAk DUP ?{ POP POP2 JMP2r }
#18 DEO #18 DEO

View File

@ -1,7 +1,5 @@
print(add(1, 1) as str);
function main() { halt;
print(add(1, 1) as str);
}
/** /**
* Add two numbers together * Add two numbers together

View File

@ -3,3 +3,5 @@ bool flag = false;
if (!flag) { if (!flag) {
print("flag is false"); print("flag is false");
} }
halt;

View File

@ -1,6 +1,5 @@
function main() { print(fib(23) as str);
print(fib(23) as str); halt;
}
/** /**
* Recursively calculate fibonacci * Recursively calculate fibonacci

View File

@ -1,9 +1,11 @@
nat i = 0; nat i = 0;
for (nat x in [0..10]) { //for (nat x in [0..10]) {
print(x as str); // print(x as str);
} //}
for (nat j = 0; j < 10; j = j + 1) { for (nat j = 0; j < 10; j = j + 1) {
print(j as str); print(j as str);
} }
halt;

View File

@ -1,6 +1,4 @@
int i = 122; int i = 122;
int j = 32; int j = 32;
print((i - j) as str);
function main() { halt;
putchar((i - j));
}

View File

@ -1,11 +1,9 @@
function main() { nat x = 20;
nat x = 20;
if (x == 10) { if (x == 10) {
print("x is 10"); print("x is 10");
} else if (x == 20) { } else if (x == 20) {
print("x is 20"); print("x is 20");
} else { } else {
print("x is something else"); print("x is something else");
}
} }

View File

@ -1,6 +1,9 @@
function main() { local_fn();
halt;
function local_fn() {
int i = 122; int i = 122;
int j = 32; int j = 32;
putchar((i - j)); // prints ascii `Z` printf((i - j));
} }

View File

@ -1,9 +1,4 @@
/** print("Enter a string: ");
* Main function str msg = read(32);
*/ print(msg);
function main() { return 0;
print("Enter a string: ");
str msg = read(32);
print(msg);
return 0;
}

View File

@ -34,18 +34,14 @@ plex Mouse implements Device {
bool btn4; bool btn4;
} }
/** Screen screen = open("/dev/screen/0", 0);
* Main function Mouse mouse = open("/dev/mouse/0", 0);
*/
function main() {
Screen screen = open("/dev/screen/0", 0);
Mouse mouse = open("/dev/mouse/0", 0);
outline_swatch(screen, BLACK, 1, 1); outline_swatch(screen, BLACK, 1, 1);
outline_swatch(screen, WHITE, 21, 1); outline_swatch(screen, WHITE, 21, 1);
screen.draw(); screen.draw();
loop { loop {
mouse.refresh(); mouse.refresh();
if (!mouse.left) continue; if (!mouse.left) continue;
@ -63,9 +59,9 @@ function main() {
screen.draw(); screen.draw();
rectangle(screen, selected_color, x, y, 5, 5); rectangle(screen, selected_color, x, y, 5, 5);
}
exit(0);
} }
halt;
/** /**
* Checks if the click is within the bound and update the selected color if so. * Checks if the click is within the bound and update the selected color if so.

View File

@ -36,15 +36,13 @@ plex Rect {
} }
} }
Rect r = create_geometry();
print(r.toS());
halt;
function create_geometry() Rect { function create_geometry() Rect {
Point tl(10, 20); Point tl(10, 20);
Point br(100, 50); Point br(100, 50);
Rect final_rect(tl, br, 90, 180); Rect final_rect(tl, br, 90, 180);
return final_rect; return final_rect;
} }
function main() int {
Rect r = create_geometry();
print(r.toS());
return 0;
}