mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-14 08:02:23 -07:00
fix expr chain parsing; fix panel tree building
This commit is contained in:
@@ -35,7 +35,7 @@ e_eval_from_string(Arena *arena, String8 string)
|
||||
{
|
||||
E_TokenArray tokens = e_token_array_from_text(arena, string);
|
||||
E_Parse parse = e_parse_expr_from_text_tokens(arena, string, &tokens);
|
||||
E_Eval eval = e_eval_from_expr(arena, parse.expr);
|
||||
E_Eval eval = e_eval_from_expr(arena, parse.last_expr);
|
||||
e_msg_list_concat_in_place(&eval.msgs, &parse.msgs);
|
||||
return eval;
|
||||
}
|
||||
|
||||
+1
-1
@@ -718,7 +718,7 @@ e_auto_hook_map_insert_new_(Arena *arena, E_AutoHookMap *map, E_AutoHookParams *
|
||||
{
|
||||
E_TokenArray tokens = e_token_array_from_text(scratch.arena, params->type_pattern);
|
||||
E_Parse parse = e_parse_type_from_text_tokens(scratch.arena, params->type_pattern, &tokens);
|
||||
E_IRTreeAndType irtree = e_irtree_and_type_from_expr(scratch.arena, parse.expr);
|
||||
E_IRTreeAndType irtree = e_irtree_and_type_from_expr(scratch.arena, parse.last_expr);
|
||||
type_key = irtree.type_key;
|
||||
}
|
||||
E_AutoHookNode *node = push_array(arena, E_AutoHookNode, 1);
|
||||
|
||||
+67
-88
@@ -1099,7 +1099,7 @@ e_push_leaf_ident_exprs_from_expr__in_place(Arena *arena, E_String2ExprMap *map,
|
||||
internal E_Parse
|
||||
e_parse_type_from_text_tokens(Arena *arena, String8 text, E_TokenArray *tokens)
|
||||
{
|
||||
E_Parse parse = {0, &e_expr_nil};
|
||||
E_Parse parse = {0, &e_expr_nil, &e_expr_nil};
|
||||
E_Token *token_it = tokens->v;
|
||||
|
||||
//- rjf: parse unsigned marker
|
||||
@@ -1151,14 +1151,14 @@ e_parse_type_from_text_tokens(Arena *arena, String8 text, E_TokenArray *tokens)
|
||||
}
|
||||
|
||||
// rjf: construct leaf type
|
||||
parse.expr = e_push_expr(arena, E_ExprKind_TypeIdent, token_string.str);
|
||||
parse.expr->type_key = type_key;
|
||||
parse.first_expr = parse.last_expr = e_push_expr(arena, E_ExprKind_TypeIdent, token_string.str);
|
||||
parse.first_expr->type_key = type_key;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//- rjf: parse extensions
|
||||
if(parse.expr != &e_expr_nil)
|
||||
if(parse.first_expr != &e_expr_nil)
|
||||
{
|
||||
for(;;)
|
||||
{
|
||||
@@ -1171,9 +1171,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.expr;
|
||||
parse.expr = e_push_expr(arena, E_ExprKind_Ptr, token_string.str);
|
||||
e_expr_push_child(parse.expr, ptee);
|
||||
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);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -1188,17 +1188,16 @@ e_parse_type_from_text_tokens(Arena *arena, String8 text, E_TokenArray *tokens)
|
||||
}
|
||||
|
||||
internal E_Parse
|
||||
e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *tokens, S64 max_precedence)
|
||||
e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *tokens, S64 max_precedence, U64 max_chain_count)
|
||||
{
|
||||
ProfBeginFunction();
|
||||
Temp scratch = scratch_begin(&arena, 1);
|
||||
E_Token *it = tokens->v;
|
||||
E_Token *it_opl = tokens->v + tokens->count;
|
||||
E_Parse result = {0, &e_expr_nil};
|
||||
E_Expr *last_expr = &e_expr_nil;
|
||||
E_Parse result = {0, &e_expr_nil, &e_expr_nil};
|
||||
|
||||
//- rjf: parse chain of expressions
|
||||
for(;it < it_opl;)
|
||||
for(U64 chain_count = 0; it < it_opl && chain_count < max_chain_count;)
|
||||
{
|
||||
//- rjf: exit on symbols callers may be waiting on
|
||||
{
|
||||
@@ -1206,7 +1205,9 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
|
||||
String8 token_string = str8_substr(text, token.range);
|
||||
if(token.kind == E_TokenKind_Symbol &&
|
||||
(str8_match(token_string, str8_lit(")"), 0) ||
|
||||
str8_match(token_string, str8_lit("]"), 0)))
|
||||
str8_match(token_string, str8_lit("]"), 0) ||
|
||||
str8_match(token_string, str8_lit(":"), 0) ||
|
||||
str8_match(token_string, str8_lit("?"), 0)))
|
||||
{
|
||||
break;
|
||||
}
|
||||
@@ -1286,7 +1287,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.expr;
|
||||
E_Expr *type = type_parse.last_expr;
|
||||
e_msg_list_concat_in_place(&result.msgs, &type_parse.msgs);
|
||||
it = type_parse.last_token;
|
||||
location = token_string.str;
|
||||
@@ -1367,9 +1368,9 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
|
||||
|
||||
// rjf: parse () contents
|
||||
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);
|
||||
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.expr;
|
||||
atom = nested_parse.last_expr;
|
||||
it = nested_parse.last_token;
|
||||
|
||||
// rjf: expect )
|
||||
@@ -1395,13 +1396,13 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
|
||||
|
||||
// rjf: parse [] contents
|
||||
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);
|
||||
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.expr;
|
||||
atom = nested_parse.last_expr;
|
||||
it = nested_parse.last_token;
|
||||
|
||||
// rjf: build cast-to-U64*, and dereference operators
|
||||
if(nested_parse.expr == &e_expr_nil)
|
||||
if(nested_parse.last_expr == &e_expr_nil)
|
||||
{
|
||||
e_msgf(arena, &result.msgs, E_MsgKind_MalformedInput, token_string.str, "Expected expression following `[`.");
|
||||
}
|
||||
@@ -1777,7 +1778,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.expr;
|
||||
E_Expr *type = type_parse.last_expr;
|
||||
e_msg_list_concat_in_place(&result.msgs, &type_parse.msgs);
|
||||
it = type_parse.last_token;
|
||||
atom = type;
|
||||
@@ -2050,15 +2051,15 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
|
||||
|
||||
// rjf: parse indexing expression
|
||||
E_TokenArray idx_expr_parse_tokens = e_token_array_make_first_opl(it, it_opl);
|
||||
E_Parse idx_expr_parse = e_parse_expr_from_text_tokens__prec(arena, text, &idx_expr_parse_tokens, e_max_precedence);
|
||||
E_Parse idx_expr_parse = e_parse_expr_from_text_tokens__prec(arena, text, &idx_expr_parse_tokens, e_max_precedence, 1);
|
||||
e_msg_list_concat_in_place(&result.msgs, &idx_expr_parse.msgs);
|
||||
it = idx_expr_parse.last_token;
|
||||
|
||||
// rjf: valid indexing expression => produce index expr
|
||||
if(idx_expr_parse.expr != &e_expr_nil)
|
||||
if(idx_expr_parse.last_expr != &e_expr_nil)
|
||||
{
|
||||
E_Expr *array_expr = atom;
|
||||
E_Expr *index_expr = idx_expr_parse.expr;
|
||||
E_Expr *index_expr = idx_expr_parse.last_expr;
|
||||
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);
|
||||
@@ -2083,7 +2084,10 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
|
||||
if(token.kind == E_TokenKind_Symbol &&
|
||||
str8_match(token_string, str8_lit("("), 0))
|
||||
{
|
||||
// rjf: skip (
|
||||
it += 1;
|
||||
|
||||
// rjf: parse all argument expressions
|
||||
E_Expr *callee_expr = atom;
|
||||
E_Expr *call_expr = e_push_expr(arena, E_ExprKind_Call, token_string.str);
|
||||
if(callee_expr->kind == E_ExprKind_LeafIdent)
|
||||
@@ -2091,34 +2095,31 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
|
||||
call_expr->string = callee_expr->string;
|
||||
}
|
||||
e_expr_push_child(call_expr, callee_expr);
|
||||
for(B32 done = 0; !done && it < it_opl;)
|
||||
E_TokenArray args_parse_tokens = e_token_array_make_first_opl(it, it_opl);
|
||||
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)
|
||||
{
|
||||
E_Token token = e_token_at_it(it, tokens);
|
||||
String8 token_string = str8_substr(text, token.range);
|
||||
if(token.kind == E_TokenKind_Symbol && str8_match(token_string, str8_lit(")"), 0))
|
||||
call_expr->last->next = args_parse.first_expr;
|
||||
args_parse.first_expr->prev = call_expr->last;
|
||||
call_expr->last = args_parse.last_expr;
|
||||
}
|
||||
atom = call_expr;
|
||||
|
||||
// rjf: expect )
|
||||
{
|
||||
E_Token close_paren_maybe = e_token_at_it(it, tokens);
|
||||
String8 close_paren_maybe_string = str8_substr(text, close_paren_maybe.range);
|
||||
if(close_paren_maybe.kind != E_TokenKind_Symbol || !str8_match(close_paren_maybe_string, str8_lit(")"), 0))
|
||||
{
|
||||
done = 1;
|
||||
it += 1;
|
||||
e_msgf(arena, &result.msgs, E_MsgKind_MalformedInput, token_string.str, "Unclosed `(`.");
|
||||
}
|
||||
else
|
||||
{
|
||||
E_TokenArray idx_expr_parse_tokens = e_token_array_make_first_opl(it, it_opl);
|
||||
E_Parse arg_parse = e_parse_expr_from_text_tokens__prec(arena, text, &idx_expr_parse_tokens, e_max_precedence);
|
||||
e_msg_list_concat_in_place(&result.msgs, &arg_parse.msgs);
|
||||
if(arg_parse.expr != &e_expr_nil)
|
||||
{
|
||||
e_expr_push_child(call_expr, arg_parse.expr);
|
||||
}
|
||||
it = arg_parse.last_token;
|
||||
E_Token maybe_comma = e_token_at_it(it, tokens);
|
||||
String8 maybe_comma_string = str8_substr(text, token.range);
|
||||
if(maybe_comma.kind == E_TokenKind_Symbol && str8_match(maybe_comma_string, str8_lit(","), 0))
|
||||
{
|
||||
it += 1;
|
||||
}
|
||||
it += 1;
|
||||
}
|
||||
}
|
||||
atom = call_expr;
|
||||
}
|
||||
|
||||
// rjf: quit if this doesn't look like any patterns of postfix unary we know
|
||||
@@ -2194,9 +2195,9 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
|
||||
if(binary_precedence != 0 && binary_precedence <= max_precedence)
|
||||
{
|
||||
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);
|
||||
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.expr;
|
||||
E_Expr *rhs = rhs_expr_parse.last_expr;
|
||||
it = rhs_expr_parse.last_token;
|
||||
if(rhs == &e_expr_nil)
|
||||
{
|
||||
@@ -2220,11 +2221,11 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
|
||||
|
||||
// rjf: parse middle expression
|
||||
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);
|
||||
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.expr;
|
||||
E_Expr *middle_expr = middle_expr_parse.last_expr;
|
||||
e_msg_list_concat_in_place(&result.msgs, &middle_expr_parse.msgs);
|
||||
if(middle_expr_parse.expr == &e_expr_nil)
|
||||
if(middle_expr_parse.last_expr == &e_expr_nil)
|
||||
{
|
||||
e_msgf(arena, &result.msgs, E_MsgKind_MalformedInput, token_string.str, "Expected expression after `?`.");
|
||||
}
|
||||
@@ -2251,12 +2252,12 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
|
||||
|
||||
// rjf: parse rhs
|
||||
E_TokenArray rhs_expr_parse_tokens = e_token_array_make_first_opl(it, it_opl);
|
||||
E_Parse rhs_expr_parse = e_parse_expr_from_text_tokens__prec(arena, text, &rhs_expr_parse_tokens, e_max_precedence);
|
||||
E_Parse rhs_expr_parse = e_parse_expr_from_text_tokens__prec(arena, text, &rhs_expr_parse_tokens, e_max_precedence, 1);
|
||||
if(got_colon)
|
||||
{
|
||||
it = rhs_expr_parse.last_token;
|
||||
e_msg_list_concat_in_place(&result.msgs, &rhs_expr_parse.msgs);
|
||||
if(rhs_expr_parse.expr == &e_expr_nil)
|
||||
if(rhs_expr_parse.last_expr == &e_expr_nil)
|
||||
{
|
||||
e_msgf(arena, &result.msgs, E_MsgKind_MalformedInput, colon_token_string.str, "Expected expression after `:`.");
|
||||
}
|
||||
@@ -2264,12 +2265,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.expr != &e_expr_nil &&
|
||||
rhs_expr_parse.expr != &e_expr_nil)
|
||||
middle_expr_parse.last_expr != &e_expr_nil &&
|
||||
rhs_expr_parse.last_expr != &e_expr_nil)
|
||||
{
|
||||
E_Expr *lhs = atom;
|
||||
E_Expr *mhs = middle_expr_parse.expr;
|
||||
E_Expr *rhs = rhs_expr_parse.expr;
|
||||
E_Expr *mhs = middle_expr_parse.last_expr;
|
||||
E_Expr *rhs = rhs_expr_parse.last_expr;
|
||||
atom = e_push_expr(arena, E_ExprKind_Ternary, token_string.str);
|
||||
e_expr_push_child(atom, lhs);
|
||||
e_expr_push_child(atom, mhs);
|
||||
@@ -2282,38 +2283,15 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
|
||||
{
|
||||
if(token.kind == E_TokenKind_Symbol && str8_match(token_string, str8_lit("=>"), 0))
|
||||
{
|
||||
for(B32 done = 0; !done && it < it_opl;)
|
||||
it += 1;
|
||||
E_TokenArray tags_tokens = e_token_array_make_first_opl(it, it_opl);
|
||||
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)
|
||||
{
|
||||
E_Token maybe_identifier = e_token_at_it(it, tokens);
|
||||
E_Token maybe_open_paren = e_token_at_it(it+1, tokens);
|
||||
String8 maybe_open_paren_string = str8_substr(text, maybe_open_paren.range);
|
||||
if(maybe_identifier.kind == E_TokenKind_Identifier &&
|
||||
maybe_open_paren.kind == E_TokenKind_Symbol &&
|
||||
str8_match(maybe_open_paren_string, str8_lit("("), 0))
|
||||
{
|
||||
E_TokenArray tag_tokens = e_token_array_make_first_opl(it, it_opl);
|
||||
E_Parse tag_parse = e_parse_expr_from_text_tokens(arena, text, &tag_tokens);
|
||||
e_msg_list_concat_in_place(&result.msgs, &tag_parse.msgs);
|
||||
it = tag_parse.last_token;
|
||||
if(tag_parse.expr != &e_expr_nil)
|
||||
{
|
||||
e_expr_push_tag(atom, tag_parse.expr);
|
||||
}
|
||||
else
|
||||
{
|
||||
done = 1;
|
||||
}
|
||||
E_Token maybe_comma = e_token_at_it(it, tokens);
|
||||
String8 maybe_comma_string = str8_substr(text, token.range);
|
||||
if(maybe_comma.kind == E_TokenKind_Symbol && str8_match(maybe_comma_string, str8_lit(","), 0))
|
||||
{
|
||||
it += 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
done = 1;
|
||||
}
|
||||
next = tag->next;
|
||||
e_expr_push_tag(atom, tag);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2328,7 +2306,8 @@ 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.expr, last_expr, atom, next, prev);
|
||||
DLLPushBack_NPZ(&e_expr_nil, result.first_expr, result.last_expr, atom, next, prev);
|
||||
chain_count += 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -2347,7 +2326,7 @@ internal E_Parse
|
||||
e_parse_expr_from_text_tokens(Arena *arena, String8 text, E_TokenArray *tokens)
|
||||
{
|
||||
ProfBegin("parse '%.*s'", str8_varg(text));
|
||||
E_Parse parse = e_parse_expr_from_text_tokens__prec(arena, text, tokens, e_max_precedence);
|
||||
E_Parse parse = e_parse_expr_from_text_tokens__prec(arena, text, tokens, e_max_precedence, max_U64);
|
||||
ProfEnd();
|
||||
return parse;
|
||||
}
|
||||
@@ -2359,7 +2338,7 @@ e_parse_expr_from_text(Arena *arena, String8 text)
|
||||
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.expr;
|
||||
return parse.last_expr;
|
||||
}
|
||||
|
||||
internal E_Parse
|
||||
|
||||
@@ -153,7 +153,8 @@ typedef struct E_Parse E_Parse;
|
||||
struct E_Parse
|
||||
{
|
||||
E_Token *last_token;
|
||||
E_Expr *expr;
|
||||
E_Expr *first_expr;
|
||||
E_Expr *last_expr;
|
||||
E_MsgList msgs;
|
||||
};
|
||||
|
||||
@@ -290,7 +291,7 @@ internal E_TypeKey e_leaf_type_from_name(String8 name);
|
||||
internal E_TypeKey e_type_from_expr(E_Expr *expr);
|
||||
internal void e_push_leaf_ident_exprs_from_expr__in_place(Arena *arena, E_String2ExprMap *map, E_Expr *expr);
|
||||
internal E_Parse e_parse_type_from_text_tokens(Arena *arena, String8 text, E_TokenArray *tokens);
|
||||
internal E_Parse e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *tokens, S64 max_precedence);
|
||||
internal E_Parse e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *tokens, S64 max_precedence, U64 max_chain_count);
|
||||
internal E_Parse e_parse_expr_from_text_tokens(Arena *arena, String8 text, E_TokenArray *tokens);
|
||||
internal E_Expr *e_parse_expr_from_text(Arena *arena, String8 text);
|
||||
internal E_Parse e_parse_expr_from_text__cached(String8 text);
|
||||
|
||||
@@ -32,7 +32,7 @@ ev_type_key_from_params(MD_Node *params)
|
||||
String8 expr = md_string_from_children(scratch.arena, params);
|
||||
E_TokenArray tokens = e_token_array_from_text(scratch.arena, expr);
|
||||
E_Parse parse = e_parse_type_from_text_tokens(scratch.arena, expr, &tokens);
|
||||
E_TypeKey type_key = e_type_from_expr(parse.expr);
|
||||
E_TypeKey type_key = e_type_from_expr(parse.last_expr);
|
||||
scratch_end(scratch);
|
||||
return type_key;
|
||||
}
|
||||
|
||||
@@ -463,7 +463,7 @@ ev_keyed_expr_push_tags(Arena *arena, EV_View *view, EV_Block *block, EV_Key key
|
||||
String8 tag_expr = push_str8_copy(arena, ev_view_rule_from_key(view, key));
|
||||
E_TokenArray tag_expr_tokens = e_token_array_from_text(scratch.arena, tag_expr);
|
||||
E_Parse tag_expr_parse = e_parse_expr_from_text_tokens(arena, tag_expr, &tag_expr_tokens);
|
||||
for(E_Expr *tag = tag_expr_parse.expr, *next = &e_expr_nil; tag != &e_expr_nil; tag = next)
|
||||
for(E_Expr *tag = tag_expr_parse.first_expr, *next = &e_expr_nil; tag != &e_expr_nil; tag = next)
|
||||
{
|
||||
next = tag->next;
|
||||
e_expr_push_tag(expr, tag);
|
||||
@@ -488,7 +488,7 @@ ev_block_tree_from_string(Arena *arena, EV_View *view, String8 filter, String8 s
|
||||
EV_Key root_row_key = ev_key_make(ev_hash_from_key(root_key), 1);
|
||||
E_TokenArray root_tokens = e_token_array_from_text(scratch.arena, string);
|
||||
E_Parse root_parse = e_parse_expr_from_text_tokens(arena, string, &root_tokens);
|
||||
E_Expr *root_expr = root_parse.expr;
|
||||
E_Expr *root_expr = root_parse.last_expr;
|
||||
ev_keyed_expr_push_tags(arena, view, &ev_nil_block, root_row_key, root_expr);
|
||||
|
||||
//- rjf: generate root block
|
||||
|
||||
@@ -73,46 +73,6 @@ rd_cmd_list_push_new(Arena *arena, RD_CmdList *cmds, String8 name, RD_Regs *regs
|
||||
cmds->count += 1;
|
||||
}
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: View Spec Type Functions
|
||||
|
||||
#if 0 // TODO(rjf): @cfg
|
||||
internal RD_ViewRuleKind
|
||||
rd_view_rule_kind_from_string(String8 string)
|
||||
{
|
||||
RD_ViewRuleKind kind = RD_ViewRuleKind_Null;
|
||||
for EachEnumVal(RD_ViewRuleKind, k)
|
||||
{
|
||||
if(str8_match(string, rd_view_rule_kind_info_table[k].string, 0))
|
||||
{
|
||||
kind = k;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return kind;
|
||||
}
|
||||
|
||||
internal RD_ViewRuleInfo *
|
||||
rd_view_rule_info_from_kind(RD_ViewRuleKind kind)
|
||||
{
|
||||
return &rd_view_rule_kind_info_table[kind];
|
||||
}
|
||||
|
||||
internal RD_ViewRuleInfo *
|
||||
rd_view_rule_info_from_string(String8 string)
|
||||
{
|
||||
RD_ViewRuleInfo *result = &rd_nil_view_rule_info;
|
||||
{
|
||||
RD_ViewRuleKind kind = rd_view_rule_kind_from_string(string);
|
||||
if(kind != RD_ViewRuleKind_Null)
|
||||
{
|
||||
result = &rd_view_rule_kind_info_table[kind];
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
#endif
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: View UI Rule Functions
|
||||
|
||||
@@ -847,7 +807,7 @@ rd_panel_tree_from_cfg(Arena *arena, RD_Cfg *cfg)
|
||||
}
|
||||
|
||||
// rjf: extract cfg info
|
||||
B32 panel_has_tabs = 0;
|
||||
B32 panel_has_children = 0;
|
||||
dst->cfg = src;
|
||||
dst->pct_of_parent = (F32)f64_from_str8(src->string);
|
||||
dst->tab_side = (rd_cfg_child_from_string(src, str8_lit("tabs_on_bottom")) != &rd_nil_cfg ? Side_Max : Side_Min);
|
||||
@@ -857,7 +817,7 @@ rd_panel_tree_from_cfg(Arena *arena, RD_Cfg *cfg)
|
||||
MD_TokenizeResult tokenize = md_tokenize_from_text(scratch.arena, src_child->string);
|
||||
if(tokenize.tokens.count == 1 && tokenize.tokens.v[0].flags & MD_TokenFlag_Numeric)
|
||||
{
|
||||
// NOTE(rjf): skip - this is a panel.
|
||||
panel_has_children = 1;
|
||||
}
|
||||
else if(str8_match(src_child->string, str8_lit("tabs_on_bottom"), 0))
|
||||
{
|
||||
@@ -869,7 +829,6 @@ rd_panel_tree_from_cfg(Arena *arena, RD_Cfg *cfg)
|
||||
}
|
||||
else if(tokenize.tokens.count == 1 && tokenize.tokens.v[0].flags & MD_TokenFlag_Identifier)
|
||||
{
|
||||
panel_has_tabs = 1;
|
||||
rd_cfg_list_push(arena, &dst->tabs, src_child);
|
||||
if(rd_cfg_child_from_string(src_child, str8_lit("selected")) != &rd_nil_cfg)
|
||||
{
|
||||
@@ -880,7 +839,7 @@ rd_panel_tree_from_cfg(Arena *arena, RD_Cfg *cfg)
|
||||
|
||||
// rjf: recurse
|
||||
rec = rd_cfg_rec__depth_first(src_root, src);
|
||||
if(panel_has_tabs)
|
||||
if(!panel_has_children)
|
||||
{
|
||||
MemoryZeroStruct(&rec);
|
||||
rec.next = &rd_nil_cfg;
|
||||
@@ -13165,7 +13124,10 @@ rd_frame(void)
|
||||
E_Parse parse = e_parse_expr_from_text__cached(expr);
|
||||
if(parse.msgs.max_kind == E_MsgKind_Null)
|
||||
{
|
||||
e_push_leaf_ident_exprs_from_expr__in_place(scratch.arena, ctx->macro_map, parse.expr);
|
||||
for(E_Expr *expr = parse.first_expr; expr != &e_expr_nil; expr = expr->next)
|
||||
{
|
||||
e_push_leaf_ident_exprs_from_expr__in_place(scratch.arena, ctx->macro_map, expr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -936,15 +936,6 @@ internal RD_Regs *rd_regs_copy(Arena *arena, RD_Regs *src);
|
||||
|
||||
internal void rd_cmd_list_push_new(Arena *arena, RD_CmdList *cmds, String8 name, RD_Regs *regs);
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: View Spec Type Functions
|
||||
|
||||
#if 0 // TODO(rjf): @cfg
|
||||
internal RD_ViewRuleKind rd_view_rule_kind_from_string(String8 string);
|
||||
internal RD_ViewRuleInfo *rd_view_rule_info_from_kind(RD_ViewRuleKind kind);
|
||||
internal RD_ViewRuleInfo *rd_view_rule_info_from_string(String8 string);
|
||||
#endif
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: View UI Rule Functions
|
||||
|
||||
|
||||
@@ -2793,7 +2793,7 @@ RD_VIEW_UI_FUNCTION_DEF(watch)
|
||||
String8 string = ev_expr_string_from_row(scratch.arena, row, 0);
|
||||
E_TokenArray tokens = e_token_array_from_text(scratch.arena, string);
|
||||
E_Parse parse = e_parse_expr_from_text_tokens(scratch.arena, string, &tokens);
|
||||
E_IRTreeAndType irtree = e_irtree_and_type_from_expr(scratch.arena, parse.expr);
|
||||
E_IRTreeAndType irtree = e_irtree_and_type_from_expr(scratch.arena, parse.last_expr);
|
||||
E_OpList oplist = e_oplist_from_irtree(scratch.arena, irtree.root);
|
||||
String8 bytecode = e_bytecode_from_oplist(scratch.arena, &oplist);
|
||||
UI_Flags(UI_BoxFlag_DrawTextWeak) ui_labelf("Text:");
|
||||
@@ -2815,7 +2815,7 @@ RD_VIEW_UI_FUNCTION_DEF(watch)
|
||||
E_Expr *expr;
|
||||
S64 depth;
|
||||
};
|
||||
Task start_task = {0, 0, parse.expr};
|
||||
Task start_task = {0, 0, parse.last_expr};
|
||||
Task *first_task = &start_task;
|
||||
Task *last_task = first_task;
|
||||
for(Task *t = first_task; t != 0; t = t->next)
|
||||
|
||||
Reference in New Issue
Block a user