| #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
|