File: symbol.h

package info (click to toggle)
cproto 4.7x-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,108 kB
  • sloc: ansic: 4,508; sh: 4,279; lex: 1,032; yacc: 924; makefile: 282
file content (39 lines) | stat: -rw-r--r-- 1,218 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/* $Id: symbol.h,v 4.6 2022/10/15 00:03:58 tom Exp $
 *
 * A symbol table is a collection of string identifiers stored in a
 * hash table.
 */
#ifndef SYMBOL_H
#define SYMBOL_H

#include <cproto.h>

typedef struct symbol {
    struct symbol *next;	/* next symbol in list */
    char *name; 		/* name of symbol */
    char *value;		/* value of symbol (for defines) */
    short flags;		/* symbol attributes */
} Symbol;

/* The hash table length should be a prime number. */
#define SYM_MAX_HASH 251

typedef struct symbol_table {
    Symbol *bucket[SYM_MAX_HASH];	/* hash buckets */
} SymbolTable;

extern SymbolTable *function_names;	/* table of function names */
extern SymbolTable *typedef_names;	/* table of typedef names */
extern SymbolTable *define_names;	/* table of define names */
extern SymbolTable *type_qualifiers;	/* table of type qualifiers */

extern SymbolTable *new_symbol_table	/* Create symbol table */
	(void);
extern SymbolTable *free_symbol_table	/* Destroy symbol table */
	(SymbolTable *s);
extern Symbol *find_symbol		/* Lookup symbol name */
	(SymbolTable *s, const char *n);
extern Symbol *new_symbol		/* Define new symbol */
	(SymbolTable *s, const char *n, const char *v, int f);

#endif