aboutsummaryrefslogtreecommitdiffhomepage
path: root/parse.c
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2025-08-15 19:55:28 +0900
committernsfisis <nsfisis@gmail.com>2025-08-15 19:55:28 +0900
commite2064554b6d653439fbbb2bcde00e6f1a1079cb4 (patch)
tree56e44f19a516169b094087902e8b5d4c1188a6f8 /parse.c
parent70f3db84bb3e2f4d85da7392a112f6f82ce97152 (diff)
downloadducc-e2064554b6d653439fbbb2bcde00e6f1a1079cb4.tar.gz
ducc-e2064554b6d653439fbbb2bcde00e6f1a1079cb4.tar.zst
ducc-e2064554b6d653439fbbb2bcde00e6f1a1079cb4.zip
feat: support global variables with initializer
Diffstat (limited to 'parse.c')
-rw-r--r--parse.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/parse.c b/parse.c
index a185241..09d962d 100644
--- a/parse.c
+++ b/parse.c
@@ -1058,6 +1058,11 @@ AstNode* parse_global_var_decl(Parser* p, Type* ty, String* name) {
ty = type_new_array(ty, size);
}
+ AstNode* init = NULL;
+ if (peek_token(p)->kind == TokenKind_assign) {
+ next_token(p);
+ init = parse_assignment_expr(p);
+ }
expect(p, TokenKind_semicolon);
if (find_gvar(p, name) != -1) {
@@ -1071,6 +1076,7 @@ AstNode* parse_global_var_decl(Parser* p, Type* ty, String* name) {
AstNode* ret = ast_new(AstNodeKind_gvar_decl);
ret->name = *name;
ret->ty = ty;
+ ret->node_expr = init;
return ret;
}