dead code deletion, begin extending eval/eval-viz to work on expr-chains rather than single expressions; fixes / convergence for watch window

This commit is contained in:
Ryan Fleury
2025-02-15 18:11:22 -08:00
parent 176c2590a0
commit c603457460
12 changed files with 152 additions and 232 deletions
+30 -30
View File
@@ -660,7 +660,7 @@ internal E_Expr *
e_push_expr(Arena *arena, E_ExprKind kind, void *location)
{
E_Expr *e = push_array(arena, E_Expr, 1);
e->first = e->last = e->next = e->ref = e->first_tag = e->last_tag = &e_expr_nil;
e->first = e->last = e->next = e->prev = e->ref = e->first_tag = e->last_tag = &e_expr_nil;
e->location = location;
e->kind = kind;
return e;
@@ -1110,14 +1110,14 @@ e_parse_type_from_text_tokens(Arena *arena, String8 text, E_TokenArray *tokens)
}
// rjf: construct leaf type
parse.first_expr = parse.last_expr = e_push_expr(arena, E_ExprKind_TypeIdent, token_string.str);
parse.first_expr->type_key = type_key;
parse.exprs.first = parse.exprs.last = e_push_expr(arena, E_ExprKind_TypeIdent, token_string.str);
parse.exprs.first->type_key = type_key;
}
}
}
//- rjf: parse extensions
if(parse.first_expr != &e_expr_nil)
if(parse.exprs.first != &e_expr_nil)
{
for(;;)
{
@@ -1130,9 +1130,9 @@ e_parse_type_from_text_tokens(Arena *arena, String8 text, E_TokenArray *tokens)
if(str8_match(token_string, str8_lit("*"), 0))
{
token_it += 1;
E_Expr *ptee = parse.first_expr;
parse.first_expr = parse.last_expr = e_push_expr(arena, E_ExprKind_Ptr, token_string.str);
e_expr_push_child(parse.first_expr, ptee);
E_Expr *ptee = parse.exprs.first;
parse.exprs.first = parse.exprs.last = e_push_expr(arena, E_ExprKind_Ptr, token_string.str);
e_expr_push_child(parse.exprs.first, ptee);
}
else
{
@@ -1246,7 +1246,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
// rjf: parse type expr
E_TokenArray type_parse_tokens = e_token_array_make_first_opl(it, it_opl);
E_Parse type_parse = e_parse_type_from_text_tokens(arena, text, &type_parse_tokens);
E_Expr *type = type_parse.last_expr;
E_Expr *type = type_parse.exprs.last;
e_msg_list_concat_in_place(&result.msgs, &type_parse.msgs);
it = type_parse.last_token;
location = token_string.str;
@@ -1329,7 +1329,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
E_TokenArray nested_parse_tokens = e_token_array_make_first_opl(it, it_opl);
E_Parse nested_parse = e_parse_expr_from_text_tokens__prec(arena, text, &nested_parse_tokens, e_max_precedence, 1);
e_msg_list_concat_in_place(&result.msgs, &nested_parse.msgs);
atom = nested_parse.last_expr;
atom = nested_parse.exprs.last;
it = nested_parse.last_token;
// rjf: expect )
@@ -1357,11 +1357,11 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
E_TokenArray nested_parse_tokens = e_token_array_make_first_opl(it, it_opl);
E_Parse nested_parse = e_parse_expr_from_text_tokens__prec(arena, text, &nested_parse_tokens, e_max_precedence, 1);
e_msg_list_concat_in_place(&result.msgs, &nested_parse.msgs);
atom = nested_parse.last_expr;
atom = nested_parse.exprs.last;
it = nested_parse.last_token;
// rjf: build cast-to-U64*, and dereference operators
if(nested_parse.last_expr == &e_expr_nil)
if(nested_parse.exprs.last == &e_expr_nil)
{
e_msgf(arena, &result.msgs, E_MsgKind_MalformedInput, token_string.str, "Expected expression following `[`.");
}
@@ -1737,7 +1737,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
{
E_TokenArray type_parse_tokens = e_token_array_make_first_opl(it-1, it_opl);
E_Parse type_parse = e_parse_type_from_text_tokens(arena, text, &type_parse_tokens);
E_Expr *type = type_parse.last_expr;
E_Expr *type = type_parse.exprs.last;
e_msg_list_concat_in_place(&result.msgs, &type_parse.msgs);
it = type_parse.last_token;
atom = type;
@@ -2015,10 +2015,10 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
it = idx_expr_parse.last_token;
// rjf: valid indexing expression => produce index expr
if(idx_expr_parse.last_expr != &e_expr_nil)
if(idx_expr_parse.exprs.last != &e_expr_nil)
{
E_Expr *array_expr = atom;
E_Expr *index_expr = idx_expr_parse.last_expr;
E_Expr *index_expr = idx_expr_parse.exprs.last;
atom = e_push_expr(arena, E_ExprKind_ArrayIndex, token_string.str);
e_expr_push_child(atom, array_expr);
e_expr_push_child(atom, index_expr);
@@ -2055,11 +2055,11 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
E_Parse args_parse = e_parse_expr_from_text_tokens__prec(arena, text, &args_parse_tokens, e_max_precedence, max_U64);
e_msg_list_concat_in_place(&result.msgs, &args_parse.msgs);
it = args_parse.last_token;
if(args_parse.first_expr != &e_expr_nil)
if(args_parse.exprs.first != &e_expr_nil)
{
call_expr->last->next = args_parse.first_expr;
args_parse.first_expr->prev = call_expr->last;
call_expr->last = args_parse.last_expr;
call_expr->last->next = args_parse.exprs.first;
args_parse.exprs.first->prev = call_expr->last;
call_expr->last = args_parse.exprs.last;
}
atom = call_expr;
@@ -2153,7 +2153,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
E_TokenArray rhs_expr_parse_tokens = e_token_array_make_first_opl(it+1, it_opl);
E_Parse rhs_expr_parse = e_parse_expr_from_text_tokens__prec(arena, text, &rhs_expr_parse_tokens, binary_precedence-1, 1);
e_msg_list_concat_in_place(&result.msgs, &rhs_expr_parse.msgs);
E_Expr *rhs = rhs_expr_parse.last_expr;
E_Expr *rhs = rhs_expr_parse.exprs.last;
it = rhs_expr_parse.last_token;
if(rhs == &e_expr_nil)
{
@@ -2179,9 +2179,9 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
E_TokenArray middle_expr_tokens = e_token_array_make_first_opl(it, it_opl);
E_Parse middle_expr_parse = e_parse_expr_from_text_tokens__prec(arena, text, &middle_expr_tokens, e_max_precedence, 1);
it = middle_expr_parse.last_token;
E_Expr *middle_expr = middle_expr_parse.last_expr;
E_Expr *middle_expr = middle_expr_parse.exprs.last;
e_msg_list_concat_in_place(&result.msgs, &middle_expr_parse.msgs);
if(middle_expr_parse.last_expr == &e_expr_nil)
if(middle_expr_parse.exprs.last == &e_expr_nil)
{
e_msgf(arena, &result.msgs, E_MsgKind_MalformedInput, token_string.str, "Expected expression after `?`.");
}
@@ -2213,7 +2213,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
{
it = rhs_expr_parse.last_token;
e_msg_list_concat_in_place(&result.msgs, &rhs_expr_parse.msgs);
if(rhs_expr_parse.last_expr == &e_expr_nil)
if(rhs_expr_parse.exprs.last == &e_expr_nil)
{
e_msgf(arena, &result.msgs, E_MsgKind_MalformedInput, colon_token_string.str, "Expected expression after `:`.");
}
@@ -2221,12 +2221,12 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
// rjf: build ternary
if(atom != &e_expr_nil &&
middle_expr_parse.last_expr != &e_expr_nil &&
rhs_expr_parse.last_expr != &e_expr_nil)
middle_expr_parse.exprs.last != &e_expr_nil &&
rhs_expr_parse.exprs.last != &e_expr_nil)
{
E_Expr *lhs = atom;
E_Expr *mhs = middle_expr_parse.last_expr;
E_Expr *rhs = rhs_expr_parse.last_expr;
E_Expr *mhs = middle_expr_parse.exprs.last;
E_Expr *rhs = rhs_expr_parse.exprs.last;
atom = e_push_expr(arena, E_ExprKind_Ternary, token_string.str);
e_expr_push_child(atom, lhs);
e_expr_push_child(atom, mhs);
@@ -2244,7 +2244,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
E_Parse tags_parse = e_parse_expr_from_text_tokens__prec(arena, text, &tags_tokens, e_max_precedence, max_U64);
e_msg_list_concat_in_place(&result.msgs, &tags_parse.msgs);
it = tags_parse.last_token;
for(E_Expr *tag = tags_parse.first_expr, *next = &e_expr_nil; tag != &e_expr_nil; tag = next)
for(E_Expr *tag = tags_parse.exprs.first, *next = &e_expr_nil; tag != &e_expr_nil; tag = next)
{
next = tag->next;
e_expr_push_tag(atom, tag);
@@ -2262,7 +2262,7 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
//- rjf: store parsed atom to expression chain - if we didn't get an expression, break
if(atom != &e_expr_nil)
{
DLLPushBack_NPZ(&e_expr_nil, result.first_expr, result.last_expr, atom, next, prev);
DLLPushBack_NPZ(&e_expr_nil, result.exprs.first, result.exprs.last, atom, next, prev);
chain_count += 1;
}
else
@@ -2287,14 +2287,14 @@ e_parse_expr_from_text_tokens(Arena *arena, String8 text, E_TokenArray *tokens)
return parse;
}
internal E_Expr *
internal E_Parse
e_parse_expr_from_text(Arena *arena, String8 text)
{
Temp scratch = scratch_begin(&arena, 1);
E_TokenArray tokens = e_token_array_from_text(scratch.arena, text);
E_Parse parse = e_parse_expr_from_text_tokens(arena, text, &tokens);
scratch_end(scratch);
return parse.last_expr;
return parse;
}
internal E_Parse