25 #ifndef _HELPER_FUNCTIONS_HH_ |
25 #ifndef _HELPER_FUNCTIONS_HH_ |
26 #define _HELPER_FUNCTIONS_HH_ |
26 #define _HELPER_FUNCTIONS_HH_ |
27 |
27 |
28 #include "../absyntax/visitor.hh" |
28 #include "../absyntax/visitor.hh" |
29 #include <typeinfo> |
29 #include <typeinfo> |
|
30 |
|
31 |
|
32 |
|
33 |
|
34 /* A small helper class, to transform elementary data type to string. |
|
35 * this allows us to generate more relevant error messages... |
|
36 */ |
|
37 |
|
38 class elementary_type_c: public null_visitor_c { |
|
39 protected: |
|
40 elementary_type_c(void) {}; |
|
41 ~elementary_type_c(void) {}; |
|
42 |
|
43 private: |
|
44 /* singleton class! */ |
|
45 static elementary_type_c *singleton; |
|
46 |
|
47 public: |
|
48 static const char * to_string(symbol_c *symbol); |
|
49 |
|
50 |
|
51 /***********************************/ |
|
52 /* B 1.3.1 - Elementary Data Types */ |
|
53 /***********************************/ |
|
54 void *visit(time_type_name_c *symbol) {return (void *)"TIME"; }; |
|
55 void *visit(bool_type_name_c *symbol) {return (void *)"BOOL"; }; |
|
56 void *visit(sint_type_name_c *symbol) {return (void *)"SINT"; }; |
|
57 void *visit(int_type_name_c *symbol) {return (void *)"INT"; }; |
|
58 void *visit(dint_type_name_c *symbol) {return (void *)"DINT"; }; |
|
59 void *visit(lint_type_name_c *symbol) {return (void *)"LINT"; }; |
|
60 void *visit(usint_type_name_c *symbol) {return (void *)"USINT"; }; |
|
61 void *visit(uint_type_name_c *symbol) {return (void *)"UINT"; }; |
|
62 void *visit(udint_type_name_c *symbol) {return (void *)"UDINT"; }; |
|
63 void *visit(ulint_type_name_c *symbol) {return (void *)"ULINT"; }; |
|
64 void *visit(real_type_name_c *symbol) {return (void *)"REAL"; }; |
|
65 void *visit(lreal_type_name_c *symbol) {return (void *)"LREAL"; }; |
|
66 void *visit(date_type_name_c *symbol) {return (void *)"DATE"; }; |
|
67 void *visit(tod_type_name_c *symbol) {return (void *)"TOD"; }; |
|
68 void *visit(dt_type_name_c *symbol) {return (void *)"DT"; }; |
|
69 void *visit(byte_type_name_c *symbol) {return (void *)"BYTE"; }; |
|
70 void *visit(word_type_name_c *symbol) {return (void *)"WORD"; }; |
|
71 void *visit(lword_type_name_c *symbol) {return (void *)"LWORD"; }; |
|
72 void *visit(dword_type_name_c *symbol) {return (void *)"DWORD"; }; |
|
73 void *visit(string_type_name_c *symbol) {return (void *)"STRING"; }; |
|
74 void *visit(wstring_type_name_c *symbol) {return (void *)"WSTRING"; }; |
|
75 |
|
76 void *visit(safetime_type_name_c *symbol) {return (void *)"SAFETIME"; }; |
|
77 void *visit(safebool_type_name_c *symbol) {return (void *)"SAFEBOOL"; }; |
|
78 void *visit(safesint_type_name_c *symbol) {return (void *)"SAFESINT"; }; |
|
79 void *visit(safeint_type_name_c *symbol) {return (void *)"SAFEINT"; }; |
|
80 void *visit(safedint_type_name_c *symbol) {return (void *)"SAFEDINT"; }; |
|
81 void *visit(safelint_type_name_c *symbol) {return (void *)"SAFELINT"; }; |
|
82 void *visit(safeusint_type_name_c *symbol) {return (void *)"SAFEUSINT"; }; |
|
83 void *visit(safeuint_type_name_c *symbol) {return (void *)"SAFEUINT"; }; |
|
84 void *visit(safeudint_type_name_c *symbol) {return (void *)"SAFEUDINT"; }; |
|
85 void *visit(safeulint_type_name_c *symbol) {return (void *)"SAFEULINT"; }; |
|
86 void *visit(safereal_type_name_c *symbol) {return (void *)"SAFEREAL"; }; |
|
87 void *visit(safelreal_type_name_c *symbol) {return (void *)"SAFELREAL"; }; |
|
88 void *visit(safedate_type_name_c *symbol) {return (void *)"SAFEDATE"; }; |
|
89 void *visit(safetod_type_name_c *symbol) {return (void *)"SAFETOD"; }; |
|
90 void *visit(safedt_type_name_c *symbol) {return (void *)"SAFEDT"; }; |
|
91 void *visit(safebyte_type_name_c *symbol) {return (void *)"SAFEBYTE"; }; |
|
92 void *visit(safeword_type_name_c *symbol) {return (void *)"SAFEWORD"; }; |
|
93 void *visit(safelword_type_name_c *symbol) {return (void *)"SAFELWORD"; }; |
|
94 void *visit(safedword_type_name_c *symbol) {return (void *)"SAFEDWORD"; }; |
|
95 void *visit(safestring_type_name_c *symbol) {return (void *)"SAFESTRING"; }; |
|
96 void *visit(safewstring_type_name_c *symbol) {return (void *)"SAFEWSTRING"; }; |
|
97 }; |
|
98 extern elementary_type_c *elementary_type; |
|
99 |
|
100 |
|
101 |
|
102 |
30 |
103 |
31 #define is_type(type_name_symbol, type_name_class) ((type_name_symbol == NULL) ? false : (typeid(*type_name_symbol) == typeid(type_name_class))) |
104 #define is_type(type_name_symbol, type_name_class) ((type_name_symbol == NULL) ? false : (typeid(*type_name_symbol) == typeid(type_name_class))) |
32 #define sizeoftype(symbol) get_sizeof_datatype_c::getsize(symbol) |
105 #define sizeoftype(symbol) get_sizeof_datatype_c::getsize(symbol) |
33 |
106 |
34 /* Widening Primitive Conversion */ |
107 /* Widening Primitive Conversion */ |