summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkdx <kikoodx@paranoici.org>2023-06-18 17:50:15 +0200
committerkdx <kikoodx@paranoici.org>2023-06-18 17:50:15 +0200
commit3c0b034ee902432baed7030cc65cb2443a846600 (patch)
tree19d3d11642d1d1e363d44029a2d6d17218a3ec59
parent874245962e04264ab3c8a993a109f1790ddb36e2 (diff)
downloadgolem-3c0b034ee902432baed7030cc65cb2443a846600.tar.gz
local init accepts any expr
-rw-r--r--samples/malloc.golem18
-rw-r--r--src/main.c3
2 files changed, 8 insertions, 13 deletions
diff --git a/samples/malloc.golem b/samples/malloc.golem
index a52d51e..1a3b1a9 100644
--- a/samples/malloc.golem
+++ b/samples/malloc.golem
@@ -1,8 +1,7 @@
main() => nopipe() |> pipe();
nopipe() {
- local s;
- s = strdup("yo comment cava\n");
+ local s = strdup("yo comment cava\n");
write(s);
stoupper(s);
write(s);
@@ -11,8 +10,7 @@ nopipe() {
pipe() => strdup("coucou le monde\n") |> write() |> stoupper() |> write();
write(s) {
- local o;
- o = s;
+ local o = s;
loop {
if ([s] == 0)
return o;
@@ -22,8 +20,7 @@ write(s) {
}
strlen(s) {
- local len;
- len = 0;
+ local len = 0;
loop {
if ([s + len] == 0)
return len;
@@ -36,8 +33,7 @@ strdup(s) {
}
strcpy(dst, src) {
- local i;
- i = 0;
+ local i = 0;
loop {
[dst + i] = [src + i];
if ([src + i] == 0)
@@ -47,8 +43,7 @@ strcpy(dst, src) {
}
stoupper(s) {
- local o;
- o = s;
+ local o = s;
loop {
if ([s] == 0)
return o;
@@ -61,8 +56,7 @@ define HEAP_SIZE = 4096;
global heap[HEAP_SIZE] = 0x69;
global heap_size = 0;
malloc(n) {
- local p;
- p = heap + heap_size;
+ local p = heap + heap_size;
heap_size = heap_size + n;
if (heap_size > 4096) {
write("malloc error: heap is full");
diff --git a/src/main.c b/src/main.c
index 1445c4e..f235c54 100644
--- a/src/main.c
+++ b/src/main.c
@@ -1069,12 +1069,13 @@ gen_localdec(Node *node)
return;
const int found = node_find(locals, node->lhs);
- printf("\tLIT %04x\n", const_expr(node->rhs));
+ gen_expr(node->rhs);
printf("\tLIT ,__stack_ptr LDA\n");
if (locals_size - found - 1)
printf("\tLIT %04x SUB\n",
locals_size - found - 1);
printf("\tSTA\n");
+ depth -= 1;
}
static void