Make tags use #+ syntax instead of //+ syntax so it no longer looks like a comment. Old style still works but is deprecated with a warning. Using unknown tags is now an error instead of a warning. There is a new token for #+ which consumes the whole line (or until it hits a comment). The tags are parsed like before. There are errors to tell you if you use something invalid in the pre-package-line block.

This commit is contained in:
Karl Zylinski
2024-09-05 21:17:40 +02:00
parent a99e57c62c
commit dc767da12b
2 changed files with 123 additions and 47 deletions

View File

@@ -2,6 +2,7 @@
TOKEN_KIND(Token_Invalid, "Invalid"), \
TOKEN_KIND(Token_EOF, "EOF"), \
TOKEN_KIND(Token_Comment, "Comment"), \
TOKEN_KIND(Token_FileTag, "FileTag"), \
\
TOKEN_KIND(Token__LiteralBegin, ""), \
TOKEN_KIND(Token_Ident, "identifier"), \
@@ -939,6 +940,20 @@ gb_internal void tokenizer_get_token(Tokenizer *t, Token *token, int repeat=0) {
if (t->curr_rune == '!') {
token->kind = Token_Comment;
tokenizer_skip_line(t);
} else if (t->curr_rune == '+') {
token->kind = Token_FileTag;
// Skip the line or until it ends or until we hit was is probably a comment.
// The parsing of tags happens in `parse_file`.
while (t->curr_rune != GB_RUNE_EOF) {
if (t->curr_rune == '\n') {
break;
}
if (t->curr_rune == '/') {
break;
}
advance_to_next_rune(t);
}
}
break;
case '/':