From 2c9a6f996dd7f1a4dddefa83d66bd338e6489c87 Mon Sep 17 00:00:00 2001 From: Ryan Fleury Date: Sat, 1 Jun 2024 10:58:49 -0700 Subject: [PATCH] fix zero expression child nodes, commonly produced via partially typed expressions --- src/eval/eval_parser.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/src/eval/eval_parser.c b/src/eval/eval_parser.c index bd0379f7..92416fec 100644 --- a/src/eval/eval_parser.c +++ b/src/eval/eval_parser.c @@ -618,7 +618,7 @@ eval_parse_type_from_text_tokens(Arena *arena, EVAL_ParseCtx *ctx, String8 text, if(str8_match(token_string, str8_lit("*"), 0)) { token_it += 1; - parse.expr = eval_expr(arena, EVAL_ExprKind_Ptr, token_string.str, parse.expr, 0, 0); + parse.expr = eval_expr(arena, EVAL_ExprKind_Ptr, token_string.str, parse.expr, &eval_expr_nil, &eval_expr_nil); } else { @@ -797,8 +797,8 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 it = nested_parse.last_token; // rjf: build cast-to-U64*, and dereference operators - atom = eval_expr(arena, EVAL_ExprKind_Cast, token_string.str, eval_expr_leaf_type(arena, token_string.str, tg_cons_type_make(ctx->type_graph, TG_Kind_Ptr, tg_key_basic(TG_Kind_U64), 0)), atom, 0); - atom = eval_expr(arena, EVAL_ExprKind_Deref, token_string.str, atom, 0, 0); + atom = eval_expr(arena, EVAL_ExprKind_Cast, token_string.str, eval_expr_leaf_type(arena, token_string.str, tg_cons_type_make(ctx->type_graph, TG_Kind_Ptr, tg_key_basic(TG_Kind_U64), 0)), atom, &eval_expr_nil); + atom = eval_expr(arena, EVAL_ExprKind_Deref, token_string.str, atom, &eval_expr_nil, &eval_expr_nil); // rjf: expect ] EVAL_Token close_paren_maybe = eval_token_at_it(it, tokens); @@ -1172,7 +1172,7 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 if(atom_implicit_member_name.size != 0) { EVAL_Expr *member_expr = eval_expr_leaf_member(arena, atom_implicit_member_name.str, atom_implicit_member_name); - atom = eval_expr(arena, EVAL_ExprKind_MemberAccess, atom_implicit_member_name.str, atom, member_expr, 0); + atom = eval_expr(arena, EVAL_ExprKind_MemberAccess, atom_implicit_member_name.str, atom, member_expr, &eval_expr_nil); } } @@ -1283,7 +1283,7 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 if(good_member_name) { EVAL_Expr *member_expr = eval_expr_leaf_member(arena, member_name.str, member_name); - atom = eval_expr(arena, EVAL_ExprKind_MemberAccess, token_string.str, atom, member_expr, 0); + atom = eval_expr(arena, EVAL_ExprKind_MemberAccess, token_string.str, atom, member_expr, &eval_expr_nil); } // rjf: increment past good member names @@ -1311,7 +1311,7 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 // rjf: valid indexing expression => produce index expr if(idx_expr_parse.expr != &eval_expr_nil) { - atom = eval_expr(arena, EVAL_ExprKind_ArrayIndex, token_string.str, atom, idx_expr_parse.expr, 0); + atom = eval_expr(arena, EVAL_ExprKind_ArrayIndex, token_string.str, atom, idx_expr_parse.expr, &eval_expr_nil); } // rjf: expect ] @@ -1346,7 +1346,8 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 { atom = eval_expr(arena, prefix_unary->kind, prefix_unary->location, prefix_unary->cast_expr != &eval_expr_nil ? prefix_unary->cast_expr : atom, - prefix_unary->cast_expr != &eval_expr_nil ? atom : 0, 0); + prefix_unary->cast_expr != &eval_expr_nil ? atom : &eval_expr_nil, + &eval_expr_nil); } } else if(atom == 0 && first_prefix_unary != 0) @@ -1359,7 +1360,8 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 { atom = eval_expr(arena, prefix_unary->kind, prefix_unary->location, prefix_unary->cast_expr != &eval_expr_nil ? prefix_unary->cast_expr : atom, - prefix_unary->cast_expr != &eval_expr_nil ? atom : 0, 0); + prefix_unary->cast_expr != &eval_expr_nil ? atom : &eval_expr_nil, + &eval_expr_nil); } } @@ -1401,7 +1403,7 @@ eval_parse_expr_from_text_tokens__prec(Arena *arena, EVAL_ParseCtx *ctx, String8 } else { - atom = eval_expr(arena, binary_kind, token_string.str, atom, rhs, 0); + atom = eval_expr(arena, binary_kind, token_string.str, atom, rhs, &eval_expr_nil); } } }