Files
fz-lang/src/compiler/parser/pa_ref.c
T

39 lines
1012 B
C

#include <compiler/fzl_parser.h>
#include <compiler/fzl_token.h>
#include <compiler/internals/parser.h>
#include <stdio.h>
// Parse reference definition
fzl_node_t *pa_ref(fzl_parser_t *parser)
{
if (!parser || !peek(parser))
return NULL;
fzl_token_t *tok = consume(parser);
if (!tok || tok->type != FZL_TOKTYPE_REFERENCE)
{
snprintf(plast_err, sizeof(plast_err),
"'%s':%zu:%zu => expected 'ref' keyword", last_known_tok->filename,
last_known_tok->ln, last_known_tok->cn);
return NULL;
}
fzl_token_t *name = consume(parser);
if (!name || name->type != FZL_TOKTYPE_NAME)
{
snprintf(plast_err, sizeof(plast_err),
"'%s':%zu:%zu => expected name after 'ref'",
last_known_tok->filename, last_known_tok->ln, last_known_tok->cn);
return NULL;
}
fzl_node_t *node = fzl_mknode(FZL_NODETYPE_REFERENCE, name);
if (!node)
{
snprintf(plast_err, sizeof(plast_err), "out of memory");
return NULL;
}
return node;
}