#include #include #include #include // Move cursor forward size_t move(fzl_reader_t *reader, size_t len) { if (!reader) return 0; return reader->position += len; } // Add single-char token fzl_token_t *rd_single(fzl_reader_t *reader, fzl_toktype_t type) { fzl_file_loc l; bool ok = fzl_linked_getpos(reader->linked, reader->position, &l); if (!ok) { snprintf(last_err, sizeof(last_err), "failed to locate line:col"); return NULL; } move(reader, 1); return fzl_mktoken(type, l.line, l.col, "", 0, l.filename); } // Add double-char token fzl_token_t *rd_double(fzl_reader_t *reader, fzl_toktype_t type) { fzl_file_loc l; bool ok = fzl_linked_getpos(reader->linked, reader->position, &l); if (!ok) { snprintf(last_err, sizeof(last_err), "failed to locate line:col"); return NULL; } move(reader, 2); return fzl_mktoken(type, l.line, l.col, "", 0, l.filename); } // Skip symbols until '\n' or EOF void rd_comment(fzl_reader_t *reader) { move(reader, 2); while (reader->position < reader->size) { if (reader->source[reader->position++] == '\n') break; } }