blob: a2f388ca78d5de0856e879675ee3459ebc529cdc [file] [log] [blame] [edit]
#ifndef verilog_preprocessor_h
#define verilog_preprocessor_h
#define DefaultSize 20
#define MaxLine 4096
//#define BLOCK_EMPTY_DEFINES
/* Structs */
typedef struct veri_include
{
char *path;
struct veri_include *included_from;
int line;
} veri_include;
typedef struct veri_define
{
char *symbol;
char *value;
int line;
veri_include *defined_in;
} veri_define;
struct veri_Includes
{
veri_include **included_files;
int current_size;
int current_index;
} ;
struct veri_Defines
{
veri_define **defined_constants;
int current_size;
int current_index;
} ;
/* Globals */
extern struct veri_Includes veri_includes;
extern struct veri_Defines veri_defines;
/* Initalization and Cleanup */
int init_veri_preproc();
int cleanup_veri_preproc();
void clean_veri_define(veri_define *current);
void clean_veri_include(veri_include *current);
/* Adding/Removing includes or defines */
int add_veri_define(char *symbol, char *value, int line, veri_include *included_from);
char* ret_veri_definedval(char *symbol);
int veri_is_defined(char * symbol);
veri_include* add_veri_include(char *path, int line, veri_include *included_from);
/* Preprocessor ------------------------------------------------------------- */
FILE* veri_preproc(FILE *source);
void veri_preproc_bootstraped(FILE *source, FILE *preproc_producer, veri_include *current_include);
/* ------------------------------------------------------------------------- */
/* Stack for tracking conditional branches --------------------------------- */
typedef struct veri_flag_node
{
int flag;
struct veri_flag_node *next;
} veri_flag_node;
typedef struct
{
veri_flag_node *top;
} veri_flag_stack;
/* stack methods */
int top(veri_flag_stack *stack);
int pop(veri_flag_stack *stack);
void push(veri_flag_stack *stack, int flag);
/* ------------------------------------------------------------------------- */
/* General Utility methods ------------------------------------------------- */
char* trim(char *string);
/* ------------------------------------------------------------------------- */
#endif