+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>
* gimple.c (gimple_types_compatible_p): Return 0 for aggregate and
$(TOPLEV_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)
-pretty-print.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h intl.h $(PRETTY_PRINT_H) \
- $(GGC_H)
+pretty-print.o: $(CONFIG_H) $(SYSTEM_H) coretypes.h intl.h $(PRETTY_PRINT_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) \
$(TM_H) $(RTL_H) output.h
#include "coretypes.h"
#include "intl.h"
#include "pretty-print.h"
-#include "ggc.h"
#if HAVE_ICONV
#include <iconv.h>
}
}
+/* 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
version of IDENT suitable for diagnostics in the locale character
- set: either IDENT itself, or a garbage-collected string converted
- to the locale character set and using escape sequences if not
- representable in the locale character set or containing control
- characters or invalid byte sequences. Existing backslashes in
- IDENT are not doubled, so the result may not uniquely specify the
- contents of an arbitrary byte sequence identifier. */
+ set: either IDENT itself, or a string, allocated using
+ identifier_to_locale_alloc, converted to the locale character set
+ and using escape sequences if not representable in the locale
+ character set or containing control characters or invalid byte
+ sequences. Existing backslashes in IDENT are not doubled, so the
+ result may not uniquely specify the contents of an arbitrary byte
+ sequence identifier. */
const char *
identifier_to_locale (const char *ident)
outside printable ASCII. */
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;
for (i = 0; i < idlen; i++)
{
size_t outbytesleft = ret_alloc - 1;
size_t iconv_ret;
- ret = GGC_NEWVEC (char, ret_alloc);
+ ret = (char *) identifier_to_locale_alloc (ret_alloc);
outbuf = ret;
if (iconv (cd, 0, 0, 0, 0) == (size_t) -1)
if (errno == E2BIG)
{
ret_alloc *= 2;
- ggc_free (ret);
+ identifier_to_locale_free (ret);
ret = NULL;
continue;
}
if (errno == E2BIG)
{
ret_alloc *= 2;
- ggc_free (ret);
+ identifier_to_locale_free (ret);
ret = NULL;
continue;
}
/* 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;
for (i = 0; i < idlen;)
{
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
options are parsed. Signal handlers, internationalization etc.
ARGV0 is main's argv[0]. */
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
can give warnings and errors. */
diagnostic_initialize (global_dc, N_OPTS);