From 0dc409ab0967d9973f36c138825067462b9a216f Mon Sep 17 00:00:00 2001 From: Carson Fleming Date: Sat, 28 Mar 2026 10:42:09 -1000 Subject: one step toward rehashing --- parser.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) (limited to 'parser.c') diff --git a/parser.c b/parser.c index 8166ea5..d7dc3fb 100644 --- a/parser.c +++ b/parser.c @@ -90,21 +90,24 @@ static void parse_var_ref(struct var_ref_node* p_node) { p_node->ident = tok.data.ident; } -static void parse_expr_assign(struct expr_node* p_node) { - peek_or_panic(); - if (tok.type != TK_ASSIGN) return; - - switch (p_node->type) { +static void expr_to_lval(struct lval_node* l_node, struct expr_node* e_node) { + switch (e_node->type) { case EXPR_VAR_REF: - p_node->as._assign.lval = (struct lval_node) { + *l_node = (struct lval_node) { .type = LVAL_VAR_REF, - .as._var_ref = p_node->as._var_ref, + .as._var_ref = e_node->as._var_ref, }; - break; + return; default: PARSER_PANIC("expression is not assignable"); } +} + +static void parse_expr_assign(struct expr_node* p_node) { + peek_or_panic(); + if (tok.type != TK_ASSIGN) return; + expr_to_lval(&p_node->as._assign.lval, p_node); p_node->type = EXPR_ASSIGN; p_node->as._assign.rval = protected_alloc(sizeof(struct expr_node)); -- cgit v1.2.3