summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2023-12-02 21:45:18 +0200
committerArnold D. Robbins <arnold@skeeve.com>2023-12-02 21:45:18 +0200
commit571222eb6ce54cf36a60134489624e9d7e74330a (patch)
tree7d60713049f6dbc4e34691f57b0a5c4419023fdb
parent9dfc09b0fe3a4a8d893f99781b0f981073b19ac7 (diff)
downloadgawk-571222eb6ce54cf36a60134489624e9d7e74330a.tar.gz
Bug fix in debug.c.
-rw-r--r--ChangeLog5
-rw-r--r--debug.c14
2 files changed, 16 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 12c386f..9a1f42e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2023-12-02 Arnold D. Robbins <arnold@skeeve.com>
+
+ * debug.c (print_array): Fix printing of multidimensional arrays.
+ Thanks to Hermann Peifer for the report.
+
2023-11-28 Arnold D. Robbins <arnold@skeeve.com>
Straighten out Node_elem_new some more. Thanks to "M"
diff --git a/debug.c b/debug.c
index a0ce09b..028e209 100644
--- a/debug.c
+++ b/debug.c
@@ -1096,6 +1096,7 @@ print_array(volatile NODE *arr, char *arr_name)
volatile NODE *r;
volatile int ret = 0;
volatile jmp_buf pager_quit_tag_stack;
+ static int level = 0;
if (assoc_empty((NODE *) arr)) {
gprintf(out_fp, _("array `%s' is empty\n"), arr_name);
@@ -1108,14 +1109,20 @@ print_array(volatile NODE *arr, char *arr_name)
list = assoc_list((NODE *) arr, "@ind_str_asc", SORTED_IN);
PUSH_BINDING(pager_quit_tag_stack, pager_quit_tag, pager_quit_tag_valid);
+ // level variable is so that we can print things like a[1][2][3] = 123 correctly.
if (setjmp(pager_quit_tag) == 0) {
+ level++;
for (i = 0; ret == 0 && i < num_elems; i++) {
subs = list[i];
r = *assoc_lookup((NODE *) arr, subs);
- if (r->type == Node_var_array)
+ if (level == 1)
+ gprintf(out_fp, "%s", arr_name);
+ if (r->type == Node_var_array) {
+ if (level >= 1)
+ gprintf(out_fp, "[\"%.*s\"]", (int) subs->stlen, subs->stptr);
ret = print_array(r, r->vname);
- else {
- gprintf(out_fp, "%s[\"%.*s\"] = ", arr_name, (int) subs->stlen, subs->stptr);
+ } else {
+ gprintf(out_fp, "[\"%.*s\"] = ", (int) subs->stlen, subs->stptr);
valinfo((NODE *) r, gprintf, out_fp);
}
}
@@ -1127,6 +1134,7 @@ print_array(volatile NODE *arr, char *arr_name)
for (i = 0; i < num_elems; i++)
unref(list[i]);
efree(list);
+ level--;
return ret;
}