47 |
47 |
48 /* A helper function... */ |
48 /* A helper function... */ |
49 bool search_expression_type_c::is_bool_type(symbol_c *type_symbol) { |
49 bool search_expression_type_c::is_bool_type(symbol_c *type_symbol) { |
50 bool_type_name_c tt; |
50 bool_type_name_c tt; |
51 if (type_symbol == NULL) {return true;} |
51 if (type_symbol == NULL) {return true;} |
52 return (typeid(*type_symbol) == typeid(bool_type_name_c)); |
52 if (typeid(*type_symbol) == typeid(safebool_type_name_c)) {return true;} |
|
53 if (typeid(*type_symbol) == typeid(bool_type_name_c)) {return true;} |
|
54 if (typeid(*type_symbol) == typeid(boolean_true_c)) {return true;} |
|
55 if (typeid(*type_symbol) == typeid(boolean_false_c)) {return true;} |
|
56 return false; |
53 } |
57 } |
54 |
58 |
55 /* A helper function... */ |
59 /* A helper function... */ |
56 bool search_expression_type_c::is_time_type(symbol_c *type_symbol) { |
60 bool search_expression_type_c::is_time_type(symbol_c *type_symbol) { |
57 if (type_symbol == NULL) {return true;} |
61 if (type_symbol == NULL) {return true;} |
58 if (typeid(*type_symbol) == typeid(time_type_name_c)) {return true;} |
62 if (typeid(*type_symbol) == typeid(time_type_name_c)) {return true;} |
59 if (typeid(*type_symbol) == typeid(date_type_name_c)) {return true;} |
63 if (typeid(*type_symbol) == typeid(date_type_name_c)) {return true;} |
60 if (typeid(*type_symbol) == typeid(tod_type_name_c)) {return true;} |
64 if (typeid(*type_symbol) == typeid(tod_type_name_c)) {return true;} |
61 if (typeid(*type_symbol) == typeid(dt_type_name_c)) {return true;} |
65 if (typeid(*type_symbol) == typeid(dt_type_name_c)) {return true;} |
|
66 if (typeid(*type_symbol) == typeid(safetime_type_name_c)) {return true;} |
|
67 if (typeid(*type_symbol) == typeid(safedate_type_name_c)) {return true;} |
|
68 if (typeid(*type_symbol) == typeid(safetod_type_name_c)) {return true;} |
|
69 if (typeid(*type_symbol) == typeid(safedt_type_name_c)) {return true;} |
62 return false; |
70 return false; |
63 } |
71 } |
64 |
72 |
65 /* A helper function... */ |
73 /* A helper function... */ |
66 bool search_expression_type_c::is_string_type(symbol_c *type_symbol) { |
74 bool search_expression_type_c::is_string_type(symbol_c *type_symbol) { |
67 if (type_symbol == NULL) {return true;} |
75 if (type_symbol == NULL) {return true;} |
68 if (typeid(*type_symbol) == typeid(string_type_name_c)) {return true;} |
76 if (typeid(*type_symbol) == typeid(string_type_name_c)) {return true;} |
69 if (typeid(*type_symbol) == typeid(wstring_type_name_c)) {return true;} |
77 if (typeid(*type_symbol) == typeid(wstring_type_name_c)) {return true;} |
|
78 if (typeid(*type_symbol) == typeid(safestring_type_name_c)) {return true;} |
|
79 if (typeid(*type_symbol) == typeid(safewstring_type_name_c)) {return true;} |
70 return false; |
80 return false; |
71 } |
81 } |
72 |
82 |
73 /* A helper function... */ |
83 /* A helper function... */ |
74 bool search_expression_type_c::is_literal_integer_type(symbol_c *type_symbol) { |
84 bool search_expression_type_c::is_literal_integer_type(symbol_c *type_symbol) { |
75 if (type_symbol == NULL) {return true;} |
85 if (type_symbol == NULL) {return true;} |
76 if (typeid(*type_symbol) == typeid(integer_c)) {return true;} |
86 if (typeid(*type_symbol) == typeid(integer_c)) {return true;} |
|
87 if (typeid(*type_symbol) == typeid(neg_integer_c)) {return true;} |
77 if (typeid(*type_symbol) == typeid(binary_integer_c)) {return true;} |
88 if (typeid(*type_symbol) == typeid(binary_integer_c)) {return true;} |
78 if (typeid(*type_symbol) == typeid(octal_integer_c)) {return true;} |
89 if (typeid(*type_symbol) == typeid(octal_integer_c)) {return true;} |
79 if (typeid(*type_symbol) == typeid(hex_integer_c)) {return true;} |
90 if (typeid(*type_symbol) == typeid(hex_integer_c)) {return true;} |
80 return false; |
91 return false; |
81 } |
92 } |
82 |
93 |
83 /* A helper function... */ |
94 /* A helper function... */ |
84 bool search_expression_type_c::is_integer_type(symbol_c *type_symbol) { |
95 bool search_expression_type_c::is_integer_type(symbol_c *type_symbol) { |
85 if (type_symbol == NULL) {return true;} |
96 if (type_symbol == NULL) {return true;} |
86 if (typeid(*type_symbol) == typeid(sint_type_name_c)) {return true;} |
97 if (typeid(*type_symbol) == typeid(sint_type_name_c)) {return true;} |
87 if (typeid(*type_symbol) == typeid(int_type_name_c)) {return true;} |
98 if (typeid(*type_symbol) == typeid(int_type_name_c)) {return true;} |
88 if (typeid(*type_symbol) == typeid(dint_type_name_c)) {return true;} |
99 if (typeid(*type_symbol) == typeid(dint_type_name_c)) {return true;} |
89 if (typeid(*type_symbol) == typeid(lint_type_name_c)) {return true;} |
100 if (typeid(*type_symbol) == typeid(lint_type_name_c)) {return true;} |
90 if (typeid(*type_symbol) == typeid(usint_type_name_c)) {return true;} |
101 if (typeid(*type_symbol) == typeid(usint_type_name_c)) {return true;} |
91 if (typeid(*type_symbol) == typeid(uint_type_name_c)) {return true;} |
102 if (typeid(*type_symbol) == typeid(uint_type_name_c)) {return true;} |
92 if (typeid(*type_symbol) == typeid(udint_type_name_c)) {return true;} |
103 if (typeid(*type_symbol) == typeid(udint_type_name_c)) {return true;} |
93 if (typeid(*type_symbol) == typeid(ulint_type_name_c)) {return true;} |
104 if (typeid(*type_symbol) == typeid(ulint_type_name_c)) {return true;} |
|
105 if (typeid(*type_symbol) == typeid(safesint_type_name_c)) {return true;} |
|
106 if (typeid(*type_symbol) == typeid(safeint_type_name_c)) {return true;} |
|
107 if (typeid(*type_symbol) == typeid(safedint_type_name_c)) {return true;} |
|
108 if (typeid(*type_symbol) == typeid(safelint_type_name_c)) {return true;} |
|
109 if (typeid(*type_symbol) == typeid(safeusint_type_name_c)) {return true;} |
|
110 if (typeid(*type_symbol) == typeid(safeuint_type_name_c)) {return true;} |
|
111 if (typeid(*type_symbol) == typeid(safeudint_type_name_c)) {return true;} |
|
112 if (typeid(*type_symbol) == typeid(safeulint_type_name_c)) {return true;} |
94 return is_literal_integer_type(type_symbol); |
113 return is_literal_integer_type(type_symbol); |
95 } |
114 } |
96 |
115 |
97 /* A helper function... */ |
116 /* A helper function... */ |
98 bool search_expression_type_c::is_literal_real_type(symbol_c *type_symbol) { |
117 bool search_expression_type_c::is_literal_real_type(symbol_c *type_symbol) { |
99 if (type_symbol == NULL) {return true;} |
118 if (type_symbol == NULL) {return true;} |
100 if (typeid(*type_symbol) == typeid(real_c)) {return true;} |
119 if (typeid(*type_symbol) == typeid(real_c)) {return true;} |
|
120 if (typeid(*type_symbol) == typeid(neg_real_c)) {return true;} |
101 return false; |
121 return false; |
102 } |
122 } |
103 |
123 |
104 /* A helper function... */ |
124 /* A helper function... */ |
105 bool search_expression_type_c::is_real_type(symbol_c *type_symbol) { |
125 bool search_expression_type_c::is_real_type(symbol_c *type_symbol) { |
106 if (type_symbol == NULL) {return true;} |
126 if (type_symbol == NULL) {return true;} |
107 if (typeid(*type_symbol) == typeid(real_type_name_c)) {return true;} |
127 if (typeid(*type_symbol) == typeid(real_type_name_c)) {return true;} |
108 if (typeid(*type_symbol) == typeid(lreal_type_name_c)) {return true;} |
128 if (typeid(*type_symbol) == typeid(lreal_type_name_c)) {return true;} |
|
129 if (typeid(*type_symbol) == typeid(safereal_type_name_c)) {return true;} |
|
130 if (typeid(*type_symbol) == typeid(safelreal_type_name_c)) {return true;} |
109 return is_literal_real_type(type_symbol); |
131 return is_literal_real_type(type_symbol); |
110 } |
132 } |
111 |
133 |
112 bool search_expression_type_c::is_num_type(symbol_c *type_symbol) { |
134 bool search_expression_type_c::is_num_type(symbol_c *type_symbol) { |
113 if (type_symbol == NULL) {return true;} |
135 if (type_symbol == NULL) {return true;} |
114 return is_real_type(type_symbol) || is_integer_type(type_symbol); |
136 return is_real_type(type_symbol) || is_integer_type(type_symbol); |
115 } |
137 } |
116 |
138 |
117 bool search_expression_type_c::is_nbinary_type(symbol_c *type_symbol) { |
139 bool search_expression_type_c::is_nbinary_type(symbol_c *type_symbol) { |
118 if (type_symbol == NULL) {return true;} |
140 if (type_symbol == NULL) {return true;} |
119 if (typeid(*type_symbol) == typeid(byte_type_name_c)) {return true;} |
141 if (typeid(*type_symbol) == typeid(byte_type_name_c)) {return true;} |
120 if (typeid(*type_symbol) == typeid(word_type_name_c)) {return true;} |
142 if (typeid(*type_symbol) == typeid(word_type_name_c)) {return true;} |
121 if (typeid(*type_symbol) == typeid(dword_type_name_c)) {return true;} |
143 if (typeid(*type_symbol) == typeid(dword_type_name_c)) {return true;} |
122 if (typeid(*type_symbol) == typeid(lword_type_name_c)) {return true;} |
144 if (typeid(*type_symbol) == typeid(lword_type_name_c)) {return true;} |
|
145 if (typeid(*type_symbol) == typeid(safebyte_type_name_c)) {return true;} |
|
146 if (typeid(*type_symbol) == typeid(safeword_type_name_c)) {return true;} |
|
147 if (typeid(*type_symbol) == typeid(safedword_type_name_c)) {return true;} |
|
148 if (typeid(*type_symbol) == typeid(safelword_type_name_c)) {return true;} |
123 return is_literal_integer_type(type_symbol); |
149 return is_literal_integer_type(type_symbol); |
124 } |
150 } |
125 |
151 |
126 bool search_expression_type_c::is_binary_type(symbol_c *type_symbol) { |
152 bool search_expression_type_c::is_binary_type(symbol_c *type_symbol) { |
127 if (type_symbol == NULL) {return true;} |
153 if (type_symbol == NULL) {return true;} |
128 if (typeid(*type_symbol) == typeid(bool_type_name_c)) {return true;} |
154 // if (typeid(*type_symbol) == typeid(bool_type_name_c)) {return true;} |
129 return is_nbinary_type(type_symbol); |
155 // if (typeid(*type_symbol) == typeid(safebool_type_name_c)) {return true;} |
|
156 return (is_nbinary_type(type_symbol) || is_bool_type(type_symbol)); |
130 } |
157 } |
131 |
158 |
132 bool search_expression_type_c::is_same_type(symbol_c *first_type, symbol_c *second_type) { |
159 bool search_expression_type_c::is_same_type(symbol_c *first_type, symbol_c *second_type) { |
133 if (first_type == NULL || second_type == NULL) {return true;} |
160 if (first_type == NULL || second_type == NULL) {return true;} |
134 if (typeid(*first_type) == typeid(*second_type)) {return true;} |
161 if (typeid(*first_type) == typeid(*second_type)) {return true;} |
135 if (is_integer_type(first_type) && is_literal_integer_type(second_type)) {return true;} |
162 if (is_bool_type(first_type) && is_bool_type(second_type)) {return true;} |
136 if (is_literal_integer_type(first_type) && is_integer_type(second_type)) {return true;} |
163 if (is_integer_type(first_type) && is_literal_integer_type(second_type)) {return true;} |
137 if (is_binary_type(first_type) && is_literal_integer_type(second_type)) {return true;} |
164 if (is_literal_integer_type(first_type) && is_integer_type(second_type)) {return true;} |
138 if (is_literal_integer_type(first_type) && is_binary_type(second_type)) {return true;} |
165 if (is_binary_type(first_type) && is_literal_integer_type(second_type)) {return true;} |
139 if (is_real_type(first_type) && is_literal_real_type(second_type)) {return true;} |
166 if (is_literal_integer_type(first_type) && is_binary_type(second_type)) {return true;} |
140 if (is_literal_real_type(first_type) && is_real_type(second_type)) {return true;} |
167 if (is_real_type(first_type) && is_literal_real_type(second_type)) {return true;} |
|
168 if (is_literal_real_type(first_type) && is_real_type(second_type)) {return true;} |
141 return false; |
169 return false; |
142 } |
170 } |
143 |
171 |
144 symbol_c* search_expression_type_c::common_type(symbol_c *first_type, symbol_c *second_type) { |
172 symbol_c* search_expression_type_c::common_type(symbol_c *first_type, symbol_c *second_type) { |
145 if (first_type == NULL && second_type == NULL) {return NULL;} |
173 if (first_type == NULL && second_type == NULL) {return NULL;} |
146 if (first_type == NULL) {return second_type;} |
174 if (first_type == NULL) {return second_type;} |
147 if (second_type == NULL) {return first_type;} |
175 if (second_type == NULL) {return first_type;} |
148 if (typeid(*first_type) == typeid(*second_type)) {return first_type;} |
176 if (typeid(*first_type) == typeid(*second_type)) {return first_type;} |
149 if (is_integer_type(first_type) && is_literal_integer_type(second_type)) {return first_type;} |
177 if (is_integer_type(first_type) && is_literal_integer_type(second_type)) {return first_type;} |
150 if (is_literal_integer_type(first_type) && is_integer_type(second_type)) {return second_type;} |
178 if (is_literal_integer_type(first_type) && is_integer_type(second_type)) {return second_type;} |
151 if (is_binary_type(first_type) && is_literal_integer_type(second_type)) {return first_type;} |
179 if (is_binary_type(first_type) && is_literal_integer_type(second_type)) {return first_type;} |
152 if (is_literal_integer_type(first_type) && is_binary_type(second_type)) {return second_type;} |
180 if (is_literal_integer_type(first_type) && is_binary_type(second_type)) {return second_type;} |
153 if (is_real_type(first_type) && is_literal_real_type(second_type)) {return first_type;} |
181 if (is_real_type(first_type) && is_literal_real_type(second_type)) {return first_type;} |
154 if (is_literal_real_type(first_type) && is_real_type(second_type)) {return second_type;} |
182 if (is_literal_real_type(first_type) && is_real_type(second_type)) {return second_type;} |
155 return NULL; |
183 return NULL; |
156 } |
184 } |
157 |
185 |
158 |
186 |
159 integer_c search_expression_type_c::integer("1"); // what default value should we use here ??? |
187 integer_c search_expression_type_c::integer("1"); // what default value should we use here ??? |