Commit ab9b814d by Joseph Myers Committed by Joseph Myers

pretty-print.c: Don't include ggc.h.

	* pretty-print.c: Don't include ggc.h.
	(identifier_to_locale_alloc, identifier_to_locale_free): Define.
	(identifier_to_locale): Use them for allocation.
	* pretty-print.h (identifier_to_locale_alloc,
	identifier_to_locale_free): Declare.
	* toplev.c (alloc_for_identifier_to_locale): New.
	(general_init): Set identifier_to_locale_alloc and
	identifier_to_locale_free.
	* Makefile.in (pretty-print.o): Update dependencies.

From-SVN: r159898
parent bdd71523
2010-05-26 Joseph Myers <joseph@codesourcery.com>
* pretty-print.c: Don't include ggc.h.
(identifier_to_locale_alloc, identifier_to_locale_free): Define.
(identifier_to_locale): Use them for allocation.
* pretty-print.h (identifier_to_locale_alloc,
identifier_to_locale_free): Declare.
* toplev.c (alloc_for_identifier_to_locale): New.
(general_init): Set identifier_to_locale_alloc and
identifier_to_locale_free.
* Makefile.in (pretty-print.o): Update dependencies.
2010-05-26 Eric Botcazou <ebotcazou@adacore.com> 2010-05-26 Eric Botcazou <ebotcazou@adacore.com>
* gimple.c (gimple_types_compatible_p): Return 0 for aggregate and * gimple.c (gimple_types_compatible_p): Return 0 for aggregate and
......
...@@ -3398,8 +3398,7 @@ params.o : params.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(PARAMS_H) \ ...@@ -3398,8 +3398,7 @@ params.o : params.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(PARAMS_H) \
$(TOPLEV_H) $(TOPLEV_H)
pointer-set.o: pointer-set.c pointer-set.h $(CONFIG_H) $(SYSTEM_H) pointer-set.o: pointer-set.c pointer-set.h $(CONFIG_H) $(SYSTEM_H)
hooks.o: hooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(HOOKS_H) hooks.o: hooks.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TM_H) $(HOOKS_H)
pretty-print.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h intl.h $(PRETTY_PRINT_H) \ pretty-print.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h intl.h $(PRETTY_PRINT_H)
$(GGC_H)
errors.o : errors.c $(CONFIG_H) $(SYSTEM_H) errors.h $(BCONFIG_H) errors.o : errors.c $(CONFIG_H) $(SYSTEM_H) errors.h $(BCONFIG_H)
dbgcnt.o: dbgcnt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TOPLEV_H) $(DBGCNT_H) \ dbgcnt.o: dbgcnt.c $(CONFIG_H) $(SYSTEM_H) coretypes.h $(TOPLEV_H) $(DBGCNT_H) \
$(TM_H) $(RTL_H) output.h $(TM_H) $(RTL_H) output.h
......
...@@ -24,7 +24,6 @@ along with GCC; see the file COPYING3. If not see ...@@ -24,7 +24,6 @@ along with GCC; see the file COPYING3. If not see
#include "coretypes.h" #include "coretypes.h"
#include "intl.h" #include "intl.h"
#include "pretty-print.h" #include "pretty-print.h"
#include "ggc.h"
#if HAVE_ICONV #if HAVE_ICONV
#include <iconv.h> #include <iconv.h>
...@@ -857,14 +856,21 @@ decode_utf8_char (const unsigned char *p, size_t len, unsigned int *value) ...@@ -857,14 +856,21 @@ decode_utf8_char (const unsigned char *p, size_t len, unsigned int *value)
} }
} }
/* Allocator for identifier_to_locale and corresponding function to
free memory. */
void *(*identifier_to_locale_alloc) (size_t) = xmalloc;
void (*identifier_to_locale_free) (void *) = free;
/* Given IDENT, an identifier in the internal encoding, return a /* Given IDENT, an identifier in the internal encoding, return a
version of IDENT suitable for diagnostics in the locale character version of IDENT suitable for diagnostics in the locale character
set: either IDENT itself, or a garbage-collected string converted set: either IDENT itself, or a string, allocated using
to the locale character set and using escape sequences if not identifier_to_locale_alloc, converted to the locale character set
representable in the locale character set or containing control and using escape sequences if not representable in the locale
characters or invalid byte sequences. Existing backslashes in character set or containing control characters or invalid byte
IDENT are not doubled, so the result may not uniquely specify the sequences. Existing backslashes in IDENT are not doubled, so the
contents of an arbitrary byte sequence identifier. */ result may not uniquely specify the contents of an arbitrary byte
sequence identifier. */
const char * const char *
identifier_to_locale (const char *ident) identifier_to_locale (const char *ident)
...@@ -895,7 +901,7 @@ identifier_to_locale (const char *ident) ...@@ -895,7 +901,7 @@ identifier_to_locale (const char *ident)
outside printable ASCII. */ outside printable ASCII. */
if (!valid_printable_utf8) if (!valid_printable_utf8)
{ {
char *ret = GGC_NEWVEC (char, 4 * idlen + 1); char *ret = (char *) identifier_to_locale_alloc (4 * idlen + 1);
char *p = ret; char *p = ret;
for (i = 0; i < idlen; i++) for (i = 0; i < idlen; i++)
{ {
...@@ -938,7 +944,7 @@ identifier_to_locale (const char *ident) ...@@ -938,7 +944,7 @@ identifier_to_locale (const char *ident)
size_t outbytesleft = ret_alloc - 1; size_t outbytesleft = ret_alloc - 1;
size_t iconv_ret; size_t iconv_ret;
ret = GGC_NEWVEC (char, ret_alloc); ret = (char *) identifier_to_locale_alloc (ret_alloc);
outbuf = ret; outbuf = ret;
if (iconv (cd, 0, 0, 0, 0) == (size_t) -1) if (iconv (cd, 0, 0, 0, 0) == (size_t) -1)
...@@ -954,7 +960,7 @@ identifier_to_locale (const char *ident) ...@@ -954,7 +960,7 @@ identifier_to_locale (const char *ident)
if (errno == E2BIG) if (errno == E2BIG)
{ {
ret_alloc *= 2; ret_alloc *= 2;
ggc_free (ret); identifier_to_locale_free (ret);
ret = NULL; ret = NULL;
continue; continue;
} }
...@@ -975,7 +981,7 @@ identifier_to_locale (const char *ident) ...@@ -975,7 +981,7 @@ identifier_to_locale (const char *ident)
if (errno == E2BIG) if (errno == E2BIG)
{ {
ret_alloc *= 2; ret_alloc *= 2;
ggc_free (ret); identifier_to_locale_free (ret);
ret = NULL; ret = NULL;
continue; continue;
} }
...@@ -997,7 +1003,7 @@ identifier_to_locale (const char *ident) ...@@ -997,7 +1003,7 @@ identifier_to_locale (const char *ident)
/* Otherwise, convert non-ASCII characters in IDENT to UCNs. */ /* Otherwise, convert non-ASCII characters in IDENT to UCNs. */
{ {
char *ret = GGC_NEWVEC (char, 10 * idlen + 1); char *ret = (char *) identifier_to_locale_alloc (10 * idlen + 1);
char *p = ret; char *p = ret;
for (i = 0; i < idlen;) for (i = 0; i < idlen;)
{ {
......
...@@ -339,5 +339,7 @@ pp_set_verbatim_wrapping_ (pretty_printer *pp) ...@@ -339,5 +339,7 @@ pp_set_verbatim_wrapping_ (pretty_printer *pp)
#define pp_set_verbatim_wrapping(PP) pp_set_verbatim_wrapping_ (pp_base (PP)) #define pp_set_verbatim_wrapping(PP) pp_set_verbatim_wrapping_ (pp_base (PP))
extern const char *identifier_to_locale (const char *); extern const char *identifier_to_locale (const char *);
extern void *(*identifier_to_locale_alloc) (size_t);
extern void (*identifier_to_locale_free) (void *);
#endif /* GCC_PRETTY_PRINT_H */ #endif /* GCC_PRETTY_PRINT_H */
...@@ -1668,6 +1668,14 @@ realloc_for_line_map (void *ptr, size_t len) ...@@ -1668,6 +1668,14 @@ realloc_for_line_map (void *ptr, size_t len)
return ggc_realloc (ptr, len); return ggc_realloc (ptr, len);
} }
/* A helper function: used as the allocator function for
identifier_to_locale. */
static void *
alloc_for_identifier_to_locale (size_t len)
{
return ggc_alloc (len);
}
/* Initialization of the front end environment, before command line /* Initialization of the front end environment, before command line
options are parsed. Signal handlers, internationalization etc. options are parsed. Signal handlers, internationalization etc.
ARGV0 is main's argv[0]. */ ARGV0 is main's argv[0]. */
...@@ -1690,6 +1698,9 @@ general_init (const char *argv0) ...@@ -1690,6 +1698,9 @@ general_init (const char *argv0)
gcc_init_libintl (); gcc_init_libintl ();
identifier_to_locale_alloc = alloc_for_identifier_to_locale;
identifier_to_locale_free = ggc_free;
/* Initialize the diagnostics reporting machinery, so option parsing /* Initialize the diagnostics reporting machinery, so option parsing
can give warnings and errors. */ can give warnings and errors. */
diagnostic_initialize (global_dc, N_OPTS); diagnostic_initialize (global_dc, N_OPTS);
......
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