[qwaq] Show only user local defs

While the .tmp defs weren't too much clutter in v6p progs, the .arg defs
in Ruamoko progs make for a lot of noise. Showing only user defs (those
without a leading .) makes for a much more usable locals display.
This commit is contained in:
Bill Currie 2022-02-12 09:28:22 +09:00
parent 944a9253e9
commit 39583a959e
2 changed files with 28 additions and 15 deletions

View file

@ -17,6 +17,7 @@
qdb_function_t *func; qdb_function_t *func;
qdb_auxfunction_t *aux_func; qdb_auxfunction_t *aux_func;
qdb_def_t *defs; qdb_def_t *defs;
int num_user_defs;
DefView **def_views; DefView **def_views;
int *def_rows; int *def_rows;
void *data; void *data;

View file

@ -33,7 +33,7 @@ free_defs (LocalsData *self)
{ {
obj_free (self.defs); obj_free (self.defs);
self.defs = nil; self.defs = nil;
for (int i = 0; i < self.aux_func.num_locals; i++) { for (int i = 0; i < self.num_user_defs; i++) {
[self.def_views[i] release]; [self.def_views[i] release];
} }
obj_free (self.def_views); obj_free (self.def_views);
@ -74,17 +74,29 @@ free_defs (LocalsData *self)
data = obj_malloc (func.local_size); data = obj_malloc (func.local_size);
} }
aux_func = qdb_get_auxfunction (target, fnum); aux_func = qdb_get_auxfunction (target, fnum);
num_user_defs = 0;
if (aux_func) { if (aux_func) {
defs = qdb_get_local_defs (target, fnum); defs = qdb_get_local_defs (target, fnum);
def_views = obj_malloc (aux_func.num_locals);
def_rows = obj_malloc (aux_func.num_locals + 1);
def_rows[0] = 0;
for (int i = 0; i < aux_func.num_locals; i++) { for (int i = 0; i < aux_func.num_locals; i++) {
def_views[i] = [[DefView withDef:defs[i] in:data target:target] string def_name = qdb_get_string (target, defs[i].name);
retain]; if (str_mid (def_name, 0, 1) != ".") {
def_rows[i + 1] = [def_views[i] rows]; num_user_defs++;
}
} }
prefixsum (def_rows, aux_func.num_locals + 1); def_views = obj_malloc (num_user_defs);
def_rows = obj_malloc (num_user_defs + 1);
def_rows[0] = 0;
for (int i = 0, j = 0; i < aux_func.num_locals; i++) {
string def_name = qdb_get_string (target, defs[i].name);
if (str_mid (def_name, 0, 1) == ".") {
continue;
}
def_views[j] = [[DefView withDef:defs[i] in:data target:target]
retain];
def_rows[j + 1] = [def_views[j] rows];
j++;
}
prefixsum (def_rows, num_user_defs + 1);
} }
[onRowCountChanged respond:self]; [onRowCountChanged respond:self];
return self; return self;
@ -95,16 +107,16 @@ free_defs (LocalsData *self)
if (data && func.local_size && func.local_data) { if (data && func.local_size && func.local_data) {
qdb_get_data (target, func.local_data, func.local_size, data); qdb_get_data (target, func.local_data, func.local_size, data);
} }
int rowCount = def_rows[aux_func.num_locals]; int rowCount = def_rows[num_user_defs];
if (aux_func) { if (aux_func) {
def_rows[0] = 0; def_rows[0] = 0;
for (int i = 0; i < aux_func.num_locals; i++) { for (int i = 0; i < num_user_defs; i++) {
[def_views[i] fetchData]; [def_views[i] fetchData];
def_rows[i + 1] = [def_views[i] rows]; def_rows[i + 1] = [def_views[i] rows];
} }
prefixsum (def_rows, aux_func.num_locals + 1); prefixsum (def_rows, num_user_defs + 1);
} }
if (rowCount != def_rows[aux_func.num_locals]) { if (rowCount != def_rows[num_user_defs]) {
[onRowCountChanged respond:self]; [onRowCountChanged respond:self];
} }
return self; return self;
@ -118,10 +130,10 @@ free_defs (LocalsData *self)
-(int)numberOfRows:(TableView *)tableview -(int)numberOfRows:(TableView *)tableview
{ {
if (aux_func) { if (aux_func) {
if (!aux_func.num_locals) { if (!num_user_defs) {
return 0; return 0;
} }
return def_rows[aux_func.num_locals]; return def_rows[num_user_defs];
} else if (func) { } else if (func) {
return (func.local_size + 3) / 4; return (func.local_size + 3) / 4;
} }
@ -133,7 +145,7 @@ free_defs (LocalsData *self)
row:(int)row row:(int)row
{ {
View *view = nil; View *view = nil;
int *index = fbsearch (&row, def_rows, aux_func.num_locals, 1, nil); int *index = fbsearch (&row, def_rows, num_user_defs, 1, nil);
if (index) { if (index) {
DefView *dv = def_views[index - def_rows]; DefView *dv = def_views[index - def_rows];