public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
From: Jan Kratochvil <jan.kratochvil@redhat.com>
To: gcc-patches@gcc.gnu.org
Cc: gdb-patches@sourceware.org
Subject: [gcc patch 2/3] cp-demangle.c: New DMGL_RET_DROP
Date: Thu, 02 Jun 2011 14:16:00 -0000	[thread overview]
Message-ID: <20110602141622.GC15093@host1.jankratochvil.net> (raw)

Hi,

implement DMGL_RET_DROP as an alternative form of DMGL_RET_POSTFIX, as
described in [gcc patch 0/3].


Thanks,
Jan


include/
2011-05-24  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* demangle.h (DMGL_RET_POSTFIX): Extend the comment.
	(DMGL_RET_DROP): New.

libiberty/
2011-05-24  Jan Kratochvil  <jan.kratochvil@redhat.com>

	* cp-demangle.c (d_print_comp) <DEMANGLE_COMPONENT_FUNCTION_TYPE>: Do
	not pass DMGL_RET_POSTFIX or DMGL_RET_DROP.  Support DMGL_RET_DROP.
	* testsuite/demangle-expected: New testcases for --ret-drop.
	* testsuite/test-demangle.c: Document --ret-drop in a comment.
	(main): New variable ret_drop, fill it, call cplus_demangle with it.

--- a/include/demangle.h
+++ b/include/demangle.h
@@ -45,7 +45,13 @@ extern "C" {
 #define DMGL_VERBOSE	 (1 << 3)	/* Include implementation details.  */
 #define DMGL_TYPES	 (1 << 4)	/* Also try to demangle type encodings.  */
 #define DMGL_RET_POSTFIX (1 << 5)       /* Print function return types (when
-                                           present) after function signature */
+					   present) after function signature.
+					   It applies only to the toplevel
+					   function type.  */
+#define DMGL_RET_DROP	 (1 << 6)       /* Suppress printing function return
+					   types, even if present.  It applies
+					   only to the toplevel function type.
+					   */
 
 #define DMGL_AUTO	 (1 << 8)
 #define DMGL_GNU	 (1 << 9)
--- a/libiberty/cp-demangle.c
+++ b/libiberty/cp-demangle.c
@@ -3917,10 +3917,11 @@ d_print_comp (struct d_print_info *dpi, const struct demangle_component *dc,
     case DEMANGLE_COMPONENT_FUNCTION_TYPE:
       {
 	if ((options & DMGL_RET_POSTFIX) != 0)
-	  d_print_function_type (dpi, dc, dpi->modifiers, options);
+	  d_print_function_type (dpi, dc, dpi->modifiers,
+				 options & ~(DMGL_RET_POSTFIX | DMGL_RET_DROP));
 
 	/* Print return type if present */
-	if (d_left (dc) != NULL)
+	if (d_left (dc) != NULL && (options & DMGL_RET_DROP) == 0)
 	  {
 	    struct d_print_mod dpm;
 
@@ -3932,7 +3933,8 @@ d_print_comp (struct d_print_info *dpi, const struct demangle_component *dc,
 	    dpm.printed = 0;
 	    dpm.templates = dpi->templates;
 
-	    d_print_comp (dpi, d_left (dc), options);
+	    d_print_comp (dpi, d_left (dc),
+			  options & ~(DMGL_RET_POSTFIX | DMGL_RET_DROP));
 
 	    dpi->modifiers = dpm.next;
 
@@ -3946,7 +3948,8 @@ d_print_comp (struct d_print_info *dpi, const struct demangle_component *dc,
 	  }
 
 	if ((options & DMGL_RET_POSTFIX) == 0)
-	  d_print_function_type (dpi, dc, dpi->modifiers, options);
+	  d_print_function_type (dpi, dc, dpi->modifiers,
+				 options & ~(DMGL_RET_POSTFIX | DMGL_RET_DROP));
 
 	return;
       }
--- a/libiberty/testsuite/demangle-expected
+++ b/libiberty/testsuite/demangle-expected
@@ -3959,6 +3959,24 @@ f(decltype(nullptr))
 --format=gnu-v3
 _ZN5aaaaa6bbbbbb5cccccIN23ddddddddddddddddddddddd3eeeENS2_4ffff16ggggggggggggggggENS0_9hhhhhhhhhES6_S6_S6_S6_S6_S6_S6_EE
 aaaaa::bbbbbb::ccccc<ddddddddddddddddddddddd::eee, ddddddddddddddddddddddd::ffff::gggggggggggggggg, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh>
+--format=gnu-v3
+_Z5outerIsEcPFilE
+char outer<short>(int (*)(long))
+--format=gnu-v3
+_Z5outerPFsiEl
+outer(short (*)(int), long)
+--format=gnu-v3
+_Z6outer2IsEPFilES1_
+int (*outer2<short>(int (*)(long)))(long)
+--format=gnu-v3 --ret-drop
+_Z5outerIsEcPFilE
+outer<short>(int (*)(long))
+--format=gnu-v3 --ret-drop
+_Z5outerPFsiEl
+outer(short (*)(int), long)
+--format=gnu-v3 --ret-drop
+_Z6outer2IsEPFilES1_
+outer2<short>(int (*)(long))
 #
 # Ada (GNAT) tests.
 #
--- a/libiberty/testsuite/test-demangle.c
+++ b/libiberty/testsuite/test-demangle.c
@@ -159,6 +159,7 @@ exp: %s\n",
                          output is an integer representing ctor_kind.
      --is-v3-dtor        Likewise, but for dtors.
      --ret-postfix       Passes the DMGL_RET_POSTFIX option
+     --ret-drop          Passes the DMGL_RET_DROP option
 
    For compatibility, just in case it matters, the options line may be
    empty, to mean --format=auto.  If it doesn't start with --, then it
@@ -174,7 +175,7 @@ main(argc, argv)
   int no_params;
   int is_v3_ctor;
   int is_v3_dtor;
-  int ret_postfix;
+  int ret_postfix, ret_drop;
   struct line format;
   struct line input;
   struct line expect;
@@ -209,6 +210,7 @@ main(argc, argv)
 
       no_params = 0;
       ret_postfix = 0;
+      ret_drop = 0;
       is_v3_ctor = 0;
       is_v3_dtor = 0;
       if (format.data[0] == '\0')
@@ -265,6 +267,8 @@ main(argc, argv)
 		is_v3_dtor = 1;
 	      else if (strcmp (opt, "--ret-postfix") == 0)
 		ret_postfix = 1;
+	      else if (strcmp (opt, "--ret-drop") == 0)
+		ret_drop = 1;
 	      else
 		{
 		  printf ("FAIL at line %d: unrecognized option %s\n",
@@ -307,9 +311,9 @@ main(argc, argv)
 
       cplus_demangle_set_style (style);
 
-      result = cplus_demangle (inp,
-			       DMGL_PARAMS|DMGL_ANSI|DMGL_TYPES
-			       |(ret_postfix ? DMGL_RET_POSTFIX : 0));
+      result = cplus_demangle (inp, (DMGL_PARAMS | DMGL_ANSI | DMGL_TYPES
+				     | (ret_postfix ? DMGL_RET_POSTFIX : 0)
+				     | (ret_drop ? DMGL_RET_DROP : 0)));
 
       if (result
 	  ? strcmp (result, expect.data)

             reply	other threads:[~2011-06-02 14:16 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-02 14:16 Jan Kratochvil [this message]
2011-06-13 18:19 ` Ian Lance Taylor
2011-06-14  0:00   ` Jan Kratochvil

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110602141622.GC15093@host1.jankratochvil.net \
    --to=jan.kratochvil@redhat.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).