stage3/print_datatypes_error.cc
changeset 995 ce997a27c516
parent 958 7474d2cd1d6e
child 1041 56ebe2a31b5b
equal deleted inserted replaced
994:66dc2ef40e70 995:ce997a27c516
  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);