--- 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 */