absyntax_utils/get_sizeof_datatype.cc
changeset 257 90782e241346
parent 202 da1a8186f86f
child 265 4d222f46f8cc
--- a/absyntax_utils/get_sizeof_datatype.cc	Thu Aug 27 16:29:23 2009 +0100
+++ b/absyntax_utils/get_sizeof_datatype.cc	Wed Mar 30 19:53:32 2011 +0100
@@ -147,14 +147,19 @@
   * If 'x' were a SINT, then the '30' would have to be a SINT too!
   */
 
-/* NOTE: all integer and real literal tokens will always be positive (i.e. no leading '-')
+/* NOTE: all integer_c and real_c tokens will always be positive (i.e. no leading '-')
  * due to the way the source code is parsed by iec.flex.
  */
 void *get_sizeof_datatype_c::visit(real_c *symbol) {
   return _encode_int(32);
 }
 
-/* NOTE: all integer and real literal tokens will always be positive (i.e. no leading '-')
+void *get_sizeof_datatype_c::visit(neg_real_c *symbol) {
+  return symbol->exp->accept(*this);
+}
+
+
+/* NOTE: all integer_c and real_c literal tokens will always be positive (i.e. no leading '-')
  * due to the way the source code is parsed by iec.flex.
  */
 void *get_sizeof_datatype_c::visit(integer_c *symbol) {
@@ -224,8 +229,13 @@
 }
 
 
-/* NOTE: all integer and real literal tokens will always be positive (i.e. no leading '-')
- * due to the way the source code is parsed by iec.flex.
+void *get_sizeof_datatype_c::visit(neg_integer_c *symbol) {
+  return symbol->exp->accept(*this);
+}
+
+
+/* NOTE: all binary_integer_c tokens will always be positive (i.e. no leading '-')
+ * due to the syntax definition of IEC 61131-3.
  */
 void *get_sizeof_datatype_c::visit(binary_integer_c *symbol) {
   const char *sval = symbol->value;
@@ -255,8 +265,8 @@
 }
 
 
-/* NOTE: all integer and real literal tokens will always be positive (i.e. no leading '-')
- * due to the way the source code is parsed by iec.flex.
+/* NOTE: all octal_integer_c tokens will always be positive (i.e. no leading '-')
+ * due to the syntax definition of IEC 61131-3.
  */
 void *get_sizeof_datatype_c::visit(octal_integer_c *symbol) {
   const char *sval = symbol->value;
@@ -287,8 +297,8 @@
 }
 
 
-/* NOTE: all integer and real literal tokens will always be positive (i.e. no leading '-')
- * due to the way the source code is parsed by iec.flex.
+/* NOTE: all hex_integer_c tokens will always be positive (i.e. no leading '-')
+ * due to the syntax definition of IEC 61131-3.
  */
 void *get_sizeof_datatype_c::visit(hex_integer_c *symbol) {
   const char *sval = symbol->value;
@@ -327,27 +337,27 @@
 /***********************************/
 /* B 1.3.1 - Elementary Data Types */
 /***********************************/
-// void *get_sizeof_datatype_c::visit(time_type_name_c *symbol)	{return _encode_int(0); }
-void *get_sizeof_datatype_c::visit(bool_type_name_c *symbol)	{return _encode_int(1); }
-void *get_sizeof_datatype_c::visit(sint_type_name_c *symbol)	{return _encode_int(8); }
-void *get_sizeof_datatype_c::visit(int_type_name_c *symbol)	{return _encode_int(16);}
-void *get_sizeof_datatype_c::visit(dint_type_name_c *symbol)	{return _encode_int(32);}
-void *get_sizeof_datatype_c::visit(lint_type_name_c *symbol)	{return _encode_int(64);}
-void *get_sizeof_datatype_c::visit(usint_type_name_c *symbol)	{return _encode_int(8); }
-void *get_sizeof_datatype_c::visit(uint_type_name_c *symbol)	{return _encode_int(16);}
-void *get_sizeof_datatype_c::visit(udint_type_name_c *symbol)	{return _encode_int(32);}
-void *get_sizeof_datatype_c::visit(ulint_type_name_c *symbol)	{return _encode_int(64);}
-void *get_sizeof_datatype_c::visit(real_type_name_c *symbol)	{return _encode_int(32);}
-void *get_sizeof_datatype_c::visit(lreal_type_name_c *symbol)	{return _encode_int(64);}
-// void *get_sizeof_datatype_c::visit(date_type_name_c *symbol)	{return _encode_int(0); }
-// void *get_sizeof_datatype_c::visit(tod_type_name_c *symbol)	{return _encode_int(0); }
-// void *get_sizeof_datatype_c::visit(dt_type_name_c *symbol)	{return _encode_int(0); }
-void *get_sizeof_datatype_c::visit(byte_type_name_c *symbol)	{return _encode_int(8); }
-void *get_sizeof_datatype_c::visit(word_type_name_c *symbol)	{return _encode_int(16);}
-void *get_sizeof_datatype_c::visit(dword_type_name_c *symbol)	{return _encode_int(32);}
-void *get_sizeof_datatype_c::visit(lword_type_name_c *symbol)	{return _encode_int(64);}
-// void *get_sizeof_datatype_c::visit(string_type_name_c *symbol)	{return _encode_int(0); }
-// void *get_sizeof_datatype_c::visit(wstring_type_name_c *symbol)	{return _encode_int(0); }
+// void *get_sizeof_datatype_c::visit(time_type_name_c *symbol) {return _encode_int(0); }
+void *get_sizeof_datatype_c::visit(bool_type_name_c *symbol)    {return _encode_int(1); }
+void *get_sizeof_datatype_c::visit(sint_type_name_c *symbol)    {return _encode_int(8); }
+void *get_sizeof_datatype_c::visit(int_type_name_c *symbol)     {return _encode_int(16);}
+void *get_sizeof_datatype_c::visit(dint_type_name_c *symbol)    {return _encode_int(32);}
+void *get_sizeof_datatype_c::visit(lint_type_name_c *symbol)    {return _encode_int(64);}
+void *get_sizeof_datatype_c::visit(usint_type_name_c *symbol)   {return _encode_int(8); }
+void *get_sizeof_datatype_c::visit(uint_type_name_c *symbol)    {return _encode_int(16);}
+void *get_sizeof_datatype_c::visit(udint_type_name_c *symbol)   {return _encode_int(32);}
+void *get_sizeof_datatype_c::visit(ulint_type_name_c *symbol)   {return _encode_int(64);}
+void *get_sizeof_datatype_c::visit(real_type_name_c *symbol)    {return _encode_int(32);}
+void *get_sizeof_datatype_c::visit(lreal_type_name_c *symbol)   {return _encode_int(64);}
+// void *get_sizeof_datatype_c::visit(date_type_name_c *symbol) {return _encode_int(0); }
+// void *get_sizeof_datatype_c::visit(tod_type_name_c *symbol)  {return _encode_int(0); }
+// void *get_sizeof_datatype_c::visit(dt_type_name_c *symbol)   {return _encode_int(0); }
+void *get_sizeof_datatype_c::visit(byte_type_name_c *symbol)    {return _encode_int(8); }
+void *get_sizeof_datatype_c::visit(word_type_name_c *symbol)    {return _encode_int(16);}
+void *get_sizeof_datatype_c::visit(dword_type_name_c *symbol)   {return _encode_int(32);}
+void *get_sizeof_datatype_c::visit(lword_type_name_c *symbol)   {return _encode_int(64);}
+// void *get_sizeof_datatype_c::visit(string_type_name_c *symbol)    {return _encode_int(0); }
+// void *get_sizeof_datatype_c::visit(wstring_type_name_c *symbol)   {return _encode_int(0); }
 /******************************************************/
 /* Extensions to the base standard as defined in      */
 /* "Safety Software Technical Specification,          */
@@ -355,7 +365,28 @@
 /*  Version 1.0 – Official Release"                   */
 /* by PLCopen - Technical Committee 5 - 2006-01-31    */
 /******************************************************/
-void *get_sizeof_datatype_c::visit(safebool_type_name_c *symbol)	{return _encode_int(1);}
+//     void *get_sizeof_datatype_c::visit(safetime_type_name_c *symbol); {return _encode_int(0); }
+void *get_sizeof_datatype_c::visit(safebool_type_name_c *symbol)         {return _encode_int(1); }
+void *get_sizeof_datatype_c::visit(safesint_type_name_c *symbol)         {return _encode_int(8); }
+void *get_sizeof_datatype_c::visit(safeint_type_name_c *symbol)          {return _encode_int(16);}
+void *get_sizeof_datatype_c::visit(safedint_type_name_c *symbol)         {return _encode_int(32);}
+void *get_sizeof_datatype_c::visit(safelint_type_name_c *symbol)         {return _encode_int(64);}
+void *get_sizeof_datatype_c::visit(safeusint_type_name_c *symbol)        {return _encode_int(8); }
+void *get_sizeof_datatype_c::visit(safeuint_type_name_c *symbol)         {return _encode_int(16);}
+void *get_sizeof_datatype_c::visit(safeudint_type_name_c *symbol)        {return _encode_int(32);}
+void *get_sizeof_datatype_c::visit(safeulint_type_name_c *symbol)        {return _encode_int(64);}
+void *get_sizeof_datatype_c::visit(safereal_type_name_c *symbol)         {return _encode_int(32);}
+void *get_sizeof_datatype_c::visit(safelreal_type_name_c *symbol)        {return _encode_int(64);}
+//     void *get_sizeof_datatype_c::visit(safedate_type_name_c *symbol); {return _encode_int(0); }
+//     void *get_sizeof_datatype_c::visit(safetod_type_name_c *symbol);  {return _encode_int(0); }
+//     void *get_sizeof_datatype_c::visit(safedt_type_name_c *symbol);   {return _encode_int(0); }
+void *get_sizeof_datatype_c::visit(safebyte_type_name_c *symbol)         {return _encode_int(8); }
+void *get_sizeof_datatype_c::visit(safeword_type_name_c *symbol)         {return _encode_int(16);}
+void *get_sizeof_datatype_c::visit(safedword_type_name_c *symbol)        {return _encode_int(32);}
+void *get_sizeof_datatype_c::visit(safelword_type_name_c *symbol)        {return _encode_int(64);}
+//     void *get_sizeof_datatype_c::visit(safestring_type_name_c *symbol);  {return _encode_int(0); }
+//     void *get_sizeof_datatype_c::visit(safewstring_type_name_c *symbol); {return _encode_int(0); }
+
 
 /********************************/
 /* B 1.3.3 - Derived data types */