Commit 7ce4461f by Iain Buclaw Committed by Iain Buclaw

d-demangle.c (dlang_attributes): Handle return attributes, ignoring return…

d-demangle.c (dlang_attributes): Handle return attributes, ignoring return parameters in the mangled string.

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
parent 5cc158e9
2015-05-16 Iain Buclaw <ibuclaw@gdcproject.org> 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 * d-demangle.c (dlang_identifier): Check encoded length of identifier
to verify strncmp matches entire string. to verify strncmp matches entire string.
* testsuite/d-demangle-expected: Fix wrong test for postblit symbol. * testsuite/d-demangle-expected: Fix wrong test for postblit symbol.
......
...@@ -292,8 +292,10 @@ dlang_attributes (string *decl, const char *mangled) ...@@ -292,8 +292,10 @@ dlang_attributes (string *decl, const char *mangled)
continue; continue;
case 'g': case 'g':
case 'h': case 'h':
case 'k':
/* inout parameter is represented as 'Ng'. /* inout parameter is represented as 'Ng'.
vector parameter is represented as 'Nh'. vector parameter is represented as 'Nh'.
return paramenter is represented as 'Nk'.
If we see this, then we know we're really in the If we see this, then we know we're really in the
parameter list. Rewind and break. */ parameter list. Rewind and break. */
mangled--; mangled--;
...@@ -302,6 +304,13 @@ dlang_attributes (string *decl, const char *mangled) ...@@ -302,6 +304,13 @@ dlang_attributes (string *decl, const char *mangled)
mangled++; mangled++;
string_append (decl, "@nogc "); string_append (decl, "@nogc ");
continue; continue;
case 'j': /* return */
mangled++;
string_append (decl, "return ");
continue;
default: /* unknown attribute */
return NULL;
} }
break; break;
} }
...@@ -391,6 +400,12 @@ dlang_function_args (string *decl, const char *mangled) ...@@ -391,6 +400,12 @@ dlang_function_args (string *decl, const char *mangled)
string_append (decl, "scope "); string_append (decl, "scope ");
} }
if (mangled[0] == 'N' && mangled[1] == 'k') /* return(T) */
{
mangled += 2;
string_append (decl, "return ");
}
switch (*mangled) switch (*mangled)
{ {
case 'J': /* out(T) */ case 'J': /* out(T) */
......
...@@ -314,6 +314,14 @@ _D8demangle4testFMaZv ...@@ -314,6 +314,14 @@ _D8demangle4testFMaZv
demangle.test(scope char) demangle.test(scope char)
# #
--format=dlang --format=dlang
_D8demangle4testFNjaZv
demangle.test(char)
#
--format=dlang
_D8demangle4testFNkaZv
demangle.test(return char)
#
--format=dlang
_D8demangle4testFaXv _D8demangle4testFaXv
demangle.test(char...) demangle.test(char...)
# #
...@@ -434,6 +442,22 @@ _D8demangle4testFDFNdNfNaZaZv ...@@ -434,6 +442,22 @@ _D8demangle4testFDFNdNfNaZaZv
demangle.test(char() @property @safe pure delegate) demangle.test(char() @property @safe pure delegate)
# #
--format=dlang --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 _D8demangle4testFFNaZaZv
demangle.test(char() pure function) demangle.test(char() pure function)
# #
...@@ -474,6 +498,22 @@ _D8demangle4testFFNdNfNaZaZv ...@@ -474,6 +498,22 @@ _D8demangle4testFFNdNfNaZaZv
demangle.test(char() @property @safe pure function) demangle.test(char() @property @safe pure function)
# #
--format=dlang --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 _D8demangle4test6__initZ
demangle.test.init$ demangle.test.init$
# #
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment