absyntax_utils/search_constant_type.cc
changeset 202 da1a8186f86f
parent 194 e18690830555
child 257 90782e241346
--- a/absyntax_utils/search_constant_type.cc	Thu Jul 02 11:26:25 2009 +0100
+++ b/absyntax_utils/search_constant_type.cc	Thu Aug 27 16:06:46 2009 +0100
@@ -51,14 +51,19 @@
 /******************************/
 /* B 1.2.1 - Numeric Literals */
 /******************************/
-void *search_constant_type_c::visit(real_c *symbol) {return (void *)&constant_real_type_name;}
-void *search_constant_type_c::visit(integer_c *symbol) {return (void *)&constant_int_type_name;}
-void *search_constant_type_c::visit(binary_integer_c *symbol) {return (void *)&constant_int_type_name;}
-void *search_constant_type_c::visit(octal_integer_c *symbol) {return (void *)&constant_int_type_name;}
-void *search_constant_type_c::visit(hex_integer_c *symbol) {return (void *)&constant_int_type_name;}
+/* Numeric literals without any explicit type cast have unknown data type, 
+  * so we continue considering them as their own basic data types until
+  * they can be resolved (for example, when using '30+x' where 'x' is a LINT variable, the
+  * numeric literal '30' must then be considered a LINT so the ADD function may be called
+  * with all inputs of the same data type.
+  * If 'x' were a SINT, then the '30' would have to be a SINT too!
+  */
+void *search_constant_type_c::visit(real_c *symbol)           {return (void *)symbol;}
+void *search_constant_type_c::visit(integer_c *symbol)        {return (void *)symbol;}
+void *search_constant_type_c::visit(binary_integer_c *symbol) {return (void *)symbol;}
+void *search_constant_type_c::visit(octal_integer_c *symbol)  {return (void *)symbol;}
+void *search_constant_type_c::visit(hex_integer_c *symbol)    {return (void *)symbol;}
 
-void *search_constant_type_c::visit(numeric_literal_c *symbol)
-  {return (void *)((symbol->type!=NULL)?symbol->type:symbol->value->accept(*this));}
 void *search_constant_type_c::visit(integer_literal_c *symbol)
   {return (void *)((symbol->type!=NULL)?symbol->type:symbol->value->accept(*this));}
 void *search_constant_type_c::visit(real_literal_c *symbol)
@@ -68,6 +73,10 @@
 void *search_constant_type_c::visit(boolean_literal_c *symbol)
   {return (void *)((symbol->type!=NULL)?symbol->type:symbol->value->accept(*this));}
 
+void *search_constant_type_c::visit(boolean_true_c *symbol)   {return (void *)symbol;}
+void *search_constant_type_c::visit(boolean_false_c *symbol)  {return (void *)symbol;}
+
+
 /*******************************/
 /* B.1.2.2   Character Strings */
 /*******************************/
@@ -103,22 +112,27 @@
 lint_type_name_c     search_constant_type_c::lint_type_name;
 dint_type_name_c     search_constant_type_c::dint_type_name;
 date_type_name_c     search_constant_type_c::date_type_name;
-dword_type_name_c     search_constant_type_c::dword_type_name;
-dt_type_name_c     search_constant_type_c::dt_type_name;
-tod_type_name_c     search_constant_type_c::tod_type_name;
-udint_type_name_c     search_constant_type_c::udint_type_name;
+dword_type_name_c    search_constant_type_c::dword_type_name;
+dt_type_name_c       search_constant_type_c::dt_type_name;
+tod_type_name_c      search_constant_type_c::tod_type_name;
+udint_type_name_c    search_constant_type_c::udint_type_name;
 word_type_name_c     search_constant_type_c::word_type_name;
-wstring_type_name_c     search_constant_type_c::wstring_type_name;
-string_type_name_c     search_constant_type_c::string_type_name;
-lword_type_name_c     search_constant_type_c::lword_type_name;
+wstring_type_name_c  search_constant_type_c::wstring_type_name;
+string_type_name_c   search_constant_type_c::string_type_name;
+lword_type_name_c    search_constant_type_c::lword_type_name;
 uint_type_name_c     search_constant_type_c::uint_type_name;
-lreal_type_name_c     search_constant_type_c::lreal_type_name;
+lreal_type_name_c    search_constant_type_c::lreal_type_name;
 byte_type_name_c     search_constant_type_c::byte_type_name;
-usint_type_name_c     search_constant_type_c::usint_type_name;
-ulint_type_name_c     search_constant_type_c::ulint_type_name;
+usint_type_name_c    search_constant_type_c::usint_type_name;
+ulint_type_name_c    search_constant_type_c::ulint_type_name;
 bool_type_name_c     search_constant_type_c::bool_type_name;
 time_type_name_c     search_constant_type_c::time_type_name;
-int_type_name_c     search_constant_type_c::int_type_name;
+int_type_name_c      search_constant_type_c::int_type_name;
 
+/*
 constant_real_type_name_c     search_constant_type_c::constant_real_type_name;
 constant_int_type_name_c      search_constant_type_c::constant_int_type_name;
+*/
+/* temporarily here until we remove the st_code_gen.c and il_code_gen.c files... */
+/* It should then move to search_expression_type_c                               */
+integer_c search_constant_type_c::integer("1");