diff -r 050d31dd7c74 -r c0453b7f99df absyntax_utils/search_type_code.c --- a/absyntax_utils/search_type_code.c Mon Apr 04 19:18:22 2011 +0200 +++ b/absyntax_utils/search_type_code.c Tue Apr 05 15:14:19 2011 +0200 @@ -1,31 +1,20 @@ /* - * matiec - a compiler for the programming languages defined in IEC 61131-3 + * Copyright (C) 2007-2011: Edouard TISSERANT and Laurent BESSARD * - * Copyright (C) 2008 Edouard TISSERANT + * See COPYING and COPYING.LESSER files for copyright details. * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * - * This code is made available on the understanding that it will not be - * used in safety-critical situations without a full and competent review. - */ - -/* - * An IEC 61131-3 compiler. - * - * Based on the - * FINAL DRAFT - IEC 61131-3, 2nd Ed. (2001-12-10) + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . * */ @@ -14103,9 +14092,9 @@ break; /**** - *MUL - */ - case function_mul : + *ADD_TIME + */ + case function_add_time : { symbol_c *last_type_symbol = NULL; @@ -14123,7 +14112,7 @@ last_type_symbol = last_type_symbol && IN1_type_symbol && search_expression_type->is_same_type(IN1_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN1_type_symbol, last_type_symbol) : IN1_type_symbol ; } - if(IN1_type_symbol == NULL || search_expression_type->is_num_type(IN1_type_symbol)) + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) { { @@ -14140,10 +14129,10 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) { - symbol_c * return_type_symbol = last_type_symbol; + symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; return return_type_symbol; } @@ -14154,7 +14143,35 @@ } - if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + + ERROR; + } + + }/*function_add_time*/ + break; + +/**** + *ADD_TOD_TIME + */ + case function_add_tod_time : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_param_name = (symbol_c *)(new identifier_c("IN1")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN1_param_value = function_call_param_iterator.search_f(IN1_param_name); + symbol_c *IN1_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN1_param_value == NULL) + IN1_param_value = function_call_param_iterator.next_nf(); + if (IN1_param_value != NULL) { + IN1_type_symbol = search_expression_type->get_type(IN1_param_value); + last_type_symbol = last_type_symbol && IN1_type_symbol && search_expression_type->is_same_type(IN1_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN1_type_symbol, last_type_symbol) : IN1_type_symbol ; + } + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol)) { { @@ -14171,10 +14188,10 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) { - symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name; return return_type_symbol; } @@ -14189,13 +14206,13 @@ ERROR; } - }/*function_mul*/ - break; - -/**** - *SUB - */ - case function_sub : + }/*function_add_tod_time*/ + break; + +/**** + *ADD_DT_TIME + */ + case function_add_dt_time : { symbol_c *last_type_symbol = NULL; @@ -14213,7 +14230,7 @@ last_type_symbol = last_type_symbol && IN1_type_symbol && search_expression_type->is_same_type(IN1_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN1_type_symbol, last_type_symbol) : IN1_type_symbol ; } - if(IN1_type_symbol == NULL || search_expression_type->is_num_type(IN1_type_symbol)) + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol)) { { @@ -14230,10 +14247,10 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) { - symbol_c * return_type_symbol = last_type_symbol; + symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name; return return_type_symbol; } @@ -14244,7 +14261,35 @@ } - if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol)) + + ERROR; + } + + }/*function_add_dt_time*/ + break; + +/**** + *MUL + */ + case function_mul : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_param_name = (symbol_c *)(new identifier_c("IN1")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN1_param_value = function_call_param_iterator.search_f(IN1_param_name); + symbol_c *IN1_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN1_param_value == NULL) + IN1_param_value = function_call_param_iterator.next_nf(); + if (IN1_param_value != NULL) { + IN1_type_symbol = search_expression_type->get_type(IN1_param_value); + last_type_symbol = last_type_symbol && IN1_type_symbol && search_expression_type->is_same_type(IN1_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN1_type_symbol, last_type_symbol) : IN1_type_symbol ; + } + + if(IN1_type_symbol == NULL || search_expression_type->is_num_type(IN1_type_symbol)) { { @@ -14261,10 +14306,10 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) { - symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + symbol_c * return_type_symbol = last_type_symbol; return return_type_symbol; } @@ -14275,7 +14320,7 @@ } - if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol)) + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) { { @@ -14292,7 +14337,7 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) { symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; @@ -14300,21 +14345,41 @@ } - if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) - { - - symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name; - return return_type_symbol; - - } - ERROR; } } - if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol)) + + ERROR; + } + + }/*function_mul*/ + break; + +/**** + *MULTIME + */ + case function_multime : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_param_name = (symbol_c *)(new identifier_c("IN1")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN1_param_value = function_call_param_iterator.search_f(IN1_param_name); + symbol_c *IN1_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN1_param_value == NULL) + IN1_param_value = function_call_param_iterator.next_nf(); + if (IN1_param_value != NULL) { + IN1_type_symbol = search_expression_type->get_type(IN1_param_value); + last_type_symbol = last_type_symbol && IN1_type_symbol && search_expression_type->is_same_type(IN1_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN1_type_symbol, last_type_symbol) : IN1_type_symbol ; + } + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) { { @@ -14331,7 +14396,7 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) { symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; @@ -14339,21 +14404,41 @@ } - if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) - { - - symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name; - return return_type_symbol; - - } - ERROR; } } - if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + + ERROR; + } + + }/*function_multime*/ + break; + +/**** + *SUB + */ + case function_sub : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_param_name = (symbol_c *)(new identifier_c("IN1")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN1_param_value = function_call_param_iterator.search_f(IN1_param_name); + symbol_c *IN1_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN1_param_value == NULL) + IN1_param_value = function_call_param_iterator.next_nf(); + if (IN1_param_value != NULL) { + IN1_type_symbol = search_expression_type->get_type(IN1_param_value); + last_type_symbol = last_type_symbol && IN1_type_symbol && search_expression_type->is_same_type(IN1_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN1_type_symbol, last_type_symbol) : IN1_type_symbol ; + } + + if(IN1_type_symbol == NULL || search_expression_type->is_num_type(IN1_type_symbol)) { { @@ -14370,10 +14455,10 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) { - symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + symbol_c * return_type_symbol = last_type_symbol; return return_type_symbol; } @@ -14384,35 +14469,7 @@ } - - ERROR; - } - - }/*function_sub*/ - break; - -/**** - *DIV - */ - case function_div : - { - symbol_c *last_type_symbol = NULL; - - { - symbol_c *IN1_param_name = (symbol_c *)(new identifier_c("IN1")); - /* Get the value from a foo( = ) style call */ - symbol_c *IN1_param_value = function_call_param_iterator.search_f(IN1_param_name); - symbol_c *IN1_type_symbol = NULL; - - /* Get the value from a foo() style call */ - if (IN1_param_value == NULL) - IN1_param_value = function_call_param_iterator.next_nf(); - if (IN1_param_value != NULL) { - IN1_type_symbol = search_expression_type->get_type(IN1_param_value); - last_type_symbol = last_type_symbol && IN1_type_symbol && search_expression_type->is_same_type(IN1_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN1_type_symbol, last_type_symbol) : IN1_type_symbol ; - } - - if(IN1_type_symbol == NULL || search_expression_type->is_num_type(IN1_type_symbol)) + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol)) { { @@ -14429,10 +14486,10 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol)) { - symbol_c * return_type_symbol = last_type_symbol; + symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; return return_type_symbol; } @@ -14443,7 +14500,7 @@ } - if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol)) { { @@ -14460,7 +14517,7 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol)) { symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; @@ -14468,12 +14525,483 @@ } + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name; + return return_type_symbol; + + } + ERROR; } } + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol)) + { + + { + symbol_c *IN2_param_name = (symbol_c *)(new identifier_c("IN2")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN2_param_value = function_call_param_iterator.search_f(IN2_param_name); + symbol_c *IN2_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN2_param_value == NULL) + IN2_param_value = function_call_param_iterator.next_nf(); + if (IN2_param_value != NULL) { + IN2_type_symbol = search_expression_type->get_type(IN2_param_value); + last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; + } + + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + return return_type_symbol; + + } + + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name; + return return_type_symbol; + + } + + + ERROR; + } + + } + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + { + + { + symbol_c *IN2_param_name = (symbol_c *)(new identifier_c("IN2")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN2_param_value = function_call_param_iterator.search_f(IN2_param_name); + symbol_c *IN2_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN2_param_value == NULL) + IN2_param_value = function_call_param_iterator.next_nf(); + if (IN2_param_value != NULL) { + IN2_type_symbol = search_expression_type->get_type(IN2_param_value); + last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; + } + + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + return return_type_symbol; + + } + + + ERROR; + } + + } + + + ERROR; + } + + }/*function_sub*/ + break; + +/**** + *SUB_TIME + */ + case function_sub_time : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_param_name = (symbol_c *)(new identifier_c("IN1")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN1_param_value = function_call_param_iterator.search_f(IN1_param_name); + symbol_c *IN1_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN1_param_value == NULL) + IN1_param_value = function_call_param_iterator.next_nf(); + if (IN1_param_value != NULL) { + IN1_type_symbol = search_expression_type->get_type(IN1_param_value); + last_type_symbol = last_type_symbol && IN1_type_symbol && search_expression_type->is_same_type(IN1_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN1_type_symbol, last_type_symbol) : IN1_type_symbol ; + } + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + { + + { + symbol_c *IN2_param_name = (symbol_c *)(new identifier_c("IN2")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN2_param_value = function_call_param_iterator.search_f(IN2_param_name); + symbol_c *IN2_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN2_param_value == NULL) + IN2_param_value = function_call_param_iterator.next_nf(); + if (IN2_param_value != NULL) { + IN2_type_symbol = search_expression_type->get_type(IN2_param_value); + last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; + } + + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + return return_type_symbol; + + } + + + ERROR; + } + + } + + + ERROR; + } + + }/*function_sub_time*/ + break; + +/**** + *SUB_DATE_DATE + */ + case function_sub_date_date : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_param_name = (symbol_c *)(new identifier_c("IN1")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN1_param_value = function_call_param_iterator.search_f(IN1_param_name); + symbol_c *IN1_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN1_param_value == NULL) + IN1_param_value = function_call_param_iterator.next_nf(); + if (IN1_param_value != NULL) { + IN1_type_symbol = search_expression_type->get_type(IN1_param_value); + last_type_symbol = last_type_symbol && IN1_type_symbol && search_expression_type->is_same_type(IN1_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN1_type_symbol, last_type_symbol) : IN1_type_symbol ; + } + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol)) + { + + { + symbol_c *IN2_param_name = (symbol_c *)(new identifier_c("IN2")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN2_param_value = function_call_param_iterator.search_f(IN2_param_name); + symbol_c *IN2_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN2_param_value == NULL) + IN2_param_value = function_call_param_iterator.next_nf(); + if (IN2_param_value != NULL) { + IN2_type_symbol = search_expression_type->get_type(IN2_param_value); + last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; + } + + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + return return_type_symbol; + + } + + + ERROR; + } + + } + + + ERROR; + } + + }/*function_sub_date_date*/ + break; + +/**** + *SUB_TOD_TIME + */ + case function_sub_tod_time : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_param_name = (symbol_c *)(new identifier_c("IN1")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN1_param_value = function_call_param_iterator.search_f(IN1_param_name); + symbol_c *IN1_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN1_param_value == NULL) + IN1_param_value = function_call_param_iterator.next_nf(); + if (IN1_param_value != NULL) { + IN1_type_symbol = search_expression_type->get_type(IN1_param_value); + last_type_symbol = last_type_symbol && IN1_type_symbol && search_expression_type->is_same_type(IN1_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN1_type_symbol, last_type_symbol) : IN1_type_symbol ; + } + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol)) + { + + { + symbol_c *IN2_param_name = (symbol_c *)(new identifier_c("IN2")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN2_param_value = function_call_param_iterator.search_f(IN2_param_name); + symbol_c *IN2_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN2_param_value == NULL) + IN2_param_value = function_call_param_iterator.next_nf(); + if (IN2_param_value != NULL) { + IN2_type_symbol = search_expression_type->get_type(IN2_param_value); + last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; + } + + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name; + return return_type_symbol; + + } + + + ERROR; + } + + } + + + ERROR; + } + + }/*function_sub_tod_time*/ + break; + +/**** + *SUB_TOD_TOD + */ + case function_sub_tod_tod : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_param_name = (symbol_c *)(new identifier_c("IN1")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN1_param_value = function_call_param_iterator.search_f(IN1_param_name); + symbol_c *IN1_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN1_param_value == NULL) + IN1_param_value = function_call_param_iterator.next_nf(); + if (IN1_param_value != NULL) { + IN1_type_symbol = search_expression_type->get_type(IN1_param_value); + last_type_symbol = last_type_symbol && IN1_type_symbol && search_expression_type->is_same_type(IN1_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN1_type_symbol, last_type_symbol) : IN1_type_symbol ; + } + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol)) + { + + { + symbol_c *IN2_param_name = (symbol_c *)(new identifier_c("IN2")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN2_param_value = function_call_param_iterator.search_f(IN2_param_name); + symbol_c *IN2_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN2_param_value == NULL) + IN2_param_value = function_call_param_iterator.next_nf(); + if (IN2_param_value != NULL) { + IN2_type_symbol = search_expression_type->get_type(IN2_param_value); + last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; + } + + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + return return_type_symbol; + + } + + + ERROR; + } + + } + + + ERROR; + } + + }/*function_sub_tod_tod*/ + break; + +/**** + *SUB_DT_TIME + */ + case function_sub_dt_time : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_param_name = (symbol_c *)(new identifier_c("IN1")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN1_param_value = function_call_param_iterator.search_f(IN1_param_name); + symbol_c *IN1_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN1_param_value == NULL) + IN1_param_value = function_call_param_iterator.next_nf(); + if (IN1_param_value != NULL) { + IN1_type_symbol = search_expression_type->get_type(IN1_param_value); + last_type_symbol = last_type_symbol && IN1_type_symbol && search_expression_type->is_same_type(IN1_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN1_type_symbol, last_type_symbol) : IN1_type_symbol ; + } + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol)) + { + + { + symbol_c *IN2_param_name = (symbol_c *)(new identifier_c("IN2")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN2_param_value = function_call_param_iterator.search_f(IN2_param_name); + symbol_c *IN2_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN2_param_value == NULL) + IN2_param_value = function_call_param_iterator.next_nf(); + if (IN2_param_value != NULL) { + IN2_type_symbol = search_expression_type->get_type(IN2_param_value); + last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; + } + + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + return return_type_symbol; + + } + + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name; + return return_type_symbol; + + } + + + ERROR; + } + + } + + + ERROR; + } + + }/*function_sub_dt_time*/ + break; + +/**** + *DIV + */ + case function_div : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_param_name = (symbol_c *)(new identifier_c("IN1")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN1_param_value = function_call_param_iterator.search_f(IN1_param_name); + symbol_c *IN1_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN1_param_value == NULL) + IN1_param_value = function_call_param_iterator.next_nf(); + if (IN1_param_value != NULL) { + IN1_type_symbol = search_expression_type->get_type(IN1_param_value); + last_type_symbol = last_type_symbol && IN1_type_symbol && search_expression_type->is_same_type(IN1_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN1_type_symbol, last_type_symbol) : IN1_type_symbol ; + } + + if(IN1_type_symbol == NULL || search_expression_type->is_num_type(IN1_type_symbol)) + { + + { + symbol_c *IN2_param_name = (symbol_c *)(new identifier_c("IN2")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN2_param_value = function_call_param_iterator.search_f(IN2_param_name); + symbol_c *IN2_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN2_param_value == NULL) + IN2_param_value = function_call_param_iterator.next_nf(); + if (IN2_param_value != NULL) { + IN2_type_symbol = search_expression_type->get_type(IN2_param_value); + last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; + } + + if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) + { + + symbol_c * return_type_symbol = last_type_symbol; + return return_type_symbol; + + } + + + ERROR; + } + + } + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + { + + { + symbol_c *IN2_param_name = (symbol_c *)(new identifier_c("IN2")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN2_param_value = function_call_param_iterator.search_f(IN2_param_name); + symbol_c *IN2_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN2_param_value == NULL) + IN2_param_value = function_call_param_iterator.next_nf(); + if (IN2_param_value != NULL) { + IN2_type_symbol = search_expression_type->get_type(IN2_param_value); + last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; + } + + if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + return return_type_symbol; + + } + + + ERROR; + } + + } + ERROR; } @@ -14482,6 +15010,65 @@ break; /**** + *DIVTIME + */ + case function_divtime : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_param_name = (symbol_c *)(new identifier_c("IN1")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN1_param_value = function_call_param_iterator.search_f(IN1_param_name); + symbol_c *IN1_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN1_param_value == NULL) + IN1_param_value = function_call_param_iterator.next_nf(); + if (IN1_param_value != NULL) { + IN1_type_symbol = search_expression_type->get_type(IN1_param_value); + last_type_symbol = last_type_symbol && IN1_type_symbol && search_expression_type->is_same_type(IN1_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN1_type_symbol, last_type_symbol) : IN1_type_symbol ; + } + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + { + + { + symbol_c *IN2_param_name = (symbol_c *)(new identifier_c("IN2")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN2_param_value = function_call_param_iterator.search_f(IN2_param_name); + symbol_c *IN2_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN2_param_value == NULL) + IN2_param_value = function_call_param_iterator.next_nf(); + if (IN2_param_value != NULL) { + IN2_type_symbol = search_expression_type->get_type(IN2_param_value); + last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; + } + + if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + return return_type_symbol; + + } + + + ERROR; + } + + } + + + ERROR; + } + + }/*function_divtime*/ + break; + +/**** *MOD */ case function_mod : @@ -16059,7 +16646,7 @@ last_type_symbol = last_type_symbol && IN1_type_symbol && search_expression_type->is_same_type(IN1_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN1_type_symbol, last_type_symbol) : IN1_type_symbol ; } - if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol)) + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol)) { { @@ -16076,10 +16663,10 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol)) { - symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name; + symbol_c * return_type_symbol = &search_constant_type_c::string_type_name; return return_type_symbol; } @@ -16090,7 +16677,35 @@ } - if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol)) + + ERROR; + } + + }/*function_concat*/ + break; + +/**** + *CONCAT_DAT_TOD + */ + case function_concat_dat_tod : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_param_name = (symbol_c *)(new identifier_c("IN1")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN1_param_value = function_call_param_iterator.search_f(IN1_param_name); + symbol_c *IN1_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN1_param_value == NULL) + IN1_param_value = function_call_param_iterator.next_nf(); + if (IN1_param_value != NULL) { + IN1_type_symbol = search_expression_type->get_type(IN1_param_value); + last_type_symbol = last_type_symbol && IN1_type_symbol && search_expression_type->is_same_type(IN1_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN1_type_symbol, last_type_symbol) : IN1_type_symbol ; + } + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol)) { { @@ -16107,10 +16722,10 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol)) { - symbol_c * return_type_symbol = &search_constant_type_c::string_type_name; + symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name; return return_type_symbol; } @@ -16125,7 +16740,7 @@ ERROR; } - }/*function_concat*/ + }/*function_concat_dat_tod*/ break; /**** @@ -26649,9 +27264,9 @@ break; /**** - *MUL - */ - case function_mul : + *ADD_TIME + */ + case function_add_time : { symbol_c *last_type_symbol = NULL; @@ -26659,7 +27274,7 @@ symbol_c *IN1_type_symbol = param_data_type; last_type_symbol = param_data_type; - if(IN1_type_symbol == NULL || search_expression_type->is_num_type(IN1_type_symbol)) + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) { { @@ -26676,10 +27291,10 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) { - symbol_c * return_type_symbol = last_type_symbol; + symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; return return_type_symbol; } @@ -26690,7 +27305,25 @@ } - if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + + ERROR; + } + + }/*function_add_time*/ + break; + +/**** + *ADD_TOD_TIME + */ + case function_add_tod_time : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_type_symbol = param_data_type; + last_type_symbol = param_data_type; + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol)) { { @@ -26707,10 +27340,10 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) { - symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name; return return_type_symbol; } @@ -26725,13 +27358,13 @@ ERROR; } - }/*function_mul*/ - break; - -/**** - *SUB - */ - case function_sub : + }/*function_add_tod_time*/ + break; + +/**** + *ADD_DT_TIME + */ + case function_add_dt_time : { symbol_c *last_type_symbol = NULL; @@ -26739,7 +27372,7 @@ symbol_c *IN1_type_symbol = param_data_type; last_type_symbol = param_data_type; - if(IN1_type_symbol == NULL || search_expression_type->is_num_type(IN1_type_symbol)) + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol)) { { @@ -26756,10 +27389,10 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) { - symbol_c * return_type_symbol = last_type_symbol; + symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name; return return_type_symbol; } @@ -26770,7 +27403,25 @@ } - if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol)) + + ERROR; + } + + }/*function_add_dt_time*/ + break; + +/**** + *MUL + */ + case function_mul : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_type_symbol = param_data_type; + last_type_symbol = param_data_type; + + if(IN1_type_symbol == NULL || search_expression_type->is_num_type(IN1_type_symbol)) { { @@ -26787,10 +27438,10 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) { - symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + symbol_c * return_type_symbol = last_type_symbol; return return_type_symbol; } @@ -26801,7 +27452,7 @@ } - if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol)) + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) { { @@ -26818,7 +27469,7 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) { symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; @@ -26826,21 +27477,31 @@ } - if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) - { - - symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name; - return return_type_symbol; - - } - ERROR; } } - if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol)) + + ERROR; + } + + }/*function_mul*/ + break; + +/**** + *MULTIME + */ + case function_multime : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_type_symbol = param_data_type; + last_type_symbol = param_data_type; + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) { { @@ -26857,7 +27518,7 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) { symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; @@ -26865,21 +27526,31 @@ } - if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) - { - - symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name; - return return_type_symbol; - - } - ERROR; } } - if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + + ERROR; + } + + }/*function_multime*/ + break; + +/**** + *SUB + */ + case function_sub : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_type_symbol = param_data_type; + last_type_symbol = param_data_type; + + if(IN1_type_symbol == NULL || search_expression_type->is_num_type(IN1_type_symbol)) { { @@ -26896,10 +27567,10 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) { - symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + symbol_c * return_type_symbol = last_type_symbol; return return_type_symbol; } @@ -26910,25 +27581,7 @@ } - - ERROR; - } - - }/*function_sub*/ - break; - -/**** - *DIV - */ - case function_div : - { - symbol_c *last_type_symbol = NULL; - - { - symbol_c *IN1_type_symbol = param_data_type; - last_type_symbol = param_data_type; - - if(IN1_type_symbol == NULL || search_expression_type->is_num_type(IN1_type_symbol)) + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol)) { { @@ -26945,10 +27598,10 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol)) { - symbol_c * return_type_symbol = last_type_symbol; + symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; return return_type_symbol; } @@ -26959,7 +27612,7 @@ } - if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol)) { { @@ -26976,7 +27629,7 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol)) { symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; @@ -26984,12 +27637,423 @@ } + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name; + return return_type_symbol; + + } + ERROR; } } + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol)) + { + + { + symbol_c *IN2_param_name = (symbol_c *)(new identifier_c("IN2")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN2_param_value = function_call_param_iterator.search_f(IN2_param_name); + symbol_c *IN2_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN2_param_value == NULL) + IN2_param_value = function_call_param_iterator.next_nf(); + if (IN2_param_value != NULL) { + IN2_type_symbol = search_expression_type->get_type(IN2_param_value); + last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; + } + + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + return return_type_symbol; + + } + + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name; + return return_type_symbol; + + } + + + ERROR; + } + + } + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + { + + { + symbol_c *IN2_param_name = (symbol_c *)(new identifier_c("IN2")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN2_param_value = function_call_param_iterator.search_f(IN2_param_name); + symbol_c *IN2_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN2_param_value == NULL) + IN2_param_value = function_call_param_iterator.next_nf(); + if (IN2_param_value != NULL) { + IN2_type_symbol = search_expression_type->get_type(IN2_param_value); + last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; + } + + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + return return_type_symbol; + + } + + + ERROR; + } + + } + + + ERROR; + } + + }/*function_sub*/ + break; + +/**** + *SUB_TIME + */ + case function_sub_time : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_type_symbol = param_data_type; + last_type_symbol = param_data_type; + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + { + + { + symbol_c *IN2_param_name = (symbol_c *)(new identifier_c("IN2")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN2_param_value = function_call_param_iterator.search_f(IN2_param_name); + symbol_c *IN2_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN2_param_value == NULL) + IN2_param_value = function_call_param_iterator.next_nf(); + if (IN2_param_value != NULL) { + IN2_type_symbol = search_expression_type->get_type(IN2_param_value); + last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; + } + + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + return return_type_symbol; + + } + + + ERROR; + } + + } + + + ERROR; + } + + }/*function_sub_time*/ + break; + +/**** + *SUB_DATE_DATE + */ + case function_sub_date_date : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_type_symbol = param_data_type; + last_type_symbol = param_data_type; + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol)) + { + + { + symbol_c *IN2_param_name = (symbol_c *)(new identifier_c("IN2")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN2_param_value = function_call_param_iterator.search_f(IN2_param_name); + symbol_c *IN2_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN2_param_value == NULL) + IN2_param_value = function_call_param_iterator.next_nf(); + if (IN2_param_value != NULL) { + IN2_type_symbol = search_expression_type->get_type(IN2_param_value); + last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; + } + + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + return return_type_symbol; + + } + + + ERROR; + } + + } + + + ERROR; + } + + }/*function_sub_date_date*/ + break; + +/**** + *SUB_TOD_TIME + */ + case function_sub_tod_time : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_type_symbol = param_data_type; + last_type_symbol = param_data_type; + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol)) + { + + { + symbol_c *IN2_param_name = (symbol_c *)(new identifier_c("IN2")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN2_param_value = function_call_param_iterator.search_f(IN2_param_name); + symbol_c *IN2_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN2_param_value == NULL) + IN2_param_value = function_call_param_iterator.next_nf(); + if (IN2_param_value != NULL) { + IN2_type_symbol = search_expression_type->get_type(IN2_param_value); + last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; + } + + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name; + return return_type_symbol; + + } + + + ERROR; + } + + } + + + ERROR; + } + + }/*function_sub_tod_time*/ + break; + +/**** + *SUB_TOD_TOD + */ + case function_sub_tod_tod : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_type_symbol = param_data_type; + last_type_symbol = param_data_type; + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol)) + { + + { + symbol_c *IN2_param_name = (symbol_c *)(new identifier_c("IN2")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN2_param_value = function_call_param_iterator.search_f(IN2_param_name); + symbol_c *IN2_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN2_param_value == NULL) + IN2_param_value = function_call_param_iterator.next_nf(); + if (IN2_param_value != NULL) { + IN2_type_symbol = search_expression_type->get_type(IN2_param_value); + last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; + } + + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + return return_type_symbol; + + } + + + ERROR; + } + + } + + + ERROR; + } + + }/*function_sub_tod_tod*/ + break; + +/**** + *SUB_DT_TIME + */ + case function_sub_dt_time : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_type_symbol = param_data_type; + last_type_symbol = param_data_type; + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol)) + { + + { + symbol_c *IN2_param_name = (symbol_c *)(new identifier_c("IN2")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN2_param_value = function_call_param_iterator.search_f(IN2_param_name); + symbol_c *IN2_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN2_param_value == NULL) + IN2_param_value = function_call_param_iterator.next_nf(); + if (IN2_param_value != NULL) { + IN2_type_symbol = search_expression_type->get_type(IN2_param_value); + last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; + } + + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + return return_type_symbol; + + } + + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name; + return return_type_symbol; + + } + + + ERROR; + } + + } + + + ERROR; + } + + }/*function_sub_dt_time*/ + break; + +/**** + *DIV + */ + case function_div : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_type_symbol = param_data_type; + last_type_symbol = param_data_type; + + if(IN1_type_symbol == NULL || search_expression_type->is_num_type(IN1_type_symbol)) + { + + { + symbol_c *IN2_param_name = (symbol_c *)(new identifier_c("IN2")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN2_param_value = function_call_param_iterator.search_f(IN2_param_name); + symbol_c *IN2_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN2_param_value == NULL) + IN2_param_value = function_call_param_iterator.next_nf(); + if (IN2_param_value != NULL) { + IN2_type_symbol = search_expression_type->get_type(IN2_param_value); + last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; + } + + if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) + { + + symbol_c * return_type_symbol = last_type_symbol; + return return_type_symbol; + + } + + + ERROR; + } + + } + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + { + + { + symbol_c *IN2_param_name = (symbol_c *)(new identifier_c("IN2")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN2_param_value = function_call_param_iterator.search_f(IN2_param_name); + symbol_c *IN2_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN2_param_value == NULL) + IN2_param_value = function_call_param_iterator.next_nf(); + if (IN2_param_value != NULL) { + IN2_type_symbol = search_expression_type->get_type(IN2_param_value); + last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; + } + + if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + return return_type_symbol; + + } + + + ERROR; + } + + } + ERROR; } @@ -26998,6 +28062,55 @@ break; /**** + *DIVTIME + */ + case function_divtime : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_type_symbol = param_data_type; + last_type_symbol = param_data_type; + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol)) + { + + { + symbol_c *IN2_param_name = (symbol_c *)(new identifier_c("IN2")); + /* Get the value from a foo( = ) style call */ + symbol_c *IN2_param_value = function_call_param_iterator.search_f(IN2_param_name); + symbol_c *IN2_type_symbol = NULL; + + /* Get the value from a foo() style call */ + if (IN2_param_value == NULL) + IN2_param_value = function_call_param_iterator.next_nf(); + if (IN2_param_value != NULL) { + IN2_type_symbol = search_expression_type->get_type(IN2_param_value); + last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; + } + + if(IN2_type_symbol == NULL || search_expression_type->is_num_type(IN2_type_symbol)) + { + + symbol_c * return_type_symbol = &search_constant_type_c::time_type_name; + return return_type_symbol; + + } + + + ERROR; + } + + } + + + ERROR; + } + + }/*function_divtime*/ + break; + +/**** *MOD */ case function_mod : @@ -28305,7 +29418,7 @@ symbol_c *IN1_type_symbol = param_data_type; last_type_symbol = param_data_type; - if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol)) + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol)) { { @@ -28322,10 +29435,10 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol)) { - symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name; + symbol_c * return_type_symbol = &search_constant_type_c::string_type_name; return return_type_symbol; } @@ -28336,7 +29449,25 @@ } - if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol)) + + ERROR; + } + + }/*function_concat*/ + break; + +/**** + *CONCAT_DAT_TOD + */ + case function_concat_dat_tod : + { + symbol_c *last_type_symbol = NULL; + + { + symbol_c *IN1_type_symbol = param_data_type; + last_type_symbol = param_data_type; + + if(IN1_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol)) { { @@ -28353,10 +29484,10 @@ last_type_symbol = last_type_symbol && IN2_type_symbol && search_expression_type->is_same_type(IN2_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN2_type_symbol, last_type_symbol) : IN2_type_symbol ; } - if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol)) + if(IN2_type_symbol == NULL || search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol)) { - symbol_c * return_type_symbol = &search_constant_type_c::string_type_name; + symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name; return return_type_symbol; } @@ -28371,7 +29502,7 @@ ERROR; } - }/*function_concat*/ + }/*function_concat_dat_tod*/ break; /****