449 /* B 1.2.1 - Numeric Literals */ |
449 /* B 1.2.1 - Numeric Literals */ |
450 /******************************/ |
450 /******************************/ |
451 #define sizeoftype(symbol) get_sizeof_datatype_c::getsize(symbol) |
451 #define sizeoftype(symbol) get_sizeof_datatype_c::getsize(symbol) |
452 |
452 |
453 void *fill_candidate_datatypes_c::handle_any_integer(symbol_c *symbol) { |
453 void *fill_candidate_datatypes_c::handle_any_integer(symbol_c *symbol) { |
454 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::bool_type_name, &search_constant_type_c::safebool_type_name); |
454 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::bool_type_name, &get_datatype_info_c::safebool_type_name); |
455 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::byte_type_name, &search_constant_type_c::safebyte_type_name); |
455 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::byte_type_name, &get_datatype_info_c::safebyte_type_name); |
456 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::word_type_name, &search_constant_type_c::safeword_type_name); |
456 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::word_type_name, &get_datatype_info_c::safeword_type_name); |
457 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::dword_type_name, &search_constant_type_c::safedword_type_name); |
457 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::dword_type_name, &get_datatype_info_c::safedword_type_name); |
458 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::lword_type_name, &search_constant_type_c::safelword_type_name); |
458 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::lword_type_name, &get_datatype_info_c::safelword_type_name); |
459 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::sint_type_name, &search_constant_type_c::safesint_type_name); |
459 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::sint_type_name, &get_datatype_info_c::safesint_type_name); |
460 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::int_type_name, &search_constant_type_c::safeint_type_name); |
460 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::int_type_name, &get_datatype_info_c::safeint_type_name); |
461 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::dint_type_name, &search_constant_type_c::safedint_type_name); |
461 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::dint_type_name, &get_datatype_info_c::safedint_type_name); |
462 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::lint_type_name, &search_constant_type_c::safelint_type_name); |
462 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::lint_type_name, &get_datatype_info_c::safelint_type_name); |
463 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::usint_type_name, &search_constant_type_c::safeusint_type_name); |
463 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::usint_type_name, &get_datatype_info_c::safeusint_type_name); |
464 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::uint_type_name, &search_constant_type_c::safeuint_type_name); |
464 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::uint_type_name, &get_datatype_info_c::safeuint_type_name); |
465 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::udint_type_name, &search_constant_type_c::safeudint_type_name); |
465 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::udint_type_name, &get_datatype_info_c::safeudint_type_name); |
466 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::ulint_type_name, &search_constant_type_c::safeulint_type_name); |
466 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::ulint_type_name, &get_datatype_info_c::safeulint_type_name); |
467 remove_incompatible_datatypes(symbol); |
467 remove_incompatible_datatypes(symbol); |
468 if (debug) std::cout << "ANY_INT [" << symbol->candidate_datatypes.size()<< "]" << std::endl; |
468 if (debug) std::cout << "ANY_INT [" << symbol->candidate_datatypes.size()<< "]" << std::endl; |
469 return NULL; |
469 return NULL; |
470 } |
470 } |
471 |
471 |
472 |
472 |
473 |
473 |
474 void *fill_candidate_datatypes_c::handle_any_real(symbol_c *symbol) { |
474 void *fill_candidate_datatypes_c::handle_any_real(symbol_c *symbol) { |
475 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::real_type_name, &search_constant_type_c::safereal_type_name); |
475 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::real_type_name, &get_datatype_info_c::safereal_type_name); |
476 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::lreal_type_name, &search_constant_type_c::safelreal_type_name); |
476 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::lreal_type_name, &get_datatype_info_c::safelreal_type_name); |
477 remove_incompatible_datatypes(symbol); |
477 remove_incompatible_datatypes(symbol); |
478 if (debug) std::cout << "ANY_REAL [" << symbol->candidate_datatypes.size() << "]" << std::endl; |
478 if (debug) std::cout << "ANY_REAL [" << symbol->candidate_datatypes.size() << "]" << std::endl; |
479 return NULL; |
479 return NULL; |
480 } |
480 } |
481 |
481 |
497 |
497 |
498 |
498 |
499 |
499 |
500 void *fill_candidate_datatypes_c::visit(neg_integer_c *symbol) { |
500 void *fill_candidate_datatypes_c::visit(neg_integer_c *symbol) { |
501 /* Please read the comment in neg_expression_c method, as it also applies here */ |
501 /* Please read the comment in neg_expression_c method, as it also applies here */ |
502 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::int_type_name, &search_constant_type_c::safeint_type_name); |
502 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::int_type_name, &get_datatype_info_c::safeint_type_name); |
503 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::sint_type_name, &search_constant_type_c::safesint_type_name); |
503 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::sint_type_name, &get_datatype_info_c::safesint_type_name); |
504 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::dint_type_name, &search_constant_type_c::safedint_type_name); |
504 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::dint_type_name, &get_datatype_info_c::safedint_type_name); |
505 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::lint_type_name, &search_constant_type_c::safelint_type_name); |
505 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::lint_type_name, &get_datatype_info_c::safelint_type_name); |
506 remove_incompatible_datatypes(symbol); |
506 remove_incompatible_datatypes(symbol); |
507 if (debug) std::cout << "neg ANY_INT [" << symbol->candidate_datatypes.size() << "]" << std::endl; |
507 if (debug) std::cout << "neg ANY_INT [" << symbol->candidate_datatypes.size() << "]" << std::endl; |
508 return NULL; |
508 return NULL; |
509 } |
509 } |
510 |
510 |
537 return NULL; |
537 return NULL; |
538 } |
538 } |
539 |
539 |
540 |
540 |
541 void *fill_candidate_datatypes_c::visit(boolean_true_c *symbol) { |
541 void *fill_candidate_datatypes_c::visit(boolean_true_c *symbol) { |
542 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::bool_type_name, &search_constant_type_c::safebool_type_name); |
542 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::bool_type_name, &get_datatype_info_c::safebool_type_name); |
543 return NULL; |
543 return NULL; |
544 } |
544 } |
545 |
545 |
546 void *fill_candidate_datatypes_c::visit(boolean_false_c *symbol) { |
546 void *fill_candidate_datatypes_c::visit(boolean_false_c *symbol) { |
547 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::bool_type_name, &search_constant_type_c::safebool_type_name); |
547 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::bool_type_name, &get_datatype_info_c::safebool_type_name); |
548 return NULL; |
548 return NULL; |
549 } |
549 } |
550 |
550 |
551 /*******************************/ |
551 /*******************************/ |
552 /* B.1.2.2 Character Strings */ |
552 /* B.1.2.2 Character Strings */ |
553 /*******************************/ |
553 /*******************************/ |
554 void *fill_candidate_datatypes_c::visit(double_byte_character_string_c *symbol) { |
554 void *fill_candidate_datatypes_c::visit(double_byte_character_string_c *symbol) { |
555 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::wstring_type_name, &search_constant_type_c::safewstring_type_name); |
555 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::wstring_type_name, &get_datatype_info_c::safewstring_type_name); |
556 return NULL; |
556 return NULL; |
557 } |
557 } |
558 |
558 |
559 void *fill_candidate_datatypes_c::visit(single_byte_character_string_c *symbol) { |
559 void *fill_candidate_datatypes_c::visit(single_byte_character_string_c *symbol) { |
560 add_2datatypes_to_candidate_list(symbol, &search_constant_type_c::string_type_name, &search_constant_type_c::safestring_type_name); |
560 add_2datatypes_to_candidate_list(symbol, &get_datatype_info_c::string_type_name, &get_datatype_info_c::safestring_type_name); |
561 return NULL; |
561 return NULL; |
562 } |
562 } |
563 |
563 |
564 /***************************/ |
564 /***************************/ |
565 /* B 1.2.3 - Time Literals */ |
565 /* B 1.2.3 - Time Literals */ |
669 /* if (symbol->value == NULL) ERROR; |
669 /* if (symbol->value == NULL) ERROR; |
670 * if (symbol->value[0] == '\0') ERROR; |
670 * if (symbol->value[0] == '\0') ERROR; |
671 * if (symbol->value[1] == '\0') ERROR; |
671 * if (symbol->value[1] == '\0') ERROR; |
672 */ |
672 */ |
673 switch (symbol->value[2]) { |
673 switch (symbol->value[2]) { |
674 case 'x': case 'X': /* bit - 1 bit */ add_datatype_to_candidate_list(symbol, &search_constant_type_c::bool_type_name); break; |
674 case 'x': case 'X': /* bit - 1 bit */ add_datatype_to_candidate_list(symbol, &get_datatype_info_c::bool_type_name); break; |
675 case 'b': case 'B': /* byte - 8 bits */ add_datatype_to_candidate_list(symbol, &search_constant_type_c::byte_type_name); break; |
675 case 'b': case 'B': /* byte - 8 bits */ add_datatype_to_candidate_list(symbol, &get_datatype_info_c::byte_type_name); break; |
676 case 'w': case 'W': /* word - 16 bits */ add_datatype_to_candidate_list(symbol, &search_constant_type_c::word_type_name); break; |
676 case 'w': case 'W': /* word - 16 bits */ add_datatype_to_candidate_list(symbol, &get_datatype_info_c::word_type_name); break; |
677 case 'd': case 'D': /* dword - 32 bits */ add_datatype_to_candidate_list(symbol, &search_constant_type_c::dword_type_name); break; |
677 case 'd': case 'D': /* dword - 32 bits */ add_datatype_to_candidate_list(symbol, &get_datatype_info_c::dword_type_name); break; |
678 case 'l': case 'L': /* lword - 64 bits */ add_datatype_to_candidate_list(symbol, &search_constant_type_c::lword_type_name); break; |
678 case 'l': case 'L': /* lword - 64 bits */ add_datatype_to_candidate_list(symbol, &get_datatype_info_c::lword_type_name); break; |
679 /* if none of the above, then the empty string was used <=> boolean */ |
679 /* if none of the above, then the empty string was used <=> boolean */ |
680 default: add_datatype_to_candidate_list(symbol, &search_constant_type_c::bool_type_name); break; |
680 default: add_datatype_to_candidate_list(symbol, &get_datatype_info_c::bool_type_name); break; |
681 } |
681 } |
682 return NULL; |
682 return NULL; |
683 } |
683 } |
684 |
684 |
685 /*************************************/ |
685 /*************************************/ |
774 |
774 |
775 symbol->direct_variable->accept(*this); |
775 symbol->direct_variable->accept(*this); |
776 for (unsigned int i = 0; i < symbol->direct_variable->candidate_datatypes.size(); i++) { |
776 for (unsigned int i = 0; i < symbol->direct_variable->candidate_datatypes.size(); i++) { |
777 switch (get_sizeof_datatype_c::getsize(symbol->direct_variable->candidate_datatypes[i])) { |
777 switch (get_sizeof_datatype_c::getsize(symbol->direct_variable->candidate_datatypes[i])) { |
778 case 1: /* bit - 1 bit */ |
778 case 1: /* bit - 1 bit */ |
779 add_datatype_to_candidate_list(symbol, &search_constant_type_c::bool_type_name); |
779 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::bool_type_name); |
780 add_datatype_to_candidate_list(symbol, &search_constant_type_c::safebool_type_name); |
780 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::safebool_type_name); |
781 break; |
781 break; |
782 case 8: /* byte - 8 bits */ |
782 case 8: /* byte - 8 bits */ |
783 add_datatype_to_candidate_list(symbol, &search_constant_type_c::byte_type_name); |
783 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::byte_type_name); |
784 add_datatype_to_candidate_list(symbol, &search_constant_type_c::safebyte_type_name); |
784 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::safebyte_type_name); |
785 add_datatype_to_candidate_list(symbol, &search_constant_type_c::sint_type_name); |
785 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::sint_type_name); |
786 add_datatype_to_candidate_list(symbol, &search_constant_type_c::safesint_type_name); |
786 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::safesint_type_name); |
787 add_datatype_to_candidate_list(symbol, &search_constant_type_c::usint_type_name); |
787 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::usint_type_name); |
788 add_datatype_to_candidate_list(symbol, &search_constant_type_c::safeusint_type_name); |
788 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::safeusint_type_name); |
789 break; |
789 break; |
790 case 16: /* word - 16 bits */ |
790 case 16: /* word - 16 bits */ |
791 add_datatype_to_candidate_list(symbol, &search_constant_type_c::word_type_name); |
791 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::word_type_name); |
792 add_datatype_to_candidate_list(symbol, &search_constant_type_c::safeword_type_name); |
792 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::safeword_type_name); |
793 add_datatype_to_candidate_list(symbol, &search_constant_type_c::int_type_name); |
793 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::int_type_name); |
794 add_datatype_to_candidate_list(symbol, &search_constant_type_c::safeint_type_name); |
794 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::safeint_type_name); |
795 add_datatype_to_candidate_list(symbol, &search_constant_type_c::uint_type_name); |
795 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::uint_type_name); |
796 add_datatype_to_candidate_list(symbol, &search_constant_type_c::safeuint_type_name); |
796 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::safeuint_type_name); |
797 break; |
797 break; |
798 case 32: /* dword - 32 bits */ |
798 case 32: /* dword - 32 bits */ |
799 add_datatype_to_candidate_list(symbol, &search_constant_type_c::dword_type_name); |
799 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::dword_type_name); |
800 add_datatype_to_candidate_list(symbol, &search_constant_type_c::safedword_type_name); |
800 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::safedword_type_name); |
801 add_datatype_to_candidate_list(symbol, &search_constant_type_c::dint_type_name); |
801 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::dint_type_name); |
802 add_datatype_to_candidate_list(symbol, &search_constant_type_c::safedint_type_name); |
802 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::safedint_type_name); |
803 add_datatype_to_candidate_list(symbol, &search_constant_type_c::udint_type_name); |
803 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::udint_type_name); |
804 add_datatype_to_candidate_list(symbol, &search_constant_type_c::safeudint_type_name); |
804 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::safeudint_type_name); |
805 add_datatype_to_candidate_list(symbol, &search_constant_type_c::real_type_name); |
805 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::real_type_name); |
806 add_datatype_to_candidate_list(symbol, &search_constant_type_c::safereal_type_name); |
806 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::safereal_type_name); |
807 break; |
807 break; |
808 case 64: /* lword - 64 bits */ |
808 case 64: /* lword - 64 bits */ |
809 add_datatype_to_candidate_list(symbol, &search_constant_type_c::lword_type_name); |
809 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::lword_type_name); |
810 add_datatype_to_candidate_list(symbol, &search_constant_type_c::safelword_type_name); |
810 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::safelword_type_name); |
811 add_datatype_to_candidate_list(symbol, &search_constant_type_c::lint_type_name); |
811 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::lint_type_name); |
812 add_datatype_to_candidate_list(symbol, &search_constant_type_c::safelint_type_name); |
812 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::safelint_type_name); |
813 add_datatype_to_candidate_list(symbol, &search_constant_type_c::ulint_type_name); |
813 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::ulint_type_name); |
814 add_datatype_to_candidate_list(symbol, &search_constant_type_c::safeulint_type_name); |
814 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::safeulint_type_name); |
815 add_datatype_to_candidate_list(symbol, &search_constant_type_c::lreal_type_name); |
815 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::lreal_type_name); |
816 add_datatype_to_candidate_list(symbol, &search_constant_type_c::safelreal_type_name); |
816 add_datatype_to_candidate_list(symbol, &get_datatype_info_c::safelreal_type_name); |
817 break; |
817 break; |
818 default: /* if none of the above, then no valid datatype allowed... */ |
818 default: /* if none of the above, then no valid datatype allowed... */ |
819 break; |
819 break; |
820 } /* switch() */ |
820 } /* switch() */ |
821 } /* for */ |
821 } /* for */ |