aboutsummaryrefslogtreecommitdiffhomepage
path: root/parse.c
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-08-13 22:40:51 +0900
committernsfisis <nsfisis@gmail.com>2025-08-15 10:06:21 +0900
commit7685bff588632a486a9e677c63ae7123b112ba9e (patch)
tree880d0be559c15e7bcdf857c3c17ee7f2629a4adb /parse.c
parent56580d654dfc19d03900fa9df680980d3e60c4ee (diff)
downloadducc-7685bff588632a486a9e677c63ae7123b112ba9e.tar.gz
ducc-7685bff588632a486a9e677c63ae7123b112ba9e.tar.zst
ducc-7685bff588632a486a9e677c63ae7123b112ba9e.zip
refactor: use TokenArray instead of raw pointer and length
Diffstat (limited to 'parse.c')
-rw-r--r--parse.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/parse.c b/parse.c
index c902952..a0b2ff3 100644
--- a/parse.c
+++ b/parse.c
@@ -27,7 +27,7 @@ struct Func {
typedef struct Func Func;
struct Parser {
- Token* tokens;
+ TokenArray* tokens;
int pos;
LocalVar* lvars;
int n_lvars;
@@ -49,7 +49,7 @@ struct Parser {
};
typedef struct Parser Parser;
-Parser* parser_new(Token* tokens) {
+Parser* parser_new(TokenArray* tokens) {
Parser* p = calloc(1, sizeof(Parser));
p->tokens = tokens;
p->gvars = calloc(128, sizeof(GlobalVar));
@@ -70,12 +70,11 @@ Parser* parser_new(Token* tokens) {
}
Token* peek_token(Parser* p) {
- return p->tokens + p->pos;
+ return &p->tokens->data[p->pos];
}
Token* next_token(Parser* p) {
- ++p->pos;
- return p->tokens + p->pos - 1;
+ return &p->tokens->data[p->pos++];
}
BOOL eof(Parser* p) {
@@ -1248,7 +1247,7 @@ AstNode* parse_toplevel(Parser* p) {
}
}
-Program* parse(Token* tokens) {
+Program* parse(TokenArray* tokens) {
Parser* p = parser_new(tokens);
AstNode* funcs = ast_new_list(32);
AstNode* vars = ast_new_list(16);