Some work

This commit is contained in:
2026-04-09 23:27:34 -07:00
parent 0671e17e8e
commit 52e421d0c9
7 changed files with 218 additions and 7 deletions

34
token.c
View File

@@ -136,11 +136,32 @@ static bool read_next_ident(TokenStream *restrict stream, Token *restrict out);
static bool read_next_reduce(TokenStream *restrict stream, Token *restrict out,
ParseError *restrict error);
bool token_stream_peek(TokenStream *restrict stream, Token *restrict out,
ParseError *restrict error) {
if (error) {
error->set = false;
}
if (!stream->has_buffer) {
bool res = token_stream_next(stream, &stream->buffer, error);
if (!res) {
return false;
}
stream->has_buffer = true;
}
*out = stream->buffer;
return true;
}
bool token_stream_next(TokenStream *restrict stream, Token *restrict out,
ParseError *restrict error) {
if (error) {
error->set = false;
}
if (stream->has_buffer) {
stream->has_buffer = false;
*out = stream->buffer;
return true;
}
restart:
skip_whitespace(stream);
int c = peekc(stream);
@@ -232,3 +253,16 @@ static bool read_next_reduce(TokenStream *restrict stream, Token *restrict out,
return false;
}
}
bool token_stream_discard(TokenStream *restrict stream,
ParseError *restrict error) {
if (stream->has_buffer) {
stream->has_buffer = false;
if (error) {
error->set = false;
}
return true;
}
Token tok;
return token_stream_next(stream, &tok, error);
}