00001 #ifndef verilog_preprocessor_h 00002 #define verilog_preprocessor_h 00003 00004 #define DefaultSize 20 00005 #define MaxLine 4096 00006 00007 //#define BLOCK_EMPTY_DEFINES 00008 00009 /* Structs */ 00010 typedef struct veri_include 00011 { 00012 char *path; 00013 struct veri_include *included_from; 00014 int line; 00015 } veri_include; 00016 00017 typedef struct veri_define 00018 { 00019 char *symbol; 00020 char *value; 00021 int line; 00022 veri_include *defined_in; 00023 } veri_define; 00024 00025 struct veri_Includes 00026 { 00027 veri_include **included_files; 00028 int current_size; 00029 int current_index; 00030 } ; 00031 00032 struct veri_Defines 00033 { 00034 veri_define **defined_constants; 00035 int current_size; 00036 int current_index; 00037 } ; 00038 00039 /* Globals */ 00040 extern struct veri_Includes veri_includes; 00041 extern struct veri_Defines veri_defines; 00042 00043 /* Initalization and Cleanup */ 00044 int init_veri_preproc(); 00045 int cleanup_veri_preproc(); 00046 void clean_veri_define(veri_define *current); 00047 void clean_veri_include(veri_include *current); 00048 00049 /* Adding/Removing includes or defines */ 00050 int add_veri_define(char *symbol, char *value, int line, veri_include *included_from); 00051 char* ret_veri_definedval(char *symbol); 00052 int veri_is_defined(char * symbol); 00053 veri_include* add_veri_include(char *path, int line, veri_include *included_from); 00054 00055 /* Preprocessor ------------------------------------------------------------- */ 00056 FILE* veri_preproc(FILE *source); 00057 void veri_preproc_bootstraped(FILE *source, FILE *preproc_producer, veri_include *current_include); 00058 00059 /* ------------------------------------------------------------------------- */ 00060 00061 00062 /* Stack for tracking conditional branches --------------------------------- */ 00063 typedef struct veri_flag_node 00064 { 00065 int flag; 00066 struct veri_flag_node *next; 00067 } veri_flag_node; 00068 00069 typedef struct 00070 { 00071 veri_flag_node *top; 00072 } veri_flag_stack; 00073 00074 /* stack methods */ 00075 int top(veri_flag_stack *stack); 00076 int pop(veri_flag_stack *stack); 00077 void push(veri_flag_stack *stack, int flag); 00078 00079 /* ------------------------------------------------------------------------- */ 00080 00081 00082 /* General Utility methods ------------------------------------------------- */ 00083 char* trim(char *string); 00084 00085 /* ------------------------------------------------------------------------- */ 00086 00087 00088 #endif