#include "internal.h" #include "../str.h" #include "../log.h" #include void parser_next_token(Parser* p) { p->token = tokenstream_next(p->ts); } bool parser_accept(Parser* p, TokenType token) { if (p->token.token == token) { parser_next_token(p); return true; } return false; } bool parser_expect(Parser* p, TokenType token, const char* msg) { if (parser_accept(p, token)) { return true; } log_on_line(&p->token.location, msg); return false; } bool parser_peek(Parser* p, TokenType token) { if (p->token.token == token) { return true; } return false; } bool parser_require(Parser* p, TokenType token, const char* msg) { if (parser_peek(p, token)) { return true; } log_on_line(&p->token.location, msg); return false; } char* parser_to_text(Parser* p) { char* str = string_copy(p->token.text); parser_next_token(p); return str; } bool parser_accept_primitive(Parser* p) { return parser_peek(p, TOKEN_I8) || parser_peek(p, TOKEN_I16) || parser_peek(p, TOKEN_I32) || parser_peek(p, TOKEN_I64) || parser_peek(p, TOKEN_U8) || parser_peek(p, TOKEN_U16) || parser_peek(p, TOKEN_U32) || parser_peek(p, TOKEN_U64); }