2 * This file is part of cparser.
3 * Copyright (C) 2012 Matthias Braun <matze@braunis.de>
7 #include "adt/strutil.h"
8 #include "symbol_table_t.h"
11 #include "adt/hash_string.h"
14 struct obstack symbol_obstack;
17 void init_symbol_table_entry(symbol_t *entry, const char *string)
19 entry->string = string;
20 entry->ID = T_IDENTIFIER;
21 entry->pp_ID = TP_NULL;
23 entry->pp_definition = NULL;
26 #define HashSet symbol_table_t
27 #define HashSetEntry symbol_table_hash_entry_t
28 #define ValueType symbol_t*
29 #define NullValue NULL
30 #define DeletedValue ((symbol_t*)-1)
31 #define KeyType const char *
32 #define ConstKeyType const char *
33 #define GetKey(value) (value)->string
34 #define InitData(this,value,key) ((void)((value) = (ValueType)obstack_alloc(&symbol_obstack, sizeof(symbol_t)), init_symbol_table_entry((value), key)))
35 #define Hash(this, key) hash_string(key)
36 #define KeysEqual(this,key1,key2) (streq(key1, key2))
37 #define SetRangeEmpty(ptr,size) memset(ptr, 0, (size) * sizeof(symbol_table_hash_entry_t))
40 void _symbol_table_init(symbol_table_t *symbol_table);
41 #define hashset_init _symbol_table_init
42 void _symbol_table_destroy(symbol_table_t *symbol_table);
43 #define hashset_destroy _symbol_table_destroy
44 symbol_t *_symbol_table_insert(symbol_table_t *symbol_table, const char *key);
45 #define hashset_insert _symbol_table_insert
47 #include "adt/hashset.c.inl"
49 static symbol_table_t symbol_table;
51 symbol_t *sym_anonymous;
53 symbol_t *symbol_table_insert(const char *string)
55 return _symbol_table_insert(&symbol_table, string);
58 void init_symbol_table(void)
60 obstack_init(&symbol_obstack);
61 _symbol_table_init(&symbol_table);
62 sym_anonymous = symbol_table_insert("<anonymous>");
65 void exit_symbol_table(void)
67 _symbol_table_destroy(&symbol_table);
68 obstack_free(&symbol_obstack, NULL);