aboutsummaryrefslogtreecommitdiffhomepage
path: root/parse.c
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-07-21 20:48:01 +0900
committernsfisis <nsfisis@gmail.com>2025-08-15 10:04:32 +0900
commit0c9dc7318361c93e837c8f4bc5c29869076c36cd (patch)
treea0998f947324fb42885338d0bd729d02d4309f40 /parse.c
parent1c48d0fe728c263bbe946a5d3adebaa29323ddff (diff)
downloadducc-0c9dc7318361c93e837c8f4bc5c29869076c36cd.tar.gz
ducc-0c9dc7318361c93e837c8f4bc5c29869076c36cd.tar.zst
ducc-0c9dc7318361c93e837c8f4bc5c29869076c36cd.zip
feat: implement va_*() functions
Diffstat (limited to 'parse.c')
-rw-r--r--parse.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/parse.c b/parse.c
index b056077..b0f6892 100644
--- a/parse.c
+++ b/parse.c
@@ -47,6 +47,13 @@ Parser* parser_new(Token* tokens) {
p->enums = calloc(16, sizeof(AstNode));
p->typedefs = calloc(64, sizeof(AstNode));
p->str_literals = calloc(1024, sizeof(char*));
+
+ p->funcs[p->n_funcs].name.data = "va_start";
+ p->funcs[p->n_funcs].name.len = strlen("va_start");
+ p->funcs[p->n_funcs].ty = calloc(1, sizeof(Type));
+ p->funcs[p->n_funcs].ty->kind = TypeKind_void;
+ ++p->n_funcs;
+
return p;
}
@@ -174,7 +181,7 @@ AstNode* parse_primary_expr(Parser* p) {
e = parse_expr(p);
expect(p, TokenKind_paren_r);
return e;
- } else if (t->kind == TokenKind_ident) {
+ } else if (t->kind == TokenKind_ident || t->kind == TokenKind_va_start) {
String* name = &t->raw;
if (peek_token(p)->kind == TokenKind_paren_l) {