From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from sonic312-25.consmr.mail.ir2.yahoo.com (sonic312-25.consmr.mail.ir2.yahoo.com [77.238.178.96]) by sourceware.org (Postfix) with ESMTPS id A7A27386F831 for ; Mon, 27 Apr 2020 12:59:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org A7A27386F831 X-YMail-OSG: tZ_qUP0VM1nNaFqs0zycdXF3yc.giqwelRGCr2gL3JtW2KdWIM4mLIehHPAaiWq zLO.l8JSmkhQuifZS1sos_lPs0EG1_N1sGGaWmeR0jiBmObAeYWBSTlmPLQX.RVTDVXFdEq0.WlB E4M8.ACt.1UyOgA2xXj9y8zbHLqjNsLA9BQAheMGEBtntCQcOI8sGR5BhXlTAbWZuA485V2iakkq y_XtQVu3esP0F5ZFjhatMptUkmCct4fAAkHl6abKAuQyMdx_EcJX5iNlyD9VvAzbp6hQteIfDLbs TEw09rABGyNRKvwA.JnGmIXn.NvQ1SUeKD6DzrpkZttr_a9xG1QTwbCO1W0lQBkVHvliNT_o_qkQ HtRl.PPp1KjH4.Mr5S01LNdbp62tLzyHyOMwm6hyrFxolEbzRrOmapcIPv_oReJ7jBFGz0XyCAwZ ays_Uy80zsgkH4JkwfmjCMfsGwh5sZByddXTnkFaTlEFrlmAki4Ldiiztu0nnnw4mjPaueUYq9gQ Vp1p4fWvdC55yZlg82FnhAi.xKaOeaC9Cm7BuDHktT_tcUM2JcqoZK4E_IIEIDVwUvikz5uJWlIG 9YyjRe2ShI6FkMCfDl36XQ0rw3nDoAwQzU_66X8SNGN_xdqP8QQQ4MfCVmWwjJwd.x.a6OSw3UFS MKhVGGdAaaLCEDXeL6XVx4dC9YWWTkFHIa7LM0VO3h7XACZH.93rxjzNWs.2Z.R4FZ5A_4MJBdpC 8VpyXAbLcCPeE_.9g.DjG.vXcnLN8BGyHvuEDE30wtZeewmo3vJCiOmFNqYJU_iMMKYLVBKWJNE8 Lk6h1olSFva3weHEORQB_vKZ_MeQmzgvGGlhnZiOiEFJ1KQ9AzJRGJPmQQ6rv0KVWgyCA_Otmbky TZrbcwGyfb.uNNkmRQZRw5Gl5igrvZgQfUEFgGLAqIaqqr21Q1D5dXbHITGrc5AHA4.ZoxF5zWjA JE05gnYL_TEIlYwpRi3GU5ZZ8gY66zZBGM3_lFqC5CjMyGkeagzyp4ffB8AZnOvnyZeFBUNi.u9T o5U0_oGVY84Gvbc8FBH90qAU_yYEBm.ECds47RCNvTa.OXywWpxNuxusDwWWGb6ntq0jObHvEL2m oHXxsJlCkQM9DIaC0OXnI.FDfePocNC9D79xF5_hulHz7c79071WIpn9m_UTErqvHsZkomToHMQD VPLGYlMRt3zC8Os1Pz8LyhSS5GKZJm3ZeZRIXR1HrwMgp1aunVKuy4y5qlZhlkp8Y7mqYTajwpyf BtUBaJXVr3rPDUQqLAf87kU6qr96S0Zzbp2wjbRUvp514NAR9uIiLVgpIxFKi7h45rDZkEFOVKXO _NZiuwc.XJP95eVqiPrJU5meGriFEfNqM2jS_6TFPbdRkx4TomP.Pz1EInAsBWBwy5kSCP4li2FK QKfg6OzPoOd.Xwluo2l8wXx2kZCkpE412 Received: from sonic.gate.mail.ne1.yahoo.com by sonic312.consmr.mail.ir2.yahoo.com with HTTP; Mon, 27 Apr 2020 12:59:15 +0000 Received: by smtp406.mail.ir2.yahoo.com (VZM Hermes SMTP Server) with ESMTPA ID 15c6fe76735df024444128bc0e858837; Mon, 27 Apr 2020 12:59:14 +0000 (UTC) From: Hannes Domani To: gdb-patches@sourceware.org Subject: [PATCH v2][PR gdb/17320] Fix array pretty formatter Date: Mon, 27 Apr 2020 14:59:00 +0200 Message-Id: <20200427125900.5587-1-ssbssa@yahoo.de> X-Mailer: git-send-email 2.26.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Antivirus: Avast (VPS 200426-0, 04/26/2020), Outbound message X-Antivirus-Status: Clean References: <20200427125900.5587-1-ssbssa.ref@yahoo.de> X-Spam-Status: No, score=-17.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, KAM_SHORT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 27 Apr 2020 12:59:19 -0000 Currently, printing with array pretty formatting makes the output actually less readable than without: (gdb) p -array on -- {{1,2,3},{4,5,6}} $1 = { {1, 2, 3}, {4, 5, 6}} (gdb) p -array on -array-indexes on -- {{1,2,3},{4,5,6}} $2 = {[0] = {[0] = 1, [1] = 2, [2] = 3}, [1] = {[0] = 4, [1] = 5, [2] = 6}} These changes now also put the first element and the array end bracket on a new line, similar to the structure pretty formatter: (gdb) p -array on -- {{1,2,3},{4,5,6}} $1 = { { 1, 2, 3 }, { 4, 5, 6 } } (gdb) p -array on -array-indexes on -- {{1,2,3},{4,5,6}} $2 = { [0] = { [0] = 1, [1] = 2, [2] = 3 }, [1] = { [0] = 4, [1] = 5, [2] = 6 } } gdb/ChangeLog: 2020-04-27 Hannes Domani PR gdb/17320 * ada-valprint.c (val_print_packed_array_elements): Move array end bracket to new line. (ada_val_print_string): Remove extra spaces before first array element. * c-valprint.c (c_value_print_array): Likewise. * m2-valprint.c (m2_print_array_contents): Likewise. (m2_value_print_inner): Likewise. * p-valprint.c (pascal_value_print_inner): Likewise. * valprint.c (generic_val_print_array): Likewise. (value_print_array_elements): Move first array element and array end bracket to new line. gdb/testsuite/ChangeLog: 2020-04-27 Hannes Domani PR gdb/17320 * gdb.base/pretty-array.c: New test. * gdb.base/pretty-array.exp: New file. --- v2: - Added test case. --- gdb/ada-valprint.c | 8 +-- gdb/c-valprint.c | 4 -- gdb/m2-valprint.c | 4 -- gdb/p-valprint.c | 4 -- gdb/testsuite/gdb.base/pretty-array.c | 24 +++++++++ gdb/testsuite/gdb.base/pretty-array.exp | 65 +++++++++++++++++++++++++ gdb/valprint.c | 15 ++++-- 7 files changed, 104 insertions(+), 20 deletions(-) create mode 100644 gdb/testsuite/gdb.base/pretty-array.c create mode 100644 gdb/testsuite/gdb.base/pretty-array.exp diff --git a/gdb/ada-valprint.c b/gdb/ada-valprint.c index 2768829cdb..9233df1bb1 100644 --- a/gdb/ada-valprint.c +++ b/gdb/ada-valprint.c @@ -195,6 +195,11 @@ val_print_packed_array_elements (struct type *type, const gdb_byte *valaddr, fprintf_filtered (stream, ", "); } } + else if (options->prettyformat_arrays) + { + fprintf_filtered (stream, "\n"); + print_spaces_filtered (2 + 2 * recurse, stream); + } wrap_here (n_spaces (2 + 2 * recurse)); maybe_print_array_index (index_type, i + low, stream, options); @@ -707,9 +712,6 @@ ada_val_print_string (struct type *type, const gdb_byte *valaddr, eltlen = TYPE_LENGTH (elttype); len = TYPE_LENGTH (type) / eltlen; - if (options->prettyformat_arrays) - print_spaces_filtered (2 + 2 * recurse, stream); - /* If requested, look for the first null char and only print elements up to it. */ if (options->stop_print_at_null) diff --git a/gdb/c-valprint.c b/gdb/c-valprint.c index bde9c6cc88..52ea5eda0c 100644 --- a/gdb/c-valprint.c +++ b/gdb/c-valprint.c @@ -252,10 +252,6 @@ c_value_print_array (struct value *val, eltlen = TYPE_LENGTH (elttype); len = high_bound - low_bound + 1; - if (options->prettyformat_arrays) - { - print_spaces_filtered (2 + 2 * recurse, stream); - } /* Print arrays of textual chars with a string syntax, as long as the entire array is valid. */ diff --git a/gdb/m2-valprint.c b/gdb/m2-valprint.c index 844a63f3bd..e210b5ec2f 100644 --- a/gdb/m2-valprint.c +++ b/gdb/m2-valprint.c @@ -265,8 +265,6 @@ m2_print_array_contents (struct value *val, if (TYPE_LENGTH (type) > 0) { - if (options->prettyformat_arrays) - print_spaces_filtered (2 + 2 * recurse, stream); /* For an array of chars, print with string syntax. */ if (TYPE_LENGTH (type) == 1 && ((TYPE_CODE (type) == TYPE_CODE_INT) @@ -318,8 +316,6 @@ m2_value_print_inner (struct value *val, struct ui_file *stream, int recurse, { elttype = check_typedef (TYPE_TARGET_TYPE (type)); len = TYPE_LENGTH (type) / TYPE_LENGTH (elttype); - if (options->prettyformat_arrays) - print_spaces_filtered (2 + 2 * recurse, stream); /* For an array of chars, print with string syntax. */ if (TYPE_LENGTH (elttype) == 1 && ((TYPE_CODE (elttype) == TYPE_CODE_INT) diff --git a/gdb/p-valprint.c b/gdb/p-valprint.c index cbd7fb75e2..fbf5c5cf14 100644 --- a/gdb/p-valprint.c +++ b/gdb/p-valprint.c @@ -93,10 +93,6 @@ pascal_value_print_inner (struct value *val, struct ui_file *stream, len = high_bound - low_bound + 1; elttype = check_typedef (TYPE_TARGET_TYPE (type)); eltlen = TYPE_LENGTH (elttype); - if (options->prettyformat_arrays) - { - print_spaces_filtered (2 + 2 * recurse, stream); - } /* If 's' format is used, try to print out as string. If no format is given, print as string if element type is of TYPE_CODE_CHAR and element size is 1,2 or 4. */ diff --git a/gdb/testsuite/gdb.base/pretty-array.c b/gdb/testsuite/gdb.base/pretty-array.c new file mode 100644 index 0000000000..2adebcca8c --- /dev/null +++ b/gdb/testsuite/gdb.base/pretty-array.c @@ -0,0 +1,24 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2020 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . */ + +int nums[2][3] = {{11, 12, 13}, {21, 22, 23}}; + +int +main () +{ + return 0; +} diff --git a/gdb/testsuite/gdb.base/pretty-array.exp b/gdb/testsuite/gdb.base/pretty-array.exp new file mode 100644 index 0000000000..e17ce18857 --- /dev/null +++ b/gdb/testsuite/gdb.base/pretty-array.exp @@ -0,0 +1,65 @@ +# Copyright 2020 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# Test pretty printing of arrays. + +standard_testfile + +if {[prepare_for_testing $testfile.exp $testfile $srcfile debug]} { + untested $testfile.exp + return -1 +} + +if ![runto_main] { + untested $testfile.exp + return -1 +} + +gdb_test "print nums" \ + "= \\{\\{11, 12, 13\\}, \\{21, 22, 23\\}\\}" + +gdb_test_no_output "set print array on" + +gdb_test "print nums" \ + [multi_line \ + " = {" \ + " {" \ + " 11," \ + " 12," \ + " 13" \ + " }," \ + " {" \ + " 21," \ + " 22," \ + " 23" \ + " }" \ + "}" ] + +gdb_test_no_output "set print array-indexes on" + +gdb_test "print nums" \ + [multi_line \ + " = {" \ + " \\\[0\\\] = {" \ + " \\\[0\\\] = 11," \ + " \\\[1\\\] = 12," \ + " \\\[2\\\] = 13" \ + " }," \ + " \\\[1\\\] = {" \ + " \\\[0\\\] = 21," \ + " \\\[1\\\] = 22," \ + " \\\[2\\\] = 23" \ + " }" \ + "}" ] diff --git a/gdb/valprint.c b/gdb/valprint.c index b91aaaeb7c..5f95553838 100644 --- a/gdb/valprint.c +++ b/gdb/valprint.c @@ -442,11 +442,6 @@ generic_val_print_array (struct value *val, if (!get_array_bounds (type, &low_bound, &high_bound)) error (_("Could not determine the array high bound")); - if (options->prettyformat_arrays) - { - print_spaces_filtered (2 + 2 * recurse, stream); - } - fputs_filtered (decorations->array_start, stream); value_print_array_elements (val, stream, recurse, options, 0); fputs_filtered (decorations->array_end, stream); @@ -1946,6 +1941,11 @@ value_print_array_elements (struct value *val, struct ui_file *stream, else fprintf_filtered (stream, ", "); } + else if (options->prettyformat_arrays) + { + fprintf_filtered (stream, "\n"); + print_spaces_filtered (2 + 2 * recurse, stream); + } wrap_here (n_spaces (2 + 2 * recurse)); maybe_print_array_index (index_type, i + low_bound, stream, options); @@ -1990,6 +1990,11 @@ value_print_array_elements (struct value *val, struct ui_file *stream, annotate_array_section_end (); if (i < len) fprintf_filtered (stream, "..."); + if (options->prettyformat_arrays) + { + fprintf_filtered (stream, "\n"); + print_spaces_filtered (2 * recurse, stream); + } } /* Read LEN bytes of target memory at address MEMADDR, placing the -- 2.26.2