diff -r 8ffa211b7f9a -r 90782e241346 absyntax_utils/get_sizeof_datatype.cc --- 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 */