52 lines
1.1 KiB
C
52 lines
1.1 KiB
C
#ifndef IR_H
|
|
#define IR_H
|
|
|
|
/* This is the tree node structure */
|
|
typedef struct n {
|
|
node_index_t type;
|
|
void *data;
|
|
struct s *entry;
|
|
uint64_t n_children;
|
|
struct n **children;
|
|
} node_t;
|
|
|
|
/**Export the initializer function, it is needed by the parser
|
|
* @param *nd node to initialize
|
|
* @param type type of node (see nodetype.h)
|
|
* @param *data associated data. Declared void to allow any type
|
|
* @param n_children number of children
|
|
* @param ... variable argument list of child nodes (node_t *)
|
|
*
|
|
* @return Pointer to the initialized node
|
|
* */
|
|
node_t* node_init (
|
|
node_t* nd,
|
|
node_index_t type,
|
|
void* data,
|
|
uint64_t n_children,
|
|
...
|
|
);
|
|
|
|
typedef enum {
|
|
SYM_GLOBAL_VAR,
|
|
SYM_FUNCTION,
|
|
SYM_PARAMETER,
|
|
SYM_LOCAL_VAR
|
|
} symtype_t;
|
|
|
|
typedef struct s {
|
|
char* name;
|
|
symtype_t type;
|
|
node_t* node;
|
|
size_t seq;
|
|
size_t nparms;
|
|
tlhash_t* locals;
|
|
} symbol_t;
|
|
#endif
|
|
|
|
#define GLOBAL_BUCKET_SIZE 32
|
|
#define LOCAL_BUCKET_SIZE 16
|
|
|
|
#define DEFAULT_STRING_LIST_SIZE 8
|
|
#define DEFAULT_NO_SCOPES 1
|