/* String pool for GCC.
- Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008
+ Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
This file is part of GCC.
#include "coretypes.h"
#include "tm.h"
#include "ggc.h"
+#include "ggc-internal.h"
#include "tree.h"
#include "symtab.h"
#include "cpplib.h"
/* Character strings, each containing a single decimal digit.
Written this way to save space. */
-const char digit_vector[] = {
+static const char digit_vector[] = {
'0', 0, '1', 0, '2', 0, '3', 0, '4', 0,
'5', 0, '6', 0, '7', 0, '8', 0, '9', 0
};
+#define digit_string(d) (digit_vector + ((d) * 2))
+
struct ht *ident_hash;
static hashnode alloc_node (hash_table *);
static void *
stringpool_ggc_alloc (size_t x)
{
- return ggc_alloc (x);
+ return ggc_alloc_atomic (x);
}
/* Initialize the string pool. */
nul-terminated string, and the length is calculated using strlen. */
const char *
-ggc_alloc_string (const char *contents, int length)
+ggc_alloc_string_stat (const char *contents, int length MEM_STAT_DECL)
{
char *result;
if (length == 1 && ISDIGIT (contents[0]))
return digit_string (contents[0] - '0');
- result = GGC_NEWVAR (char, length + 1);
+ result = (char *) ggc_alloc_atomic_stat (length + 1 PASS_MEM_STAT);
memcpy (result, contents, length);
result[length] = '\0';
return (const char *) result;
to restore the string pool. */
struct GTY(()) string_pool_data {
- struct ht_identifier * *
+ ht_identifier_ptr *
GTY((length ("%h.nslots"),
nested_ptr (union tree_node, "%h ? GCC_IDENT_TO_HT_IDENT (%h) : NULL",
"%h ? HT_IDENT_TO_GCC_IDENT (%h) : NULL")))
void
gt_pch_save_stringpool (void)
{
- spd = GGC_NEW (struct string_pool_data);
+ spd = ggc_alloc_string_pool_data ();
spd->nslots = ident_hash->nslots;
spd->nelements = ident_hash->nelements;
- spd->entries = GGC_NEWVEC (struct ht_identifier *, spd->nslots);
+ spd->entries = ggc_alloc_vec_ht_identifier_ptr (spd->nslots);
memcpy (spd->entries, ident_hash->entries,
spd->nslots * sizeof (spd->entries[0]));
}