mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-06 13:58:40 +00:00
eval system syntax for opaque id evaluations
This commit is contained in:
+44
-34
@@ -3729,6 +3729,8 @@ df_ctrl_last_stop_event(void)
|
|||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Evaluation Context
|
//~ rjf: Evaluation Context
|
||||||
|
|
||||||
|
//- rjf: entity <-> eval space
|
||||||
|
|
||||||
internal DF_Entity *
|
internal DF_Entity *
|
||||||
df_entity_from_eval_space(E_Space space)
|
df_entity_from_eval_space(E_Space space)
|
||||||
{
|
{
|
||||||
@@ -3748,6 +3750,8 @@ df_eval_space_from_entity(DF_Entity *entity)
|
|||||||
return space;
|
return space;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//- rjf: eval space reads/writes
|
||||||
|
|
||||||
internal B32
|
internal B32
|
||||||
df_eval_space_read(void *u, E_Space space, void *out, Rng1U64 range)
|
df_eval_space_read(void *u, E_Space space, void *out, Rng1U64 range)
|
||||||
{
|
{
|
||||||
@@ -3905,25 +3909,7 @@ df_eval_space_write(void *u, E_Space space, void *in, Rng1U64 range)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal Rng1U64
|
//- rjf: asynchronous streamed reads -> hashes from spaces
|
||||||
df_range_from_eval_cfg(E_Eval eval, DF_CfgNode *cfg)
|
|
||||||
{
|
|
||||||
Temp scratch = scratch_begin(0, 0);
|
|
||||||
E_Eval value_eval = e_value_eval_from_eval(eval);
|
|
||||||
DF_CfgNode *size_cfg = df_cfg_node_child_from_string(cfg, str8_lit("size"), 0);
|
|
||||||
String8 size_expr = df_string_from_cfg_node_children(scratch.arena, size_cfg);
|
|
||||||
E_Eval size_eval = e_eval_from_string(scratch.arena, size_expr);
|
|
||||||
E_Eval size_value_eval = e_value_eval_from_eval(size_eval);
|
|
||||||
Rng1U64 result = {0};
|
|
||||||
result.min = value_eval.value.u64;
|
|
||||||
result.max = max_U64;
|
|
||||||
if(size_eval.msgs.max_kind == E_MsgKind_Null)
|
|
||||||
{
|
|
||||||
result.max = result.min + size_value_eval.value.u64;
|
|
||||||
}
|
|
||||||
scratch_end(scratch);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal U128
|
internal U128
|
||||||
df_key_from_eval_space_range(E_Space space, Rng1U64 range)
|
df_key_from_eval_space_range(E_Space space, Rng1U64 range)
|
||||||
@@ -3947,21 +3933,6 @@ df_key_from_eval_space_range(E_Space space, Rng1U64 range)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal E_Eval
|
|
||||||
df_eval_from_eval_cfg_table(Arena *arena, E_Eval eval, DF_CfgTable *cfg)
|
|
||||||
{
|
|
||||||
for(DF_CfgVal *val = cfg->first_val; val != 0 && val != &df_g_nil_cfg_val; val = val->linear_next)
|
|
||||||
{
|
|
||||||
DF_CoreViewRuleSpec *spec = df_core_view_rule_spec_from_string(val->string);
|
|
||||||
if(spec->info.flags & DF_CoreViewRuleSpecInfoFlag_EvalResolution)
|
|
||||||
{
|
|
||||||
eval = spec->info.eval_resolution(arena, eval, val);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return eval;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Evaluation Views
|
//~ rjf: Evaluation Views
|
||||||
|
|
||||||
@@ -5436,6 +5407,45 @@ df_viz_row_is_editable(DF_EvalVizRow *row)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//- rjf: view rule config tree info extraction
|
||||||
|
|
||||||
|
internal Rng1U64
|
||||||
|
df_range_from_eval_cfg(E_Eval eval, DF_CfgNode *cfg)
|
||||||
|
{
|
||||||
|
Temp scratch = scratch_begin(0, 0);
|
||||||
|
E_Eval value_eval = e_value_eval_from_eval(eval);
|
||||||
|
DF_CfgNode *size_cfg = df_cfg_node_child_from_string(cfg, str8_lit("size"), 0);
|
||||||
|
String8 size_expr = df_string_from_cfg_node_children(scratch.arena, size_cfg);
|
||||||
|
E_Eval size_eval = e_eval_from_string(scratch.arena, size_expr);
|
||||||
|
E_Eval size_value_eval = e_value_eval_from_eval(size_eval);
|
||||||
|
Rng1U64 result = {0};
|
||||||
|
result.min = value_eval.value.u64;
|
||||||
|
result.max = max_U64;
|
||||||
|
if(size_eval.msgs.max_kind == E_MsgKind_Null)
|
||||||
|
{
|
||||||
|
result.max = result.min + size_value_eval.value.u64;
|
||||||
|
}
|
||||||
|
scratch_end(scratch);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//- rjf: view rule eval application
|
||||||
|
|
||||||
|
internal E_Eval
|
||||||
|
df_eval_from_eval_cfg_table(Arena *arena, E_Eval eval, DF_CfgTable *cfg)
|
||||||
|
{
|
||||||
|
for(DF_CfgVal *val = cfg->first_val; val != 0 && val != &df_g_nil_cfg_val; val = val->linear_next)
|
||||||
|
{
|
||||||
|
DF_CoreViewRuleSpec *spec = df_core_view_rule_spec_from_string(val->string);
|
||||||
|
if(spec->info.flags & DF_CoreViewRuleSpecInfoFlag_EvalResolution)
|
||||||
|
{
|
||||||
|
eval = spec->info.eval_resolution(arena, eval, val);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return eval;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Main State Accessors/Mutators
|
//~ rjf: Main State Accessors/Mutators
|
||||||
|
|
||||||
|
|||||||
+12
-3
@@ -1571,15 +1571,18 @@ internal void df_ctrl_run(DF_RunKind run, DF_Entity *run_thread, CTRL_RunFlags f
|
|||||||
internal CTRL_Event df_ctrl_last_stop_event(void);
|
internal CTRL_Event df_ctrl_last_stop_event(void);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Evaluation Context
|
//~ rjf: Evaluation Spaces
|
||||||
|
|
||||||
|
//- rjf: entity <-> eval space
|
||||||
internal DF_Entity *df_entity_from_eval_space(E_Space space);
|
internal DF_Entity *df_entity_from_eval_space(E_Space space);
|
||||||
internal E_Space df_eval_space_from_entity(DF_Entity *entity);
|
internal E_Space df_eval_space_from_entity(DF_Entity *entity);
|
||||||
|
|
||||||
|
//- rjf: eval space reads/writes
|
||||||
internal B32 df_eval_space_read(void *u, E_Space space, void *out, Rng1U64 range);
|
internal B32 df_eval_space_read(void *u, E_Space space, void *out, Rng1U64 range);
|
||||||
internal B32 df_eval_space_write(void *u, E_Space space, void *in, Rng1U64 range);
|
internal B32 df_eval_space_write(void *u, E_Space space, void *in, Rng1U64 range);
|
||||||
internal Rng1U64 df_range_from_eval_cfg(E_Eval eval, DF_CfgNode *cfg);
|
|
||||||
|
//- rjf: asynchronous streamed reads -> hashes from spaces
|
||||||
internal U128 df_key_from_eval_space_range(E_Space space, Rng1U64 range);
|
internal U128 df_key_from_eval_space_range(E_Space space, Rng1U64 range);
|
||||||
internal E_Eval df_eval_from_eval_cfg_table(Arena *arena, E_Eval eval, DF_CfgTable *cfg);
|
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Evaluation Views
|
//~ rjf: Evaluation Views
|
||||||
@@ -1647,6 +1650,12 @@ internal String8 df_expr_string_from_viz_row(Arena *arena, DF_EvalVizRow *row);
|
|||||||
internal B32 df_viz_row_is_expandable(DF_EvalVizRow *row);
|
internal B32 df_viz_row_is_expandable(DF_EvalVizRow *row);
|
||||||
internal B32 df_viz_row_is_editable(DF_EvalVizRow *row);
|
internal B32 df_viz_row_is_editable(DF_EvalVizRow *row);
|
||||||
|
|
||||||
|
//- rjf: view rule config tree info extraction
|
||||||
|
internal Rng1U64 df_range_from_eval_cfg(E_Eval eval, DF_CfgNode *cfg);
|
||||||
|
|
||||||
|
//- rjf: view rule eval application
|
||||||
|
internal E_Eval df_eval_from_eval_cfg_table(Arena *arena, E_Eval eval, DF_CfgTable *cfg);
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Main State Accessors/Mutators
|
//~ rjf: Main State Accessors/Mutators
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -77,7 +77,7 @@ struct DF_SettingVal
|
|||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: View Functions
|
//~ rjf: View Hook Function Types
|
||||||
|
|
||||||
typedef struct DF_View DF_View;
|
typedef struct DF_View DF_View;
|
||||||
typedef struct DF_Panel DF_Panel;
|
typedef struct DF_Panel DF_Panel;
|
||||||
|
|||||||
@@ -1688,7 +1688,14 @@ e_parse_expr_from_text_tokens__prec(Arena *arena, String8 text, E_TokenArray *to
|
|||||||
{
|
{
|
||||||
U64 val = 0;
|
U64 val = 0;
|
||||||
try_u64_from_str8_c_rules(token_string, &val);
|
try_u64_from_str8_c_rules(token_string, &val);
|
||||||
atom = e_push_expr(arena, E_ExprKind_LeafU64, token_string.str);
|
if(str8_match(resolution_qualifier, str8_lit("id"), 0))
|
||||||
|
{
|
||||||
|
atom = e_push_expr(arena, E_ExprKind_LeafID, token_string.str);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
atom = e_push_expr(arena, E_ExprKind_LeafU64, token_string.str);
|
||||||
|
}
|
||||||
atom->u64 = val;
|
atom->u64 = val;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user