diff options
| author | Arnold D. Robbins <arnold@skeeve.com> | 2023-12-02 21:45:18 +0200 |
|---|---|---|
| committer | Arnold D. Robbins <arnold@skeeve.com> | 2023-12-02 21:45:18 +0200 |
| commit | 571222eb6ce54cf36a60134489624e9d7e74330a (patch) | |
| tree | 7d60713049f6dbc4e34691f57b0a5c4419023fdb | |
| parent | 9dfc09b0fe3a4a8d893f99781b0f981073b19ac7 (diff) | |
| download | gawk-571222eb6ce54cf36a60134489624e9d7e74330a.tar.gz | |
Bug fix in debug.c.
| -rw-r--r-- | ChangeLog | 5 | ||||
| -rw-r--r-- | debug.c | 14 |
2 files changed, 16 insertions, 3 deletions
@@ -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" @@ -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; } |
