1191 |
1191 |
1192 void *print_datatypes_error_c::visit(if_statement_c *symbol) { |
1192 void *print_datatypes_error_c::visit(if_statement_c *symbol) { |
1193 symbol->expression->accept(*this); |
1193 symbol->expression->accept(*this); |
1194 if ((!get_datatype_info_c::is_type_valid(symbol->expression->datatype)) && |
1194 if ((!get_datatype_info_c::is_type_valid(symbol->expression->datatype)) && |
1195 (symbol->expression->candidate_datatypes.size() > 0)) { |
1195 (symbol->expression->candidate_datatypes.size() > 0)) { |
1196 STAGE3_ERROR(0, symbol, symbol, "Invalid data type for 'IF' condition (should be BOOL)."); |
1196 STAGE3_ERROR(0, symbol->expression, symbol->expression, "Invalid data type for 'IF' condition (should be BOOL)."); |
1197 } |
1197 } |
1198 if (NULL != symbol->statement_list) |
1198 if (NULL != symbol->statement_list) |
1199 symbol->statement_list->accept(*this); |
1199 symbol->statement_list->accept(*this); |
1200 if (NULL != symbol->elseif_statement_list) |
1200 if (NULL != symbol->elseif_statement_list) |
1201 symbol->elseif_statement_list->accept(*this); |
1201 symbol->elseif_statement_list->accept(*this); |
1206 |
1206 |
1207 void *print_datatypes_error_c::visit(elseif_statement_c *symbol) { |
1207 void *print_datatypes_error_c::visit(elseif_statement_c *symbol) { |
1208 symbol->expression->accept(*this); |
1208 symbol->expression->accept(*this); |
1209 if ((!get_datatype_info_c::is_type_valid(symbol->expression->datatype)) && |
1209 if ((!get_datatype_info_c::is_type_valid(symbol->expression->datatype)) && |
1210 (symbol->expression->candidate_datatypes.size() > 0)) { |
1210 (symbol->expression->candidate_datatypes.size() > 0)) { |
1211 STAGE3_ERROR(0, symbol, symbol, "Invalid data type for 'ELSIF' condition (should be BOOL)."); |
1211 STAGE3_ERROR(0, symbol->expression, symbol->expression, "Invalid data type for 'ELSIF' condition (should be BOOL)."); |
1212 } |
1212 } |
1213 if (NULL != symbol->statement_list) |
1213 if (NULL != symbol->statement_list) |
1214 symbol->statement_list->accept(*this); |
1214 symbol->statement_list->accept(*this); |
1215 return NULL; |
1215 return NULL; |
1216 } |
1216 } |
1218 |
1218 |
1219 void *print_datatypes_error_c::visit(case_statement_c *symbol) { |
1219 void *print_datatypes_error_c::visit(case_statement_c *symbol) { |
1220 symbol->expression->accept(*this); |
1220 symbol->expression->accept(*this); |
1221 if ((!get_datatype_info_c::is_type_valid(symbol->expression->datatype)) && |
1221 if ((!get_datatype_info_c::is_type_valid(symbol->expression->datatype)) && |
1222 (symbol->expression->candidate_datatypes.size() > 0)) { |
1222 (symbol->expression->candidate_datatypes.size() > 0)) { |
1223 STAGE3_ERROR(0, symbol, symbol, "'CASE' quantity not an integer or enumerated."); |
1223 STAGE3_ERROR(0, symbol->expression, symbol->expression, "'CASE' quantity not an integer or enumerated."); |
1224 } |
1224 } |
1225 symbol->case_element_list->accept(*this); |
1225 symbol->case_element_list->accept(*this); |
1226 if (NULL != symbol->statement_list) |
1226 if (NULL != symbol->statement_list) |
1227 symbol->statement_list->accept(*this); |
1227 symbol->statement_list->accept(*this); |
1228 return NULL; |
1228 return NULL; |
1237 symbol->beg_expression->accept(*this); |
1237 symbol->beg_expression->accept(*this); |
1238 symbol->end_expression->accept(*this); |
1238 symbol->end_expression->accept(*this); |
1239 /* Control variable */ |
1239 /* Control variable */ |
1240 if ((!get_datatype_info_c::is_type_valid(symbol->control_variable->datatype)) && |
1240 if ((!get_datatype_info_c::is_type_valid(symbol->control_variable->datatype)) && |
1241 (symbol->control_variable->candidate_datatypes.size() > 0)) { |
1241 (symbol->control_variable->candidate_datatypes.size() > 0)) { |
1242 STAGE3_ERROR(0, symbol, symbol, "Invalid data type for 'FOR' control variable."); |
1242 STAGE3_ERROR(0, symbol->control_variable, symbol->control_variable, "Invalid data type for 'FOR' control variable."); |
1243 } |
1243 } |
1244 /* BEG expression */ |
1244 /* BEG expression */ |
1245 if ((!get_datatype_info_c::is_type_valid(symbol->beg_expression->datatype)) && |
1245 if ((!get_datatype_info_c::is_type_valid(symbol->beg_expression->datatype)) && |
1246 (symbol->beg_expression->candidate_datatypes.size() > 0)) { |
1246 (symbol->beg_expression->candidate_datatypes.size() > 0)) { |
1247 STAGE3_ERROR(0, symbol, symbol, "Invalid data type for 'FOR' begin expression."); |
1247 STAGE3_ERROR(0, symbol->beg_expression, symbol->beg_expression, "Invalid data type for 'FOR' begin expression."); |
1248 } |
1248 } |
1249 /* END expression */ |
1249 /* END expression */ |
1250 if ((!get_datatype_info_c::is_type_valid(symbol->end_expression->datatype)) && |
1250 if ((!get_datatype_info_c::is_type_valid(symbol->end_expression->datatype)) && |
1251 (symbol->end_expression->candidate_datatypes.size() > 0)) { |
1251 (symbol->end_expression->candidate_datatypes.size() > 0)) { |
1252 STAGE3_ERROR(0, symbol, symbol, "Invalid data type for 'FOR' end expression."); |
1252 STAGE3_ERROR(0, symbol->end_expression, symbol->end_expression, "Invalid data type for 'FOR' end expression."); |
1253 } |
1253 } |
1254 /* BY expression */ |
1254 /* BY expression */ |
1255 if ((NULL != symbol->by_expression) && |
1255 if ((NULL != symbol->by_expression) && |
1256 (!get_datatype_info_c::is_type_valid(symbol->by_expression->datatype)) && |
1256 (!get_datatype_info_c::is_type_valid(symbol->by_expression->datatype)) && |
1257 (symbol->end_expression->candidate_datatypes.size() > 0)) { |
1257 (symbol->end_expression->candidate_datatypes.size() > 0)) { |
1258 STAGE3_ERROR(0, symbol, symbol, "Invalid data type for 'FOR' by expression."); |
1258 STAGE3_ERROR(0, symbol->by_expression, symbol->by_expression, "Invalid data type for 'FOR' by expression."); |
1259 } |
1259 } |
1260 /* DO statement */ |
1260 /* DO statement */ |
1261 if (NULL != symbol->statement_list) |
1261 if (NULL != symbol->statement_list) |
1262 symbol->statement_list->accept(*this); |
1262 symbol->statement_list->accept(*this); |
1263 |
1263 |
1265 } |
1265 } |
1266 |
1266 |
1267 void *print_datatypes_error_c::visit(while_statement_c *symbol) { |
1267 void *print_datatypes_error_c::visit(while_statement_c *symbol) { |
1268 symbol->expression->accept(*this); |
1268 symbol->expression->accept(*this); |
1269 if (!get_datatype_info_c::is_type_valid(symbol->expression->datatype)) { |
1269 if (!get_datatype_info_c::is_type_valid(symbol->expression->datatype)) { |
1270 STAGE3_ERROR(0, symbol, symbol, "Invalid data type for 'WHILE' condition."); |
1270 STAGE3_ERROR(0, symbol->expression, symbol->expression, "Invalid data type for 'WHILE' condition."); |
1271 return NULL; |
1271 return NULL; |
1272 } |
1272 } |
1273 if (NULL != symbol->statement_list) |
1273 if (NULL != symbol->statement_list) |
1274 symbol->statement_list->accept(*this); |
1274 symbol->statement_list->accept(*this); |
1275 return NULL; |
1275 return NULL; |
1276 } |
1276 } |
1277 |
1277 |
1278 void *print_datatypes_error_c::visit(repeat_statement_c *symbol) { |
1278 void *print_datatypes_error_c::visit(repeat_statement_c *symbol) { |
1279 if (!get_datatype_info_c::is_type_valid(symbol->expression->datatype)) { |
1279 if (!get_datatype_info_c::is_type_valid(symbol->expression->datatype)) { |
1280 STAGE3_ERROR(0, symbol, symbol, "Invalid data type for 'REPEAT' condition."); |
1280 STAGE3_ERROR(0, symbol->expression, symbol->expression, "Invalid data type for 'REPEAT' condition."); |
1281 return NULL; |
1281 return NULL; |
1282 } |
1282 } |
1283 if (NULL != symbol->statement_list) |
1283 if (NULL != symbol->statement_list) |
1284 symbol->statement_list->accept(*this); |
1284 symbol->statement_list->accept(*this); |
1285 symbol->expression->accept(*this); |
1285 symbol->expression->accept(*this); |