parser/parser.c: stream function prototypes

I've made prototypes for them, put at the top, and moved their
implementations to the bottom.  They're not exposed to anything
outside this code unit.  Now, when reading the code, the parsing
routines (which are the main reason to be here) are at the top and
clear to read.
This commit is contained in:
2026-01-22 21:27:27 +00:00
parent a977f01a2a
commit 7955cac4a1

View File

@@ -33,45 +33,10 @@ const char *parse_err_to_string(parse_err_t err)
} }
} }
bool stream_eos(parse_stream_t *stream) bool stream_eos(parse_stream_t *stream);
{ char stream_peek(parse_stream_t *stream);
return stream->cursor >= stream->contents.size; void stream_advance(parse_stream_t *stream, u64 size);
} u64 stream_size(parse_stream_t *stream);
char stream_peek(parse_stream_t *stream)
{
if (stream_eos(stream))
return '\0';
else
return stream->contents.data[stream->cursor];
}
void stream_advance(parse_stream_t *stream, u64 size)
{
if (stream->cursor + size >= stream->contents.size)
stream->cursor = stream->contents.size;
else
{
for (u64 i = 0; i < size; ++i)
{
++stream->cursor;
if (stream_peek(stream) == '\n')
{
stream->line++;
stream->column = 0;
}
else
{
stream->column++;
}
}
}
}
u64 stream_size(parse_stream_t *stream)
{
return stream->contents.size;
}
parse_err_t parse_string(parse_stream_t *stream, obj_t *ret) parse_err_t parse_string(parse_stream_t *stream, obj_t *ret)
{ {
@@ -140,6 +105,46 @@ parse_err_t parse(ast_t *out, parse_stream_t *stream)
return PARSE_ERR_OK; return PARSE_ERR_OK;
} }
bool stream_eos(parse_stream_t *stream)
{
return stream->cursor >= stream->contents.size;
}
char stream_peek(parse_stream_t *stream)
{
if (stream_eos(stream))
return '\0';
else
return stream->contents.data[stream->cursor];
}
void stream_advance(parse_stream_t *stream, u64 size)
{
if (stream->cursor + size >= stream->contents.size)
stream->cursor = stream->contents.size;
else
{
for (u64 i = 0; i < size; ++i)
{
++stream->cursor;
if (stream_peek(stream) == '\n')
{
stream->line++;
stream->column = 0;
}
else
{
stream->column++;
}
}
}
}
u64 stream_size(parse_stream_t *stream)
{
return stream->contents.size;
}
/* Copyright (C) 2026 Aryadev Chavali /* Copyright (C) 2026 Aryadev Chavali
* This program is distributed in the hope that it will be useful, but WITHOUT * This program is distributed in the hope that it will be useful, but WITHOUT