diff options
Diffstat (limited to 'gcc/cp/tree.c')
-rw-r--r-- | gcc/cp/tree.c | 24 |
1 files changed, 19 insertions, 5 deletions
diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index c95c11c..9cc767d 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -1238,11 +1238,12 @@ build_overload (tree decl, tree chain) #define PRINT_RING_SIZE 4 -const char * -cxx_printable_name (tree decl, int v) +static const char * +cxx_printable_name_internal (tree decl, int v, bool translate) { static unsigned int uid_ring[PRINT_RING_SIZE]; static char *print_ring[PRINT_RING_SIZE]; + static bool trans_ring[PRINT_RING_SIZE]; static int ring_counter; int i; @@ -1250,11 +1251,11 @@ cxx_printable_name (tree decl, int v) if (v < 2 || TREE_CODE (decl) != FUNCTION_DECL || DECL_LANG_SPECIFIC (decl) == 0) - return lang_decl_name (decl, v); + return lang_decl_name (decl, v, translate); /* See if this print name is lying around. */ for (i = 0; i < PRINT_RING_SIZE; i++) - if (uid_ring[i] == DECL_UID (decl)) + if (uid_ring[i] == DECL_UID (decl) && translate == trans_ring[i]) /* yes, so return it. */ return print_ring[i]; @@ -1273,10 +1274,23 @@ cxx_printable_name (tree decl, int v) if (print_ring[ring_counter]) free (print_ring[ring_counter]); - print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v)); + print_ring[ring_counter] = xstrdup (lang_decl_name (decl, v, translate)); uid_ring[ring_counter] = DECL_UID (decl); + trans_ring[ring_counter] = translate; return print_ring[ring_counter]; } + +const char * +cxx_printable_name (tree decl, int v) +{ + return cxx_printable_name_internal (decl, v, false); +} + +const char * +cxx_printable_name_translate (tree decl, int v) +{ + return cxx_printable_name_internal (decl, v, true); +} /* Build the FUNCTION_TYPE or METHOD_TYPE which may throw exceptions listed in RAISES. */ |