1 // -*- C++ -*- 2 3 #ifndef FREEHDL_FIRE_TYPES_H 4 #define FREEHDL_FIRE_TYPES_H 5 6 #include <iostream> 7 8 #include <freehdl/tree-supp.h> 9 10 typedef unsigned char IR_Character; 11 12 typedef tree_kind IR_Kind; 13 14 const IR_Kind IR_INVALID = NULL; 15 16 enum IR_SignalKind { 17 IR_NO_SIGNAL_KIND, 18 IR_REGISTER_KIND, 19 IR_BUS_KIND 20 }; 21 22 enum IR_Mode { 23 IR_UNKNOWN_MODE, 24 IR_IN_MODE, 25 IR_OUT_MODE, 26 IR_INOUT_MODE, 27 IR_BUFFER_MODE, 28 IR_LINKAGE_MODE 29 }; 30 31 enum IR_Pure { 32 IR_UNKNOWN_PURE, 33 IR_PURE_FUNCTION, 34 IR_IMPURE_FUNCTION, 35 IR_PURE_PROCEDURAL, 36 IR_IMPURE_PROCEDURAL 37 }; 38 39 enum IR_Direction { 40 IR_UNKNOWN_DIRECTION, 41 IR_DIRECTION_UP, 42 IR_DIRECTION_DOWN 43 }; 44 45 enum IR_DelayMechanism { 46 IR_UNKNOWN_DELAY, 47 IR_INERTIAL_DELAY, 48 IR_TRANSPORT_DELAY 49 }; 50 51 enum IR_StaticLevel { 52 IR_NOT_STATIC, 53 IR_GLOBALLY_STATIC, 54 IR_LOCALLY_STATIC 55 }; 56 57 struct IIR_Root; 58 typedef IIR_Root IIR; 59 typedef IIR *pIIR; 60 61 // XXX - better use some ready made string class from STL here. Eric? 62 63 struct IR_String { 64 IR_String (const IR_Character *chars, int len); 65 IR_String (const char *chars); 66 IR_String (const IR_String &str); 67 ~IR_String (); 68 69 IR_String &operator= (const IR_String &str); 70 lenIR_String71 int len () 72 { 73 return rep->len; 74 } 75 76 IR_Character operator[] (int i) 77 { 78 return rep->chars[i]; 79 } 80 81 char *to_chars (); to_chars_no_checkIR_String82 char *to_chars_no_check () 83 { 84 return (char *)rep->chars; 85 } 86 87 private: 88 struct strrep { 89 int len; 90 unsigned int ref_count; 91 IR_Character chars[1]; 92 }; 93 strrep *rep; 94 }; 95 96 std::ostream& operator<< (std::ostream &o, IR_String &str); 97 98 // printers for tree_print 99 100 void fire_print_int (void *mem); 101 void fire_print_bool (void *mem); 102 void fire_print_string (void *mem); 103 void fire_print_IR_String (void *mem); 104 105 #endif 106