lang: ast: use fancy index manipulation to reduce the size of ast_node_type
This commit is contained in:
@@ -441,38 +441,38 @@ struct ast_node_type expr_node_ops = {
|
||||
.n_state_size = sizeof(struct expr_parser_state),
|
||||
.n_node_size = sizeof(struct ivy_ast_expr_node),
|
||||
.n_token_parsers = {
|
||||
[IVY_TOK_IDENT] = parse_ident,
|
||||
[IVY_TOK_ATOM] = parse_atom,
|
||||
[IVY_TOK_STRING] = parse_string,
|
||||
[IVY_TOK_STR_START] = parse_str_start,
|
||||
[IVY_TOK_STR_END] = parse_str_end,
|
||||
[IVY_TOK_LABEL] = parse_label,
|
||||
[IVY_TOK_INT] = parse_int,
|
||||
[IVY_TOK_DOUBLE] = parse_double,
|
||||
[IVY_TOK_SYMBOL] = parse_symbol,
|
||||
TOK_PARSER(IDENT, parse_ident),
|
||||
TOK_PARSER(ATOM, parse_atom),
|
||||
TOK_PARSER(STRING, parse_string),
|
||||
TOK_PARSER(STR_START, parse_str_start),
|
||||
TOK_PARSER(STR_END, parse_str_end),
|
||||
TOK_PARSER(LABEL, parse_label),
|
||||
TOK_PARSER(INT, parse_int),
|
||||
TOK_PARSER(DOUBLE, parse_double),
|
||||
TOK_PARSER(SYMBOL, parse_symbol),
|
||||
},
|
||||
.n_symbol_parsers = {
|
||||
[IVY_SYM_BANG] = parse_bang,
|
||||
[IVY_SYM_DOT] = parse_dot,
|
||||
[IVY_SYM_LEFT_PAREN] = parse_left_paren,
|
||||
[IVY_SYM_RIGHT_PAREN] = parse_right_paren,
|
||||
SYM_PARSER(BANG, parse_bang),
|
||||
SYM_PARSER(DOT, parse_dot),
|
||||
SYM_PARSER(LEFT_PAREN, parse_left_paren),
|
||||
SYM_PARSER(RIGHT_PAREN, parse_right_paren),
|
||||
},
|
||||
.n_keyword_parsers = {
|
||||
[IVY_KW_IF] = parse_if,
|
||||
[IVY_KW_ELSE] = parse_else,
|
||||
[IVY_KW_END] = parse_end,
|
||||
[IVY_KW_WHILE] = parse_while,
|
||||
[IVY_KW_FOR] = parse_for,
|
||||
[IVY_KW_MATCH] = parse_match,
|
||||
[IVY_KW_TRY] = parse_try,
|
||||
[IVY_KW_CATCH] = parse_catch,
|
||||
[IVY_KW_THROW] = parse_throw,
|
||||
[IVY_KW_UNDERSTANDS] = parse_understands,
|
||||
[IVY_KW_IN] = parse_in,
|
||||
[IVY_KW_DO] = parse_do,
|
||||
[IVY_KW_IS] = parse_is,
|
||||
[IVY_KW_AND] = parse_and,
|
||||
[IVY_KW_OR] = parse_or,
|
||||
[IVY_KW_NOT] = parse_not,
|
||||
KW_PARSER(IF, parse_if),
|
||||
KW_PARSER(ELSE, parse_else),
|
||||
KW_PARSER(END, parse_end),
|
||||
KW_PARSER(WHILE, parse_while),
|
||||
KW_PARSER(FOR, parse_for),
|
||||
KW_PARSER(MATCH, parse_match),
|
||||
KW_PARSER(TRY, parse_try),
|
||||
KW_PARSER(CATCH, parse_catch),
|
||||
KW_PARSER(THROW, parse_throw),
|
||||
KW_PARSER(UNDERSTANDS, parse_understands),
|
||||
KW_PARSER(IN, parse_in),
|
||||
KW_PARSER(DO, parse_do),
|
||||
KW_PARSER(IS, parse_is),
|
||||
KW_PARSER(AND, parse_and),
|
||||
KW_PARSER(OR, parse_or),
|
||||
KW_PARSER(NOT, parse_not),
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user