stage3/datatype_functions.cc
changeset 459 01f6664bf8c5
parent 458 587884880be6
child 467 4910eaa1206a
--- a/stage3/datatype_functions.cc	Thu Mar 01 10:28:27 2012 +0000
+++ b/stage3/datatype_functions.cc	Fri Mar 02 12:53:41 2012 +0000
@@ -228,6 +228,20 @@
 
 
 
+/* intersect the candidate_datatype lists of all prev_il_intructions, and set the local candidate_datatype list to the result! */
+void intersect_prev_candidate_datatype_lists(il_instruction_c *symbol) {
+	if (symbol->prev_il_instruction.empty())
+		return;
+	
+	copy_candidate_datatype_list(symbol->prev_il_instruction[0] /*from*/, symbol /*to*/);
+	for (unsigned int i = 1; i < symbol->prev_il_instruction.size(); i++) {
+		intersect_candidate_datatype_list(symbol /*origin, dest.*/, symbol->prev_il_instruction[i] /*with*/);
+	}  
+}
+
+
+
+
 /* A helper function... */
 bool is_ANY_ELEMENTARY_type(symbol_c *type_symbol) {
   if (type_symbol == NULL) {return false;}
@@ -544,16 +558,30 @@
 
 
 
-bool is_type_equal(symbol_c *first_type, symbol_c *second_type)
-{
-    if (first_type == NULL || second_type == NULL) {
-        return false;
-    }
-    if (is_ANY_ELEMENTARY_type(first_type)) {
-        if (typeid(*first_type) == typeid(*second_type))
-            return true;
-    } else   /* ANY_DERIVED */
-        return (first_type == second_type);
-
-    return false;
-}
+bool is_type_equal(symbol_c *first_type, symbol_c *second_type) {
+  if ((NULL == first_type) || (NULL == second_type))
+      return false;
+  if (typeid(* first_type) == typeid(invalid_type_name_c))
+      return false;
+  if (typeid(*second_type) == typeid(invalid_type_name_c))
+      return false;
+    
+  if (is_ANY_ELEMENTARY_type(first_type)) {
+      if (typeid(*first_type) == typeid(*second_type))
+          return true;
+  } else   /* ANY_DERIVED */
+      return (first_type == second_type);
+
+  return false;
+}
+
+
+
+bool is_type_valid(symbol_c *type) {
+  if (NULL == type)
+      return false;
+  if (typeid(*type) == typeid(invalid_type_name_c))
+      return false;
+
+  return true;
+}