d-demangle.c (dlang_attributes): Handle return attributes, ignoring return parameters...
authorIain Buclaw <ibuclaw@gdcproject.org>
Sat, 16 May 2015 16:49:57 +0000 (16:49 +0000)
committerIain Buclaw <ibuclaw@gcc.gnu.org>
Sat, 16 May 2015 16:49:57 +0000 (16:49 +0000)
libiberty/ChangeLog:

2015-05-16  Iain Buclaw  <ibuclaw@gdcproject.org>

* d-demangle.c (dlang_attributes): Handle return attributes, ignoring
return parameters in the mangled string.  Return NULL if have encountered
an unknown attribute.
(dlang_function_args): Handle return parameters in the mangled string.
* testsuite/d-demangle-expected: Add coverage tests for functions with
return parameters and return attributes.

From-SVN: r223244

libiberty/ChangeLog
libiberty/d-demangle.c
libiberty/testsuite/d-demangle-expected

index 37425c8df81ffcac80e1896df3df86d29204735e..609c5e85863c3164f38fc7a3c0649a537ab89f7d 100644 (file)
@@ -1,3 +1,12 @@
+2015-05-16  Iain Buclaw  <ibuclaw@gdcproject.org>
+
+       * d-demangle.c (dlang_attributes): Handle return attributes, ignoring
+       return parameters in the mangled string.  Return NULL if have encountered
+       an unknown attribute.
+       (dlang_function_args): Handle return parameters in the mangled string.
+       * testsuite/d-demangle-expected: Add coverage tests for functions with
+       return parameters and return attributes.
+
 2015-05-16  Iain Buclaw  <ibuclaw@gdcproject.org>
 
        * d-demangle.c (dlang_identifier): Check encoded length of identifier
index 011e62bc6620d2a4f662763bff15f59209a6250f..8104a345e1da7b019ce63bb2d911a31ae919c246 100644 (file)
@@ -292,8 +292,10 @@ dlang_attributes (string *decl, const char *mangled)
          continue;
        case 'g':
        case 'h':
+       case 'k':
          /* inout parameter is represented as 'Ng'.
             vector parameter is represented as 'Nh'.
+            return paramenter is represented as 'Nk'.
             If we see this, then we know we're really in the
             parameter list.  Rewind and break.  */
          mangled--;
@@ -302,6 +304,13 @@ dlang_attributes (string *decl, const char *mangled)
          mangled++;
          string_append (decl, "@nogc ");
          continue;
+       case 'j': /* return */
+         mangled++;
+         string_append (decl, "return ");
+         continue;
+
+       default: /* unknown attribute */
+         return NULL;
        }
       break;
     }
@@ -391,6 +400,12 @@ dlang_function_args (string *decl, const char *mangled)
          string_append (decl, "scope ");
        }
 
+      if (mangled[0] == 'N' && mangled[1] == 'k') /* return(T) */
+       {
+         mangled += 2;
+         string_append (decl, "return ");
+       }
+
       switch (*mangled)
        {
        case 'J': /* out(T) */
index b0b9ca0b49d6370accbe8ba756a215bb0dd9f6ea..5dd0678a01b14b6a4682111c9b973cd9535d176d 100644 (file)
@@ -314,6 +314,14 @@ _D8demangle4testFMaZv
 demangle.test(scope char)
 #
 --format=dlang
+_D8demangle4testFNjaZv
+demangle.test(char)
+#
+--format=dlang
+_D8demangle4testFNkaZv
+demangle.test(return char)
+#
+--format=dlang
 _D8demangle4testFaXv
 demangle.test(char...)
 #
@@ -434,6 +442,22 @@ _D8demangle4testFDFNdNfNaZaZv
 demangle.test(char() @property @safe pure delegate)
 #
 --format=dlang
+_D8demangle4testFNjDFZaZv
+demangle.test(char() delegate)
+#
+--format=dlang
+_D8demangle4testFNkDFZaZv
+demangle.test(return char() delegate)
+#
+--format=dlang
+_D8demangle4testFDFNjZaZv
+demangle.test(char() return delegate)
+#
+--format=dlang
+_D8demangle4testFNjNkDFNjZaZv
+demangle.test(return char() return delegate)
+#
+--format=dlang
 _D8demangle4testFFNaZaZv
 demangle.test(char() pure function)
 #
@@ -474,6 +498,22 @@ _D8demangle4testFFNdNfNaZaZv
 demangle.test(char() @property @safe pure function)
 #
 --format=dlang
+_D8demangle4testFNjFZaZv
+demangle.test(char() function)
+#
+--format=dlang
+_D8demangle4testFNkFZaZv
+demangle.test(return char() function)
+#
+--format=dlang
+_D8demangle4testFFNjZaZv
+demangle.test(char() return function)
+#
+--format=dlang
+_D8demangle4testFNjNkFNjZaZv
+demangle.test(return char() return function)
+#
+--format=dlang
 _D8demangle4test6__initZ
 demangle.test.init$
 #