more macros

This commit is contained in:
2024-12-23 21:52:35 +02:00
parent dcf7e86ba7
commit ef3ef64abd
7 changed files with 61 additions and 20 deletions

View File

@@ -14,21 +14,25 @@ typedef struct {
} payload;
} FieldState;
int parseRoot(Parser* p)
void parseRoot(Parser* p)
{
p->nodes.tags[p->nodes.len++] = AST_NODE_TAG_ROOT;
p->nodes.main_tokens[p->nodes.len] = 0;
// members root_members = parseContainerMembers(p);
return 0;
}
static AstTokenIndex nextToken(Parser* p) { return p->tok_i++; }
static AstTokenIndex eatToken(Parser* p, TokenizerTag tag)
static AstTokenIndex eatToken(Parser* p, TokenizerTag tag, bool* ok)
{
return (p->token_tags[p->tok_i] == tag) ? nextToken(p) : -1;
if (p->token_tags[p->tok_i] == tag) {
*ok = true;
return nextToken(p);
} else {
*ok = false;
return (AstTokenIndex) {};
}
}
static Members parseContainerMembers(Parser* p)
@@ -36,7 +40,8 @@ static Members parseContainerMembers(Parser* p)
const uint32_t scratch_top = p->scratch.len;
Members res = (Members) {};
// ast_token_index last_field;
while (eatToken(p, TOKENIZER_TAG_CONTAINER_DOC_COMMENT) != -1)
bool ok;
while (eatToken(p, TOKENIZER_TAG_CONTAINER_DOC_COMMENT, &ok) && ok)
;
// bool trailing = false;
@@ -166,7 +171,7 @@ static Members parseContainerMembers(Parser* p)
case TOKENIZER_TAG_KEYWORD_VAR:
case TOKENIZER_TAG_KEYWORD_VOLATILE:
case TOKENIZER_TAG_KEYWORD_WHILE:;
const char* str = tokenizerTagString[p->token_tags[p->tok_i]];
const char* str = tokenizerGetTagString(p->token_tags[p->tok_i]);
fprintf(stderr, "keyword %s not implemented\n", str);
exit(1);
case TOKENIZER_TAG_KEYWORD_PUB: