Re: [gcc patch 2/3] cp-demangle.c: New DMGL_RET_DROP

2011-06-13 Thread Jan Kratochvil
On Mon, 13 Jun 2011 20:08:40 +0200, Ian Lance Taylor wrote:
> On Thu, Jun 2, 2011 at 7:16 AM, Jan Kratochvil
>  wrote:
> >
> > include/
> > 2011-05-24  Jan Kratochvil  
> >
> >        * demangle.h (DMGL_RET_POSTFIX): Extend the comment.
> >        (DMGL_RET_DROP): New.
> >
> > libiberty/
> > 2011-05-24  Jan Kratochvil  
> >
> >        * cp-demangle.c (d_print_comp) : 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.
> 
> This is OK.

Checked in:
http://gcc.gnu.org/viewcvs?view=revision&revision=175000


Thanks,
Jan


Re: [gcc patch 2/3] cp-demangle.c: New DMGL_RET_DROP

2011-06-13 Thread Ian Lance Taylor
On Thu, Jun 2, 2011 at 7:16 AM, Jan Kratochvil
 wrote:
>
> include/
> 2011-05-24  Jan Kratochvil  
>
>        * demangle.h (DMGL_RET_POSTFIX): Extend the comment.
>        (DMGL_RET_DROP): New.
>
> libiberty/
> 2011-05-24  Jan Kratochvil  
>
>        * cp-demangle.c (d_print_comp) : 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.

This is OK.

Thanks.

Ian


[gcc patch 2/3] cp-demangle.c: New DMGL_RET_DROP

2011-06-02 Thread Jan Kratochvil
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  

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

libiberty/
2011-05-24  Jan Kratochvil  

* cp-demangle.c (d_print_comp) : 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
 
_ZN5a6bb5cIN23ddd3eeeENS2_416ENS0_9hES6_S6_S6_S6_S6_S6_S6_EE
 a::bb::c
+--format=gnu-v3
+_Z5outerIsEcPFilE
+char outer(int (*)(long))
+--format=gnu-v3
+_Z5outerPFsiEl
+outer(short (*)(int), long)
+--format=gnu-v3
+_Z6outer2IsEPFilES1_
+int (*outer2(int (*)(long)))(long)
+--format=gnu-v3 --ret-drop
+_Z5outerIsEcPFilE
+outer(int (*)(long))
+--format=gnu-v3 --ret-drop
+_Z5outerPFsiEl
+outer(short (*)(int), long)
+--format=gnu-v3 --ret-drop
+_Z6outer2IsEPFilES1_
+outer2(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-dtorLikewise, 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 (