lang: ast: use fancy index manipulation to reduce the size of ast_node_type

This commit is contained in:
2024-11-28 10:56:43 +00:00
parent f04c858d9a
commit fc76fe6ad4
10 changed files with 80 additions and 64 deletions

View File

@@ -107,25 +107,25 @@ token_parse_function get_token_parser(
if (!type) {
return NULL;
}
token_parse_function generic_parser = type->n_token_parsers[tok->t_type];
token_parse_function generic_parser = type->n_token_parsers[__TOK_PARSER_INDEX(tok->t_type)];
if (!generic_parser) {
generic_parser = type->n_token_parsers[IVY_TOK_NONE];
generic_parser = type->n_token_parsers[__TOK_PARSER_FALLBACK_INDEX];
}
token_parse_function better_parser = NULL;
switch (tok->t_type) {
case IVY_TOK_KEYWORD:
better_parser = type->n_keyword_parsers[tok->t_keyword];
if (type->n_keyword_parsers[IVY_KW_NONE]) {
generic_parser = type->n_keyword_parsers[IVY_KW_NONE];
better_parser = type->n_keyword_parsers[__KW_PARSER_INDEX(tok->t_keyword)];
if (type->n_keyword_parsers[__KW_PARSER_FALLBACK_INDEX]) {
generic_parser = type->n_keyword_parsers[__KW_PARSER_FALLBACK_INDEX];
}
break;
case IVY_TOK_SYMBOL:
better_parser = type->n_symbol_parsers[tok->t_symbol];
if (type->n_symbol_parsers[IVY_SYM_NONE]) {
generic_parser = type->n_symbol_parsers[IVY_SYM_NONE];
better_parser = type->n_symbol_parsers[__SYM_PARSER_INDEX(tok->t_symbol)];
if (type->n_symbol_parsers[__SYM_PARSER_FALLBACK_INDEX]) {
generic_parser = type->n_symbol_parsers[__SYM_PARSER_FALLBACK_INDEX];
}
break;
default: