summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-10-09 10:33:30 +0200
committermetamuffin <metamuffin@disroot.org>2024-10-09 10:33:30 +0200
commitaafa7ab75d6fa3501e345fb20c1fa557e826c730 (patch)
treeca7689e36088e629a5e8d0aa7f0afb42e2a082a3
parent7e89b781e7f1e8d7cedc20601642bec525200176 (diff)
downloadattocc-aafa7ab75d6fa3501e345fb20c1fa557e826c730.tar
attocc-aafa7ab75d6fa3501e345fb20c1fa557e826c730.tar.bz2
attocc-aafa7ab75d6fa3501e345fb20c1fa557e826c730.tar.zst
parse enum decl
-rw-r--r--attocc.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/attocc.c b/attocc.c
index bb6b248..1015747 100644
--- a/attocc.c
+++ b/attocc.c
@@ -489,7 +489,8 @@ struct token *tokenize(char *source) {
char *ident_start = p;
for (char c; (c = *p++) && is_ident(c);)
;
- int ident_len = p - ident_start - 1;
+ p--;
+ int ident_len = p - ident_start;
char *ident_str = realloc_failsafe(NULL, ident_len + 1);
for (int i = 0; i < ident_len; i++)
ident_str[i] = ident_start[i];
@@ -649,6 +650,12 @@ char parse_enum_decl(struct token *tokens, struct node **node) {
if (tokens[p].kind == TOK_END)
return 1;
+ if (tokens[p].kind == TOK_SEPERATOR &&
+ tokens[p].data.seperator == SEP_COMMA) {
+ p++;
+ continue;
+ }
+
if (tokens[p].kind != TOK_IDENTIFIER)
return 1;
@@ -671,7 +678,7 @@ char parse_enum_decl(struct token *tokens, struct node **node) {
num_members++;
members =
- realloc_failsafe(NULL, sizeof(struct enum_member) * num_members);
+ realloc_failsafe(members, sizeof(struct enum_member) * num_members);
struct enum_member *new_member = &members[num_members - 1];
new_member->value = value++;
new_member->name = strdup_failsafe(m_ident);