more macros
This commit is contained in:
19
parser.c
19
parser.c
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user