stage3/narrow_candidate_datatypes.cc
changeset 675 59fc28d4b06c
parent 674 b221168a36f1
child 676 ca4f17211251
equal deleted inserted replaced
674:b221168a36f1 675:59fc28d4b06c
   861 			if (is_widening_compatible(widen_table, prev_instruction_type, operand_type, symbol->datatype, deprecated_operation)) {
   861 			if (is_widening_compatible(widen_table, prev_instruction_type, operand_type, symbol->datatype, deprecated_operation)) {
   862 				/* set the desired datatype of the previous il instruction */
   862 				/* set the desired datatype of the previous il instruction */
   863 				set_datatype_in_prev_il_instructions(prev_instruction_type, fake_prev_il_instruction);
   863 				set_datatype_in_prev_il_instructions(prev_instruction_type, fake_prev_il_instruction);
   864 				/* set the datatype for the operand */
   864 				/* set the datatype for the operand */
   865 				il_operand->datatype = operand_type;
   865 				il_operand->datatype = operand_type;
       
   866 				il_operand->accept(*this);
   866 				
   867 				
   867 				count ++;
   868 				/* NOTE: DO NOT search any further! Return immediately!
       
   869 				 * Since we support SAFE*** datatypes, multiple entries in the widen_table may be compatible.
       
   870 				 * If we try to set more than one distinct datatype on the same symbol, then the datatype will be set to
       
   871 				 * an invalid_datatype, which is NOT what we want!
       
   872 				 */
       
   873 				return NULL;
   868 			}
   874 			}
   869 		}
   875 		}
   870 	}
   876 	}
   871 // 	if (count > 1) ERROR; /* Since we also support SAFE data types, this assertion is not necessarily always tru! */
       
   872 	if (is_type_valid(symbol->datatype) && (count <= 0)) ERROR;
       
   873 
       
   874 	il_operand->accept(*this);
       
   875 	return NULL;
   877 	return NULL;
   876 }
   878 }
   877 
   879 
   878 
   880 
   879 
   881