libiberty: Add support for in' and in ref' storage classes.

The storage class `in' is now a first-class citizen with its own mangle
symbol, of which also permits `in ref'.  Previously, `in' was an alias
to `const [scope]', which is a type constructor.

The mangle symbol repurposed for this is `I', which was originally used
by identifier types.  However, while TypeIdentifier is part of the
grammar, it must be resolved to some other entity during the semantic
passes, and so shouldn't appear anywhere in the mangled name.

Old tests that are now no longer valid have been removed.

libiberty/ChangeLog:

	* d-demangle.c (dlang_function_args): Handle 'in' and 'in ref'
	parameter storage classes.
	(dlang_type): Remove identifier type.
	* testsuite/d-demangle-expected: Update tests.
This commit is contained in:
Iain Buclaw 2020-08-04 18:11:51 +02:00
parent f0a0a84cd9
commit 387d0773f3
2 changed files with 17 additions and 9 deletions

View File

@ -699,6 +699,15 @@ dlang_function_args (string *decl, const char *mangled, struct dlang_info *info)
switch (*mangled)
{
case 'I': /* in(T) */
mangled++;
string_append (decl, "in ");
if (*mangled == 'K') /* in ref(T) */
{
mangled++;
string_append (decl, "ref ");
}
break;
case 'J': /* out(T) */
mangled++;
string_append (decl, "out ");
@ -826,7 +835,6 @@ dlang_type (string *decl, const char *mangled, struct dlang_info *info)
mangled = dlang_function_type (decl, mangled, info);
string_append (decl, "function");
return mangled;
case 'I': /* ident T */
case 'C': /* class T */
case 'S': /* struct T */
case 'E': /* enum T */

View File

@ -274,14 +274,6 @@ _D8demangle4testFNhG4dZv
demangle.test(__vector(double[4]))
#
--format=dlang
_D8demangle4testFI5identZv
demangle.test(ident)
#
--format=dlang
_D8demangle4testFI5ident4testZv
demangle.test(ident.test)
#
--format=dlang
_D8demangle4testFC5classZv
demangle.test(class)
#
@ -314,6 +306,14 @@ _D8demangle4testFT7typedef4testZv
demangle.test(typedef.test)
#
--format=dlang
_D8demangle4testFIaZv
demangle.test(in char)
#
--format=dlang
_D8demangle4testFIKaZv
demangle.test(in ref char)
#
--format=dlang
_D8demangle4testFJaZv
demangle.test(out char)
#