152 * of the function's OUTPUT or IN_OUT parameters. |
152 * of the function's OUTPUT or IN_OUT parameters. |
153 */ |
153 */ |
154 /* This may occur in function invocations, when passing values (possibly an expression) to one |
154 /* This may occur in function invocations, when passing values (possibly an expression) to one |
155 * of the function's OUTPUT or IN_OUT parameters. |
155 * of the function's OUTPUT or IN_OUT parameters. |
156 */ |
156 */ |
157 if ( (typeid( *lvalue ) == typeid( or_expression_c )) || |
157 if ( |
158 (typeid( *lvalue ) == typeid( xor_expression_c )) || |
158 /*********************/ |
159 (typeid( *lvalue ) == typeid( and_expression_c )) || |
159 /* B 1.2 - Constants */ |
160 (typeid( *lvalue ) == typeid( equ_expression_c )) || |
160 /*********************/ |
161 (typeid( *lvalue ) == typeid( notequ_expression_c )) || |
161 /******************************/ |
162 (typeid( *lvalue ) == typeid( lt_expression_c )) || |
162 /* B 1.2.1 - Numeric Literals */ |
163 (typeid( *lvalue ) == typeid( gt_expression_c )) || |
163 /******************************/ |
164 (typeid( *lvalue ) == typeid( le_expression_c )) || |
164 (typeid( *lvalue ) == typeid( real_c )) || |
165 (typeid( *lvalue ) == typeid( ge_expression_c )) || |
165 (typeid( *lvalue ) == typeid( integer_c )) || |
166 (typeid( *lvalue ) == typeid( add_expression_c )) || |
166 (typeid( *lvalue ) == typeid( binary_integer_c )) || |
167 (typeid( *lvalue ) == typeid( sub_expression_c )) || |
167 (typeid( *lvalue ) == typeid( octal_integer_c )) || |
168 (typeid( *lvalue ) == typeid( mul_expression_c )) || |
168 (typeid( *lvalue ) == typeid( hex_integer_c )) || |
169 (typeid( *lvalue ) == typeid( div_expression_c )) || |
169 (typeid( *lvalue ) == typeid( neg_real_c )) || |
170 (typeid( *lvalue ) == typeid( mod_expression_c )) || |
170 (typeid( *lvalue ) == typeid( neg_integer_c )) || |
171 (typeid( *lvalue ) == typeid( power_expression_c )) || |
171 (typeid( *lvalue ) == typeid( integer_literal_c )) || |
172 (typeid( *lvalue ) == typeid( neg_expression_c )) || |
172 (typeid( *lvalue ) == typeid( real_literal_c )) || |
173 (typeid( *lvalue ) == typeid( not_expression_c )) || |
173 (typeid( *lvalue ) == typeid( bit_string_literal_c )) || |
174 (typeid( *lvalue ) == typeid( function_invocation_c))) |
174 (typeid( *lvalue ) == typeid( boolean_literal_c )) || |
175 STAGE3_ERROR(0, lvalue, lvalue, "Assignment an expression to OUT or IN_OUT params is not be allowed."); |
175 (typeid( *lvalue ) == typeid( boolean_true_c )) || /* should not really be needed */ |
176 } |
176 (typeid( *lvalue ) == typeid( boolean_false_c )) || /* should not really be needed */ |
|
177 /*******************************/ |
|
178 /* B.1.2.2 Character Strings */ |
|
179 /*******************************/ |
|
180 (typeid( *lvalue ) == typeid( double_byte_character_string_c )) || |
|
181 (typeid( *lvalue ) == typeid( single_byte_character_string_c )) || |
|
182 /***************************/ |
|
183 /* B 1.2.3 - Time Literals */ |
|
184 /***************************/ |
|
185 /************************/ |
|
186 /* B 1.2.3.1 - Duration */ |
|
187 /************************/ |
|
188 (typeid( *lvalue ) == typeid( duration_c )) || |
|
189 /************************************/ |
|
190 /* B 1.2.3.2 - Time of day and Date */ |
|
191 /************************************/ |
|
192 (typeid( *lvalue ) == typeid( time_of_day_c )) || |
|
193 (typeid( *lvalue ) == typeid( daytime_c )) || /* should not really be needed */ |
|
194 (typeid( *lvalue ) == typeid( date_c )) || /* should not really be needed */ |
|
195 (typeid( *lvalue ) == typeid( date_literal_c )) || |
|
196 (typeid( *lvalue ) == typeid( date_and_time_c )) || |
|
197 /***************************************/ |
|
198 /* B.3 - Language ST (Structured Text) */ |
|
199 /***************************************/ |
|
200 /***********************/ |
|
201 /* B 3.1 - Expressions */ |
|
202 /***********************/ |
|
203 (typeid( *lvalue ) == typeid( or_expression_c )) || |
|
204 (typeid( *lvalue ) == typeid( xor_expression_c )) || |
|
205 (typeid( *lvalue ) == typeid( and_expression_c )) || |
|
206 (typeid( *lvalue ) == typeid( equ_expression_c )) || |
|
207 (typeid( *lvalue ) == typeid( notequ_expression_c )) || |
|
208 (typeid( *lvalue ) == typeid( lt_expression_c )) || |
|
209 (typeid( *lvalue ) == typeid( gt_expression_c )) || |
|
210 (typeid( *lvalue ) == typeid( le_expression_c )) || |
|
211 (typeid( *lvalue ) == typeid( ge_expression_c )) || |
|
212 (typeid( *lvalue ) == typeid( add_expression_c )) || |
|
213 (typeid( *lvalue ) == typeid( sub_expression_c )) || |
|
214 (typeid( *lvalue ) == typeid( mul_expression_c )) || |
|
215 (typeid( *lvalue ) == typeid( div_expression_c )) || |
|
216 (typeid( *lvalue ) == typeid( mod_expression_c )) || |
|
217 (typeid( *lvalue ) == typeid( power_expression_c )) || |
|
218 (typeid( *lvalue ) == typeid( neg_expression_c )) || |
|
219 (typeid( *lvalue ) == typeid( not_expression_c )) || |
|
220 (typeid( *lvalue ) == typeid( function_invocation_c ))) |
|
221 STAGE3_ERROR(0, lvalue, lvalue, "Assigning an expression to an OUT or IN_OUT parameter is not allowed."); |
|
222 } |
|
223 |
|
224 |
|
225 |
|
226 |
177 |
227 |
178 |
228 |
179 |
229 |
180 void lvalue_check_c::verify_is_lvalue(symbol_c *lvalue) { |
230 void lvalue_check_c::verify_is_lvalue(symbol_c *lvalue) { |
181 check_assignment_to_expression(lvalue); |
231 check_assignment_to_expression(lvalue); |