commit 2e6a8ddefd570157e0a148b4ab5d6f4f1ec312ea
parent 8b59c3bef0ee384f595b9af9bd74fe1b6521843c
Author: Nihal Jere <nihal@nihaljere.xyz>
Date: Tue, 14 Dec 2021 12:37:10 -0600
blockstack: rework
Diffstat:
5 files changed, 23 insertions(+), 12 deletions(-)
diff --git a/Makefile b/Makefile
@@ -1,8 +1,8 @@
.c.o:
- $(CC) -c $< -o $@
+ $(CC) -Wall -c $< -o $@
-nooc: main.o array.o util.o x64.o elf.o lex.o parse.o map.o siphash.o type.o blake3.o
- $(CC) main.o array.o x64.o util.o elf.o lex.o parse.o map.o siphash.o type.o blake3.o -o nooc
+nooc: main.o array.o util.o x64.o elf.o lex.o parse.o map.o siphash.o type.o blake3.o blockstack.o
+ $(CC) main.o array.o x64.o util.o elf.o lex.o parse.o map.o siphash.o type.o blake3.o blockstack.o -o nooc
clean:
rm -f *.o nooc
diff --git a/blockstack.c b/blockstack.c
@@ -1,9 +1,14 @@
-#define BLOCKSTACKSIZE 32
-static struct block *blockstack[BLOCKSTACKSIZE];
-static size_t blocki;
-static struct proc *curproc;
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
-static void
+#include "nooc.h"
+#include "util.h"
+
+struct block *blockstack[BLOCKSTACKSIZE];
+size_t blocki;
+
+void
blockpush(struct block *block)
{
if (blocki >= BLOCKSTACKSIZE - 1)
@@ -13,7 +18,7 @@ blockpush(struct block *block)
blocki++;
}
-static struct block *
+struct block *
blockpop()
{
if (blocki == 0)
@@ -23,13 +28,12 @@ blockpop()
return blockstack[blocki];
}
-static struct block *
+struct block *
blockpeek()
{
if (blocki == 0)
die("blockpop: cannot peek empty stack!");
- blocki--;
return blockstack[blocki - 1];
}
diff --git a/blockstack.h b/blockstack.h
@@ -0,0 +1,3 @@
+void blockpush(struct block *block);
+struct block *blockpop();
+struct block *blockpeek();
diff --git a/main.c b/main.c
@@ -20,7 +20,9 @@
#include "parse.h"
#include "type.h"
#include "map.h"
-#include "blockstack.c"
+#include "blockstack.h"
+
+struct proc *curproc;
const char *const tokenstr[] = {
[TOK_NONE] = "TOK_NONE",
diff --git a/nooc.h b/nooc.h
@@ -1,6 +1,8 @@
#define TEXT_OFFSET 0x101000
#define DATA_OFFSET 0x102000
+#define BLOCKSTACKSIZE 32
+
enum tokentype {
TOK_NONE = 0,
TOK_NAME,