mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-14 17:28:07 +00:00
highlighting for views; view doc / autocompletion coverage
This commit is contained in:
@@ -207,7 +207,6 @@
|
||||
#define MemoryCopy(dst, src, size) memmove((dst), (src), (size))
|
||||
#define MemorySet(dst, byte, size) memset((dst), (byte), (size))
|
||||
#define MemoryCompare(a, b, size) memcmp((a), (b), (size))
|
||||
#define MemoryStrlen(ptr) strlen(ptr)
|
||||
|
||||
#define MemoryCopyStruct(d,s) MemoryCopy((d),(s),sizeof(*(d)))
|
||||
#define MemoryCopyArray(d,s) MemoryCopy((d),(s),sizeof(d))
|
||||
@@ -225,9 +224,6 @@
|
||||
|
||||
#define MemoryIsZeroStruct(ptr) memory_is_zero((ptr), sizeof(*(ptr)))
|
||||
|
||||
#define MemoryRead(T,p,e) ( ((p)+sizeof(T)<=(e))?(*(T*)(p)):(0) )
|
||||
#define MemoryConsume(T,p,e) ( ((p)+sizeof(T)<=(e))?((p)+=sizeof(T),*(T*)((p)-sizeof(T))):((p)=(e),0) )
|
||||
|
||||
////////////////////////////////
|
||||
//~ rjf: Asserts
|
||||
|
||||
@@ -502,29 +498,29 @@ union U512
|
||||
typedef struct U16Array U16Array;
|
||||
struct U16Array
|
||||
{
|
||||
U64 count;
|
||||
U16 *v;
|
||||
U64 count;
|
||||
};
|
||||
|
||||
typedef struct U32Array U32Array;
|
||||
struct U32Array
|
||||
{
|
||||
U64 count;
|
||||
U32 *v;
|
||||
U64 count;
|
||||
};
|
||||
|
||||
typedef struct U64Array U64Array;
|
||||
struct U64Array
|
||||
{
|
||||
U64 count;
|
||||
U64 *v;
|
||||
U64 count;
|
||||
};
|
||||
|
||||
typedef struct U128Array U128Array;
|
||||
struct U128Array
|
||||
{
|
||||
U64 count;
|
||||
U128 *v;
|
||||
U64 count;
|
||||
};
|
||||
|
||||
////////////////////////////////
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -603,7 +603,7 @@ C_LINKAGE_BEGIN
|
||||
extern String8 rd_tab_fast_path_view_name_table[25];
|
||||
extern String8 rd_tab_fast_path_query_name_table[25];
|
||||
extern RD_VocabInfo rd_vocab_info_table[360];
|
||||
extern RD_NameSchemaInfo rd_name_schema_info_table[26];
|
||||
extern RD_NameSchemaInfo rd_name_schema_info_table[40];
|
||||
extern String8 rd_reg_slot_code_name_table[49];
|
||||
extern Rng1U64 rd_reg_slot_range_table[49];
|
||||
extern String8 rd_binding_version_remap_old_name_table[8];
|
||||
|
||||
+101
-36
@@ -226,7 +226,7 @@ RD_VocabTable:
|
||||
|
||||
@table(name schema) RD_SchemaTable:
|
||||
{
|
||||
//- rjf: users / projects
|
||||
//- rjf: @schema users
|
||||
{
|
||||
user,
|
||||
```
|
||||
@@ -253,7 +253,7 @@ RD_VocabTable:
|
||||
@description("The user's theme, which describes all colors used throughout the UI.")
|
||||
'theme': string,
|
||||
@no_expand @display_name('User Theme')
|
||||
'theme_colors': query,
|
||||
'theme_colors': set,
|
||||
|
||||
//- rjf: autocompletion
|
||||
@display_name('Autocompletion Lister') @description("Enables the autocompletion lister while typing expressions.") @default(1)
|
||||
@@ -305,9 +305,12 @@ RD_VocabTable:
|
||||
```
|
||||
}
|
||||
|
||||
//- rjf: @schema project
|
||||
//
|
||||
// TODO(rjf): the control codes could be fed from the D_ExceptionCodeKindTable, but
|
||||
// we do not support that in this generator - we'd need a way to form a table-generated
|
||||
// string and put it into a table cell...
|
||||
//
|
||||
{
|
||||
project
|
||||
```
|
||||
@@ -328,7 +331,7 @@ RD_VocabTable:
|
||||
@default("None") @display_name('Project Theme') @description("The project's theme, which describes all colors used throughout the UI, and can override the user's theme.")
|
||||
'theme': string,
|
||||
@no_expand @display_name('Project Theme') @description("The project's theme, which describes all colors used throughout the UI, and can override the user's theme.")
|
||||
'theme_colors': query,
|
||||
'theme_colors': set,
|
||||
|
||||
//- rjf: exception settings
|
||||
@default(1) @display_name("Break On Win32 Control-C Exceptions") @description("Code: 0x40010005")
|
||||
@@ -409,7 +412,7 @@ RD_VocabTable:
|
||||
```
|
||||
}
|
||||
|
||||
//- rjf: theme colors
|
||||
//- rjf: @schema theme_color
|
||||
{
|
||||
theme_color,
|
||||
```
|
||||
@@ -423,7 +426,7 @@ RD_VocabTable:
|
||||
```
|
||||
}
|
||||
|
||||
//- rjf: windows
|
||||
//- rjf: @schema window
|
||||
{
|
||||
window,
|
||||
```
|
||||
@@ -454,7 +457,7 @@ RD_VocabTable:
|
||||
```
|
||||
}
|
||||
|
||||
//- rjf: tabs
|
||||
//- rjf: @schema tab
|
||||
{
|
||||
tab,
|
||||
```
|
||||
@@ -467,21 +470,49 @@ RD_VocabTable:
|
||||
```
|
||||
}
|
||||
|
||||
//- rjf: views
|
||||
{
|
||||
watch,
|
||||
```
|
||||
@inherit(tab) x:
|
||||
{
|
||||
@override @display_name('Tab Row Height') @description("Controls the tab's row height, in multiples of the font size.")
|
||||
'row_height': @range[1.75f, 5.f] f32,
|
||||
'label': code_string,
|
||||
@description("The root expression which is evaluated to produce the watch window.")
|
||||
'expression': expr_string,
|
||||
@no_expand 'watches': query,
|
||||
}
|
||||
```
|
||||
}
|
||||
//- rjf: @schema bin
|
||||
{bin ```x:{ @description('An expression to which the 2-radix display should apply.') 'expression': expr_string }```}
|
||||
|
||||
//- rjf: @schema oct
|
||||
{oct ```x:{ @description('An expression to which the 8-radix display should apply.') 'expression': expr_string }```}
|
||||
|
||||
//- rjf: @schema hex
|
||||
{hex ```x:{ @description('An expression to which the 16-radix display should apply.') 'expression': expr_string }```}
|
||||
|
||||
//- rjf: @schema digits
|
||||
{digits ```x:{ @description('An expression to which the digit display should apply.') 'expression': expr_string, @description('The minimum number of digits to display.') 'digit_count': u64 }```}
|
||||
|
||||
//- rjf: @schema no_string
|
||||
{no_string ```x:{ @description('The expression for which string visualization should be disabled.') 'expression': expr_string}```}
|
||||
|
||||
//- rjf: @schema no_char
|
||||
{no_char ```x:{ @description('The expression for which character visualization should be disabled.') 'expression': expr_string}```}
|
||||
|
||||
//- rjf: @schema no_addr
|
||||
{no_addr ```x:{ @description('The expression for which address visualization should be disabled.') 'expression': expr_string}```}
|
||||
|
||||
//- rjf: @schema sequence
|
||||
{sequence ```x:{ @description('The number of expansions to generate.') 'count': expr_string}```}
|
||||
|
||||
//- rjf: @schema rows
|
||||
{rows ```x:{ @description('The expression for which rows should be generated.') 'expression': expr_string, @description('A list of expressions which will be used to generate rows.') '...'}```}
|
||||
|
||||
//- rjf: @schema columns
|
||||
{columns ```x:{ @description('The expression for whose expansions columns should be generated.') 'expression': expr_string, @description('A list of expressions which will be used to generate columns for each expansion from `expression`.') '...'}```}
|
||||
|
||||
//- rjf: @schema omit
|
||||
{omit ```x:{ @description('The expression for which certain members should be omitted.') 'expression': expr_string, @description('A list of member names to omit from the expansion.') '...'}```}
|
||||
|
||||
//- rjf: @schema range1
|
||||
{range1 ```x:{ @description('The expression which should be bounded by `min` and `max`.') 'expression': expr_string, @description('The lower bound.') min, @description('The upper bound.') max}```}
|
||||
|
||||
//- rjf: @schema array
|
||||
{array ```x:{ @description('An expression of the base address of the array.') 'base_address': expr_string, @description('The number of elements in the array.') count}```}
|
||||
|
||||
//- rjf: @schema slice
|
||||
{slice ```x:{ @description('An expression of a structure that is to be interpreted as a slice.') 'expression': expr_string}```}
|
||||
|
||||
//- rjf: @schema list
|
||||
{
|
||||
list,
|
||||
```
|
||||
@@ -494,6 +525,24 @@ RD_VocabTable:
|
||||
}
|
||||
```
|
||||
}
|
||||
|
||||
//- rjf: @schema watch
|
||||
{
|
||||
watch,
|
||||
```
|
||||
@inherit(tab) x:
|
||||
{
|
||||
@override @display_name('Tab Row Height') @description("Controls the tab's row height, in multiples of the font size.")
|
||||
'row_height': @range[1.75f, 5.f] f32,
|
||||
'label': code_string,
|
||||
@description("The root expression which is evaluated to produce the watch window.")
|
||||
'expression': expr_string,
|
||||
@no_expand 'watches': set,
|
||||
}
|
||||
```
|
||||
}
|
||||
|
||||
//- rjf: @schema text
|
||||
{
|
||||
text,
|
||||
```
|
||||
@@ -514,6 +563,8 @@ RD_VocabTable:
|
||||
}
|
||||
```
|
||||
}
|
||||
|
||||
//- rjf: @schema disasm
|
||||
{
|
||||
disasm,
|
||||
```
|
||||
@@ -537,6 +588,8 @@ RD_VocabTable:
|
||||
}
|
||||
```
|
||||
}
|
||||
|
||||
//- rjf: @schema memory
|
||||
{
|
||||
memory,
|
||||
```
|
||||
@@ -567,10 +620,12 @@ RD_VocabTable:
|
||||
@default(1) @display_name("Peek As Signed") 'peek_as_signed': bool,
|
||||
@default(1) @display_name("Peek As Float") 'peek_as_float': bool,
|
||||
@display_name("Extra Peek Types") @description("A list of types as which to interpret selected memory.")
|
||||
'peek_types': query,
|
||||
'peek_types': set,
|
||||
}
|
||||
```
|
||||
}
|
||||
|
||||
//- rjf: @schema bitmap
|
||||
{
|
||||
bitmap,
|
||||
```
|
||||
@@ -585,6 +640,8 @@ RD_VocabTable:
|
||||
}
|
||||
```
|
||||
}
|
||||
|
||||
//- rjf: @schema color
|
||||
{
|
||||
color,
|
||||
```
|
||||
@@ -595,6 +652,8 @@ RD_VocabTable:
|
||||
}
|
||||
```
|
||||
}
|
||||
|
||||
//- rjf: @schema geo3d
|
||||
{
|
||||
geo3d,
|
||||
```
|
||||
@@ -612,7 +671,7 @@ RD_VocabTable:
|
||||
```
|
||||
}
|
||||
|
||||
//- rjf: getting started
|
||||
//- rjf: @schema getting_started
|
||||
{
|
||||
getting_started,
|
||||
```
|
||||
@@ -622,7 +681,7 @@ RD_VocabTable:
|
||||
```
|
||||
}
|
||||
|
||||
//- rjf: targets
|
||||
//- rjf: @schema target
|
||||
{
|
||||
target,
|
||||
```
|
||||
@@ -638,14 +697,14 @@ RD_VocabTable:
|
||||
'stdout_path': @no_relativize path,
|
||||
'stderr_path': @no_relativize path,
|
||||
'stdin_path': @no_relativize path,
|
||||
'environment': query,
|
||||
'environment': set,
|
||||
'debug_subprocesses': bool,
|
||||
@no_revert @no_expand @default(0) 'enabled': bool,
|
||||
}
|
||||
```,
|
||||
}
|
||||
|
||||
//- rjf: breakpoints
|
||||
//- rjf: @schema breakpoint
|
||||
{
|
||||
breakpoint,
|
||||
```
|
||||
@@ -667,7 +726,7 @@ RD_VocabTable:
|
||||
```,
|
||||
}
|
||||
|
||||
//- rjf: watch pins
|
||||
//- rjf: @schema watch_pin
|
||||
{
|
||||
watch_pin,
|
||||
```
|
||||
@@ -682,7 +741,7 @@ RD_VocabTable:
|
||||
```,
|
||||
}
|
||||
|
||||
//- rjf: debug infos
|
||||
//- rjf: @schema debug_info
|
||||
{
|
||||
debug_info,
|
||||
```
|
||||
@@ -697,46 +756,52 @@ RD_VocabTable:
|
||||
```,
|
||||
}
|
||||
|
||||
//- rjf: file path maps
|
||||
//- rjf: @schema file_path_map
|
||||
{
|
||||
file_path_map,
|
||||
```@collection_commands(add_file_path_map) @row_commands(remove_cfg) x:{'source': @no_relativize path, 'dest': @no_relativize path}```,
|
||||
}
|
||||
|
||||
//- rjf: type views
|
||||
//- rjf: @schema type_view
|
||||
{
|
||||
type_view,
|
||||
```@collection_commands(add_type_view) @row_commands(remove_cfg) x:{'type':expr_string, 'expr':expr_string}```,
|
||||
}
|
||||
|
||||
//- rjf: recent projects
|
||||
//- rjf: @schema recent_project
|
||||
{
|
||||
recent_project,
|
||||
```x:{'path':path}```,
|
||||
}
|
||||
|
||||
//- rjf: recent files
|
||||
//- rjf: @schema recent_file
|
||||
{
|
||||
recent_file,
|
||||
```x:{'path':path}```,
|
||||
}
|
||||
|
||||
//- rjf: control entities
|
||||
//- rjf: @schema machine
|
||||
{
|
||||
machine,
|
||||
```x:{'label':code_string, @no_expand 'active':bool, 'unattached_processes':query, 'processes':query}```,
|
||||
```x:{'label':code_string, @no_expand 'active':bool, 'unattached_processes':set, 'processes':set}```,
|
||||
}
|
||||
|
||||
//- rjf: @schema process
|
||||
{
|
||||
process,
|
||||
```x:{'label':code_string, 'id':u64, @no_expand 'active':bool, 'modules':query, 'threads':query}```,
|
||||
```x:{'label':code_string, 'id':u64, @no_expand 'active':bool, 'modules':set, 'threads':set}```,
|
||||
}
|
||||
|
||||
//- rjf: @schema module
|
||||
{
|
||||
module,
|
||||
```x:{'exe':path, 'dbg':path, 'vaddr_range':vaddr_range}```,
|
||||
}
|
||||
|
||||
//- rjf: @schema thread
|
||||
{
|
||||
thread,
|
||||
```x:{'label':code_string, 'id':u64, @no_expand 'active':bool, 'call_stack':query}```,
|
||||
```x:{'label':code_string, 'id':u64, @no_expand 'active':bool, 'call_stack':set}```,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6014,7 +6014,7 @@ rd_window_frame(void)
|
||||
UI_TagF("weak") ui_label(display_name);
|
||||
}
|
||||
}
|
||||
UI_TagF("weak") ui_label(desc);
|
||||
UI_TagF("weak") rd_label(desc);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9345,7 +9345,7 @@ rd_set_autocomp_regs_(E_Eval dst_eval, RD_Regs *regs)
|
||||
MD_Node *arg_schema = &md_nil_node;
|
||||
if(callee_expr.size != 0)
|
||||
{
|
||||
E_Eval callee_eval = e_eval_from_string(callee_expr);
|
||||
E_Eval callee_eval = e_eval_from_stringf("view:%S", callee_expr);
|
||||
E_Type *callee_type = e_type_from_key(callee_eval.irtree.type_key);
|
||||
if(callee_type->kind == E_TypeKind_LensSpec)
|
||||
{
|
||||
@@ -9375,7 +9375,7 @@ rd_set_autocomp_regs_(E_Eval dst_eval, RD_Regs *regs)
|
||||
cursor_info.list_expr = push_str8_copy(ws->autocomp_arena, list_expr);
|
||||
cursor_info.filter = push_str8_copy(ws->autocomp_arena, filter);
|
||||
cursor_info.replaced_range = replaced_range;
|
||||
cursor_info.callee_expr = push_str8_copy(ws->autocomp_arena, callee_expr);
|
||||
cursor_info.callee_expr = str8f(ws->autocomp_arena, "view:%S", callee_expr);
|
||||
cursor_info.arg_schema = arg_schema;
|
||||
|
||||
scratch_end(scratch);
|
||||
@@ -9454,7 +9454,7 @@ rd_code_color_slot_from_txt_token_kind(TXT_TokenKind kind)
|
||||
}
|
||||
|
||||
internal RD_CodeColorSlot
|
||||
rd_code_color_slot_from_txt_token_kind_lookup_string(TXT_TokenKind kind, String8 string)
|
||||
rd_code_color_slot_from_txt_token_kind_lookup_string(TXT_TokenKind kind, String8 string, B32 allow_macros, B32 is_called)
|
||||
{
|
||||
RD_CodeColorSlot color = RD_CodeColorSlot_CodeDefault;
|
||||
if(kind == TXT_TokenKind_Identifier || kind == TXT_TokenKind_Keyword)
|
||||
@@ -9505,6 +9505,17 @@ rd_code_color_slot_from_txt_token_kind_lookup_string(TXT_TokenKind kind, String8
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: try to map as macro
|
||||
if((!mapped || is_called) && allow_macros)
|
||||
{
|
||||
E_Expr *expr = e_string2expr_map_lookup(e_ir_ctx->macro_map, string);
|
||||
if(expr != &e_expr_nil)
|
||||
{
|
||||
mapped = 1;
|
||||
color = RD_CodeColorSlot_CodeMeta;
|
||||
}
|
||||
}
|
||||
|
||||
// rjf: try to map using asynchronous matching system
|
||||
if(!mapped && kind == TXT_TokenKind_Identifier)
|
||||
{
|
||||
@@ -11615,7 +11626,7 @@ rd_frame(void)
|
||||
}
|
||||
|
||||
|
||||
//- rjf: add types for queries
|
||||
//- rjf: add types for sets
|
||||
{
|
||||
e_string2typekey_map_insert(rd_frame_arena(), rd_state->meta_name2type_map, str8_lit("environment"),
|
||||
e_type_key_cons(.kind = E_TypeKind_Set,
|
||||
|
||||
@@ -755,7 +755,7 @@ internal void rd_set_autocomp_regs_(E_Eval dst_eval, RD_Regs *regs);
|
||||
internal MD_Node *rd_theme_tree_from_name(Arena *arena, Access *access, String8 theme_name);
|
||||
internal Vec4F32 rd_rgba_from_code_color_slot(RD_CodeColorSlot slot);
|
||||
internal RD_CodeColorSlot rd_code_color_slot_from_txt_token_kind(TXT_TokenKind kind);
|
||||
internal RD_CodeColorSlot rd_code_color_slot_from_txt_token_kind_lookup_string(TXT_TokenKind kind, String8 string);
|
||||
internal RD_CodeColorSlot rd_code_color_slot_from_txt_token_kind_lookup_string(TXT_TokenKind kind, String8 string, B32 allow_macros, B32 is_called);
|
||||
|
||||
//- rjf: fonts
|
||||
internal F32 rd_font_size(void);
|
||||
|
||||
@@ -361,7 +361,7 @@ E_TYPE_ACCESS_FUNCTION_DEF(schema)
|
||||
child_type_key = e_type_key_cons(.kind = E_TypeKind_Struct, .name = str8_lit("vaddr_range"), .count = vaddr_range_members.count, .members = vaddr_range_members.v);
|
||||
scratch_end(scratch);
|
||||
}
|
||||
else if(str8_match(child_schema->first->string, str8_lit("query"), 0))
|
||||
else if(str8_match(child_schema->first->string, str8_lit("set"), 0))
|
||||
{
|
||||
child_type_key = e_string2typekey_map_lookup(rd_state->meta_name2type_map, child_schema->string);
|
||||
}
|
||||
|
||||
@@ -2347,7 +2347,7 @@ rd_code_slice(RD_CodeSliceParams *params, TxtPt *cursor, TxtPt *mark, S64 *prefe
|
||||
|
||||
// rjf: token -> token color
|
||||
RD_CodeColorSlot token_color_slot = rd_code_color_slot_from_txt_token_kind(token->kind);
|
||||
RD_CodeColorSlot lookup_color_slot = preceded_by_dot ? token_color_slot : rd_code_color_slot_from_txt_token_kind_lookup_string(token->kind, token_string);
|
||||
RD_CodeColorSlot lookup_color_slot = preceded_by_dot ? token_color_slot : rd_code_color_slot_from_txt_token_kind_lookup_string(token->kind, token_string, 0, 0);
|
||||
Vec4F32 token_color = rd_rgba_from_code_color_slot(token_color_slot);
|
||||
if(lookup_color_slot != RD_CodeColorSlot_CodeDefault)
|
||||
{
|
||||
@@ -3224,9 +3224,10 @@ rd_fstrs_from_code_string(Arena *arena, F32 alpha, B32 indirection_size_change,
|
||||
case TXT_TokenKind_Keyword:
|
||||
{
|
||||
RD_CodeColorSlot lookup_theme_color_slot = RD_CodeColorSlot_CodeDefault;
|
||||
B32 is_called = (token+1 < tokens_opl && token[1].kind == TXT_TokenKind_Symbol && str8_match(str8_substr(string, token[1].range), str8_lit("("), 0));
|
||||
if(!preceded_by_dot)
|
||||
{
|
||||
lookup_theme_color_slot = rd_code_color_slot_from_txt_token_kind_lookup_string(token->kind, token_string);
|
||||
lookup_theme_color_slot = rd_code_color_slot_from_txt_token_kind_lookup_string(token->kind, token_string, 1, is_called);
|
||||
}
|
||||
if(lookup_theme_color_slot != RD_CodeColorSlot_CodeDefault)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user