lang: ast: implement parsing of static and dynamic package initialisers

This commit is contained in:
2024-12-07 20:56:57 +00:00
parent b87d152f07
commit 209c47da68
5 changed files with 518 additions and 7 deletions

View File

@@ -505,8 +505,10 @@ struct token_parse_result arith_parse_in(
= parser_get_state(ctx, struct expr_parser_state);
if (state->s_terminator == IVY_KW_IN) {
state->s_prev_token = IVY_KW_IN;
return expr_finalise_and_return(ctx, state);
/* treat this as a statement terminator. */
struct token_parse_result result = expr_finalise_and_return(ctx, state);
result.r_flags |= PARSE_REPEAT_TOKEN;
return result;
}
return PARSE_RESULT(IVY_ERR_BAD_SYNTAX, 0);
@@ -644,7 +646,23 @@ struct token_parse_result arith_parse_right_paren(
struct token_parse_result arith_parse_left_brace(
struct ivy_parser *ctx, struct ivy_token *tok)
{
return PARSE_RESULT(IVY_ERR_NOT_SUPPORTED, 0);
struct expr_parser_state *state
= parser_get_state(ctx, struct expr_parser_state);
if (state->s_type == EXPR_TYPE_NONE) {
state->s_type = EXPR_TYPE_ARITH;
}
if (state->s_type != EXPR_TYPE_ARITH) {
return PARSE_RESULT(IVY_ERR_BAD_SYNTAX, 0);
}
if (state->s_prev_component != EXPR_CMP_OPERATOR && state->s_prev_component != EXPR_CMP_NONE) {
return PARSE_RESULT(IVY_ERR_BAD_SYNTAX, 0);
}
parser_push_state(ctx, IVY_AST_PKG, 0);
return PARSE_RESULT(IVY_OK, 0);
}
struct token_parse_result arith_parse_right_brace(