Do datatype verification of fully qualified enumerated values (e.g. ENUMTYPE#enumconst)
authorMario de Sousa <msousa@fe.up.pt>
Thu, 15 Nov 2012 12:57:04 +0000
changeset 733 246b4ef78da6
parent 732 f6a46e29853b
child 734 49853bded539
Do datatype verification of fully qualified enumerated values (e.g. ENUMTYPE#enumconst)
stage3/fill_candidate_datatypes.cc
--- a/stage3/fill_candidate_datatypes.cc	Wed Nov 14 18:39:02 2012 +0000
+++ b/stage3/fill_candidate_datatypes.cc	Thu Nov 15 12:57:04 2012 +0000
@@ -938,12 +938,7 @@
 	symbol_c *enumerated_type;
 
 	if (NULL != symbol->type) {
-#if 1
-		enumerated_type = symbol->type; 
-#else
-		/* NOTE: The following code works but is not complete, that is why it is currently commented out!
-		 *  
-		 *        It is not complete because it does not yet consider the following situation:
+		/* NOTE: This code must take into account the following situation:
 		 *
 		 *        TYPE  
 		 *           base_enum_t: (x1, x2, x3);
@@ -957,10 +952,6 @@
 		 *             enum_t1#x1
 		 *             enum_t2#x1
 		 *            enum_t12#x1
-		 *
-		 *      However, the following code only considers 
- 		 *         base_enum_t#x1
-		 *      as correct, and all the others as incorrect!
 		 */
 		/* check whether the value really belongs to that datatype!! */
 		/* All local enum values are declared inside anonymous enumeration datatypes (i.e. inside a VAR ... END_VAR declaration, with
@@ -971,9 +962,8 @@
 		enumerated_value_symtable_t::iterator lower = global_enumerated_value_symtable.lower_bound(symbol->value);
 		enumerated_value_symtable_t::iterator upper = global_enumerated_value_symtable.upper_bound(symbol->value);
 		for (; lower != upper; lower++)
-			if (compare_identifiers(search_base_type_c::get_basetype_id(lower->second), symbol->type) == 0)  // returns 0 if identifiers are equal!!
+			if (get_datatype_info_c::is_type_equal(base_type(lower->second), base_type(symbol->type)))
 				enumerated_type = symbol->type; 
-#endif
 	}
 	else {
 		symbol_c *global_enumerated_type = global_enumerated_value_symtable.find_value  (symbol->value);