nooc

nooc programming language compiler
git clone git://git.nihaljere.xyz/nooc
Log | Files | Refs | LICENSE

commit 2e6a8ddefd570157e0a148b4ab5d6f4f1ec312ea
parent 8b59c3bef0ee384f595b9af9bd74fe1b6521843c
Author: Nihal Jere <nihal@nihaljere.xyz>
Date:   Tue, 14 Dec 2021 12:37:10 -0600

blockstack: rework

Diffstat:
MMakefile | 6+++---
Mblockstack.c | 20++++++++++++--------
Ablockstack.h | 3+++
Mmain.c | 4+++-
Mnooc.h | 2++
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,