Some work
This commit is contained in:
34
token.c
34
token.c
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user