diff options
author | metamuffin <metamuffin@disroot.org> | 2024-10-09 10:33:30 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-10-09 10:33:30 +0200 |
commit | aafa7ab75d6fa3501e345fb20c1fa557e826c730 (patch) | |
tree | ca7689e36088e629a5e8d0aa7f0afb42e2a082a3 | |
parent | 7e89b781e7f1e8d7cedc20601642bec525200176 (diff) | |
download | attocc-aafa7ab75d6fa3501e345fb20c1fa557e826c730.tar attocc-aafa7ab75d6fa3501e345fb20c1fa557e826c730.tar.bz2 attocc-aafa7ab75d6fa3501e345fb20c1fa557e826c730.tar.zst |
parse enum decl
-rw-r--r-- | attocc.c | 11 |
1 files changed, 9 insertions, 2 deletions
@@ -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); |