diff --git a/src/eval_visualization/eval_visualization_core.c b/src/eval_visualization/eval_visualization_core.c index 35e6a7f3..8f06f230 100644 --- a/src/eval_visualization/eval_visualization_core.c +++ b/src/eval_visualization/eval_visualization_core.c @@ -104,39 +104,50 @@ internal B32 ev_type_key_is_editable(E_TypeKey type_key) { B32 result = 0; - for(E_TypeKey t = type_key; !result; t = e_type_unwrap(e_type_direct_from_key(e_type_unwrap(t)))) + B32 done = 0; + for(E_TypeKey t = type_key; !result && !done; t = e_type_direct_from_key(t)) { E_TypeKind kind = e_type_kind_from_key(t); - if(kind == E_TypeKind_Array) + switch(kind) { - E_TypeKind element_kind = e_type_kind_from_key(e_type_unwrap(e_type_direct_from_key(e_type_unwrap(t)))); - if(element_kind != E_TypeKind_U8 && - element_kind != E_TypeKind_U16 && - element_kind != E_TypeKind_U32 && - element_kind != E_TypeKind_S8 && - element_kind != E_TypeKind_S16 && - element_kind != E_TypeKind_S32 && - element_kind != E_TypeKind_UChar8 && - element_kind != E_TypeKind_UChar16 && - element_kind != E_TypeKind_UChar32 && - element_kind != E_TypeKind_Char8 && - element_kind != E_TypeKind_Char16 && - element_kind != E_TypeKind_Char32) + case E_TypeKind_Null: + case E_TypeKind_Function: { - break; - } - else + result = 0; + done = 1; + }break; + default: + if((E_TypeKind_FirstBasic <= kind && kind <= E_TypeKind_LastBasic) || e_type_kind_is_pointer_or_ref(kind)) { result = 1; - } - } - if(kind == E_TypeKind_Null || kind == E_TypeKind_Function) - { - break; - } - if((E_TypeKind_FirstBasic <= kind && kind <= E_TypeKind_LastBasic) || e_type_kind_is_pointer_or_ref(kind)) - { - result = 1; + done = 1; + }break; + case E_TypeKind_Array: + { + E_Type *type = e_type_from_key__cached(t); + if(type->flags & E_TypeFlag_IsNotText) + { + result = 0; + done = 1; + } + else + { + E_TypeKind element_kind = e_type_kind_from_key(e_type_unwrap(e_type_direct_from_key(e_type_unwrap(t)))); + result = (element_kind == E_TypeKind_U8 || + element_kind == E_TypeKind_U16 || + element_kind == E_TypeKind_U32 || + element_kind == E_TypeKind_S8 || + element_kind == E_TypeKind_S16 || + element_kind == E_TypeKind_S32 || + element_kind == E_TypeKind_UChar8 || + element_kind == E_TypeKind_UChar16 || + element_kind == E_TypeKind_UChar32 || + element_kind == E_TypeKind_Char8 || + element_kind == E_TypeKind_Char16 || + element_kind == E_TypeKind_Char32); + done = 1; + } + }break; } } return result; diff --git a/src/raddbg/raddbg_core.c b/src/raddbg/raddbg_core.c index 4f7cb691..58346a55 100644 --- a/src/raddbg/raddbg_core.c +++ b/src/raddbg/raddbg_core.c @@ -1924,7 +1924,6 @@ rd_commit_eval_value_string(E_Eval dst_eval, String8 string) B32 commit_at_ptr_dest = 0; if(!e_type_key_match(e_type_key_zero(), type_key)) { - //- rjf: meta evaluations? -> always treat string as textual content, as-is, // and commit that. if(!got_commit_data && dst_eval.space.kind == RD_EvalSpaceKind_MetaCfg) @@ -2115,7 +2114,15 @@ rd_view_from_eval(RD_Cfg *parent, E_Eval eval) Temp scratch = scratch_begin(0, 0); E_TypeKey type_key = eval.irtree.type_key; E_Type *type = e_type_from_key__cached(type_key); - String8 schema_name = type->name; + String8 schema_name = str8_lit("watch"); + if(type->kind == E_TypeKind_Lens) + { + RD_ViewUIRule *view_ui_rule = rd_view_ui_rule_from_string(type->name); + if(view_ui_rule != &rd_nil_view_ui_rule) + { + schema_name = type->name; + } + } RD_Cfg *view = rd_cfg_child_from_string_or_alloc(parent, schema_name); rd_cfg_child_from_string_or_alloc(view, str8_lit("selected")); {