stage3/print_datatypes_error.cc
changeset 895 f824bf8e1579
parent 873 dea39ef02847
child 933 76324f461aed
equal deleted inserted replaced
892:54d5d185d6e2 895:f824bf8e1579
   687 	search_varfb_instance_type = NULL;
   687 	search_varfb_instance_type = NULL;
   688 	return NULL;
   688 	return NULL;
   689 }
   689 }
   690 
   690 
   691 
   691 
       
   692 /********************************************/
       
   693 /* B 1.6 Sequential function chart elements */
       
   694 /********************************************/
       
   695 void *print_datatypes_error_c::visit(transition_condition_c *symbol) {
       
   696 	if (symbol->transition_condition_il != NULL)   symbol->transition_condition_il->accept(*this);
       
   697 	if (symbol->transition_condition_st != NULL)   symbol->transition_condition_st->accept(*this);
       
   698 
       
   699 	if (!get_datatype_info_c::is_type_valid(symbol->datatype))
       
   700 		STAGE3_ERROR(0, symbol, symbol, "Transition condition has invalid data type (should be BOOL).");
       
   701 	return NULL;
       
   702 }
       
   703 
   692 
   704 
   693 /********************************/
   705 /********************************/
   694 /* B 1.7 Configuration elements */
   706 /* B 1.7 Configuration elements */
   695 /********************************/
   707 /********************************/
   696 void *print_datatypes_error_c::visit(configuration_declaration_c *symbol) {
   708 void *print_datatypes_error_c::visit(configuration_declaration_c *symbol) {
  1161 
  1173 
  1162 void *print_datatypes_error_c::visit(if_statement_c *symbol) {
  1174 void *print_datatypes_error_c::visit(if_statement_c *symbol) {
  1163 	symbol->expression->accept(*this);
  1175 	symbol->expression->accept(*this);
  1164 	if ((!get_datatype_info_c::is_type_valid(symbol->expression->datatype)) &&
  1176 	if ((!get_datatype_info_c::is_type_valid(symbol->expression->datatype)) &&
  1165 	    (symbol->expression->candidate_datatypes.size() > 0)) {
  1177 	    (symbol->expression->candidate_datatypes.size() > 0)) {
  1166 		STAGE3_ERROR(0, symbol, symbol, "Invalid data type for 'IF' condition.");
  1178 		STAGE3_ERROR(0, symbol, symbol, "Invalid data type for 'IF' condition (should be BOOL).");
  1167 	}
  1179 	}
  1168 	if (NULL != symbol->statement_list)
  1180 	if (NULL != symbol->statement_list)
  1169 		symbol->statement_list->accept(*this);
  1181 		symbol->statement_list->accept(*this);
  1170 	if (NULL != symbol->elseif_statement_list)
  1182 	if (NULL != symbol->elseif_statement_list)
  1171 		symbol->elseif_statement_list->accept(*this);
  1183 		symbol->elseif_statement_list->accept(*this);
  1176 
  1188 
  1177 void *print_datatypes_error_c::visit(elseif_statement_c *symbol) {
  1189 void *print_datatypes_error_c::visit(elseif_statement_c *symbol) {
  1178 	symbol->expression->accept(*this);
  1190 	symbol->expression->accept(*this);
  1179 	if ((!get_datatype_info_c::is_type_valid(symbol->expression->datatype)) &&
  1191 	if ((!get_datatype_info_c::is_type_valid(symbol->expression->datatype)) &&
  1180 	    (symbol->expression->candidate_datatypes.size() > 0)) {
  1192 	    (symbol->expression->candidate_datatypes.size() > 0)) {
  1181 		STAGE3_ERROR(0, symbol, symbol, "Invalid data type for 'ELSIF' condition.");
  1193 		STAGE3_ERROR(0, symbol, symbol, "Invalid data type for 'ELSIF' condition (should be BOOL).");
  1182 	}
  1194 	}
  1183 	if (NULL != symbol->statement_list)
  1195 	if (NULL != symbol->statement_list)
  1184 		symbol->statement_list->accept(*this);
  1196 		symbol->statement_list->accept(*this);
  1185 	return NULL;
  1197 	return NULL;
  1186 }
  1198 }