stage4/generate_c/st_code_gen.c
author lbessard
Wed, 24 Oct 2007 17:39:51 +0200
changeset 70 e1f0ebd2d9ec
child 149 05ca171a3d57
permissions -rw-r--r--
Change generate_cc to generate_c
70
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
     1
/*
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
     2
 * (c) 2003 Mario de Sousa
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
     3
 *
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
     4
 * Offered to the public under the terms of the GNU General Public License
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
     5
 * as published by the Free Software Foundation; either version 2 of the
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
     6
 * License, or (at your option) any later version.
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
     7
 *
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
     8
 * This program is distributed in the hope that it will be useful, but
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
     9
 * WITHOUT ANY WARRANTY; without even the implied warranty of
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    10
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    11
 * Public License for more details.
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    12
 *
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    13
 * This code is made available on the understanding that it will not be
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    14
 * used in safety-critical situations without a full and competent review.
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    15
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    16
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    17
/*
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    18
 * An IEC 61131-3 IL and ST compiler.
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    19
 *
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    20
 * Based on the
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    21
 * FINAL DRAFT - IEC 61131-3, 2nd Ed. (2001-12-10)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    22
 *
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    23
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    24
 
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    25
 
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    26
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    27
 * IEC 61131-3 standard function lib
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    28
 * generated code, do not edit by hand
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    29
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    30
switch(current_function_type){
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    31
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    32
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    33
 *BOOL_TO_SINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    34
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    35
    case function_bool_to_sint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    36
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    37
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    38
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    39
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    40
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    41
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    42
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    43
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    44
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    45
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    46
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    47
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    48
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    49
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    50
            if(search_expression_type->is_same_type(&search_constant_type_c::bool_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    51
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    52
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    53
                symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    54
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    55
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    56
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    57
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    58
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    59
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    60
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    61
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    62
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    63
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    64
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    65
    }/*function_bool_to_sint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    66
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    67
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    68
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    69
 *BOOL_TO_INT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    70
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    71
    case function_bool_to_int :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    72
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    73
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    74
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    75
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    76
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    77
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    78
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    79
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    80
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    81
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    82
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    83
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    84
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    85
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    86
            if(search_expression_type->is_same_type(&search_constant_type_c::bool_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    87
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    88
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    89
                symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    90
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    91
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    92
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    93
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    94
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    95
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    96
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    97
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    98
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
    99
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   100
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   101
    }/*function_bool_to_int*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   102
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   103
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   104
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   105
 *BOOL_TO_DINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   106
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   107
    case function_bool_to_dint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   108
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   109
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   110
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   111
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   112
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   113
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   114
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   115
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   116
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   117
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   118
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   119
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   120
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   121
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   122
            if(search_expression_type->is_same_type(&search_constant_type_c::bool_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   123
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   124
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   125
                symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   126
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   127
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   128
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   129
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   130
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   131
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   132
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   133
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   134
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   135
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   136
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   137
    }/*function_bool_to_dint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   138
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   139
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   140
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   141
 *BOOL_TO_LINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   142
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   143
    case function_bool_to_lint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   144
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   145
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   146
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   147
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   148
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   149
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   150
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   151
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   152
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   153
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   154
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   155
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   156
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   157
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   158
            if(search_expression_type->is_same_type(&search_constant_type_c::bool_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   159
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   160
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   161
                symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   162
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   163
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   164
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   165
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   166
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   167
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   168
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   169
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   170
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   171
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   172
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   173
    }/*function_bool_to_lint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   174
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   175
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   176
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   177
 *BOOL_TO_USINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   178
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   179
    case function_bool_to_usint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   180
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   181
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   182
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   183
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   184
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   185
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   186
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   187
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   188
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   189
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   190
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   191
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   192
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   193
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   194
            if(search_expression_type->is_same_type(&search_constant_type_c::bool_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   195
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   196
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   197
                symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   198
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   199
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   200
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   201
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   202
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   203
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   204
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   205
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   206
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   207
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   208
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   209
    }/*function_bool_to_usint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   210
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   211
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   212
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   213
 *BOOL_TO_UINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   214
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   215
    case function_bool_to_uint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   216
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   217
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   218
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   219
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   220
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   221
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   222
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   223
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   224
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   225
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   226
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   227
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   228
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   229
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   230
            if(search_expression_type->is_same_type(&search_constant_type_c::bool_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   231
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   232
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   233
                symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   234
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   235
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   236
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   237
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   238
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   239
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   240
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   241
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   242
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   243
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   244
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   245
    }/*function_bool_to_uint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   246
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   247
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   248
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   249
 *BOOL_TO_UDINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   250
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   251
    case function_bool_to_udint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   252
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   253
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   254
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   255
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   256
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   257
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   258
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   259
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   260
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   261
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   262
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   263
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   264
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   265
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   266
            if(search_expression_type->is_same_type(&search_constant_type_c::bool_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   267
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   268
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   269
                symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   270
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   271
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   272
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   273
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   274
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   275
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   276
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   277
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   278
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   279
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   280
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   281
    }/*function_bool_to_udint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   282
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   283
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   284
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   285
 *BOOL_TO_ULINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   286
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   287
    case function_bool_to_ulint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   288
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   289
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   290
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   291
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   292
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   293
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   294
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   295
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   296
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   297
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   298
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   299
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   300
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   301
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   302
            if(search_expression_type->is_same_type(&search_constant_type_c::bool_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   303
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   304
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   305
                symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   306
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   307
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   308
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   309
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   310
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   311
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   312
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   313
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   314
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   315
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   316
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   317
    }/*function_bool_to_ulint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   318
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   319
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   320
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   321
 *BOOL_TO_REAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   322
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   323
    case function_bool_to_real :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   324
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   325
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   326
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   327
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   328
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   329
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   330
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   331
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   332
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   333
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   334
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   335
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   336
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   337
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   338
            if(search_expression_type->is_same_type(&search_constant_type_c::bool_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   339
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   340
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   341
                symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   342
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   343
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   344
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   345
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   346
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   347
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   348
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   349
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   350
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   351
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   352
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   353
    }/*function_bool_to_real*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   354
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   355
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   356
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   357
 *BOOL_TO_LREAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   358
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   359
    case function_bool_to_lreal :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   360
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   361
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   362
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   363
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   364
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   365
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   366
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   367
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   368
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   369
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   370
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   371
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   372
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   373
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   374
            if(search_expression_type->is_same_type(&search_constant_type_c::bool_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   375
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   376
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   377
                symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   378
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   379
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   380
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   381
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   382
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   383
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   384
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   385
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   386
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   387
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   388
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   389
    }/*function_bool_to_lreal*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   390
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   391
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   392
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   393
 *BOOL_TO_TIME
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   394
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   395
    case function_bool_to_time :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   396
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   397
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   398
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   399
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   400
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   401
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   402
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   403
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   404
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   405
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   406
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   407
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   408
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   409
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   410
            if(search_expression_type->is_same_type(&search_constant_type_c::bool_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   411
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   412
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   413
                symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   414
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   415
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   416
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   417
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   418
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   419
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   420
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   421
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   422
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   423
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   424
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   425
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   426
    }/*function_bool_to_time*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   427
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   428
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   429
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   430
 *BOOL_TO_DATE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   431
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   432
    case function_bool_to_date :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   433
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   434
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   435
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   436
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   437
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   438
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   439
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   440
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   441
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   442
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   443
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   444
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   445
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   446
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   447
            if(search_expression_type->is_same_type(&search_constant_type_c::bool_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   448
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   449
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   450
                symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   451
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   452
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   453
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   454
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   455
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   456
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   457
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   458
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   459
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   460
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   461
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   462
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   463
    }/*function_bool_to_date*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   464
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   465
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   466
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   467
 *BOOL_TO_TOD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   468
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   469
    case function_bool_to_tod :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   470
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   471
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   472
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   473
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   474
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   475
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   476
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   477
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   478
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   479
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   480
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   481
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   482
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   483
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   484
            if(search_expression_type->is_same_type(&search_constant_type_c::bool_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   485
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   486
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   487
                symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   488
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   489
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   490
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   491
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   492
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   493
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   494
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   495
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   496
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   497
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   498
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   499
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   500
    }/*function_bool_to_tod*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   501
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   502
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   503
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   504
 *BOOL_TO_DT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   505
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   506
    case function_bool_to_dt :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   507
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   508
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   509
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   510
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   511
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   512
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   513
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   514
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   515
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   516
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   517
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   518
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   519
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   520
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   521
            if(search_expression_type->is_same_type(&search_constant_type_c::bool_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   522
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   523
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   524
                symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   525
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   526
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   527
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   528
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   529
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   530
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   531
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   532
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   533
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   534
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   535
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   536
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   537
    }/*function_bool_to_dt*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   538
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   539
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   540
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   541
 *BOOL_TO_STRING
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   542
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   543
    case function_bool_to_string :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   544
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   545
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   546
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   547
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   548
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   549
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   550
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   551
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   552
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   553
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   554
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   555
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   556
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   557
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   558
            if(search_expression_type->is_same_type(&search_constant_type_c::bool_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   559
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   560
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   561
                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   562
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   563
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   564
                s4o.print(")__bool_to_string(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   565
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   566
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   567
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   568
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   569
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   570
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   571
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   572
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   573
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   574
    }/*function_bool_to_string*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   575
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   576
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   577
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   578
 *BOOL_TO_BYTE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   579
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   580
    case function_bool_to_byte :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   581
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   582
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   583
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   584
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   585
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   586
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   587
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   588
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   589
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   590
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   591
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   592
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   593
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   594
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   595
            if(search_expression_type->is_same_type(&search_constant_type_c::bool_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   596
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   597
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   598
                symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   599
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   600
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   601
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   602
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   603
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   604
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   605
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   606
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   607
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   608
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   609
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   610
    }/*function_bool_to_byte*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   611
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   612
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   613
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   614
 *BOOL_TO_WORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   615
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   616
    case function_bool_to_word :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   617
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   618
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   619
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   620
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   621
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   622
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   623
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   624
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   625
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   626
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   627
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   628
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   629
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   630
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   631
            if(search_expression_type->is_same_type(&search_constant_type_c::bool_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   632
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   633
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   634
                symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   635
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   636
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   637
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   638
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   639
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   640
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   641
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   642
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   643
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   644
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   645
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   646
    }/*function_bool_to_word*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   647
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   648
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   649
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   650
 *BOOL_TO_DWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   651
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   652
    case function_bool_to_dword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   653
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   654
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   655
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   656
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   657
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   658
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   659
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   660
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   661
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   662
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   663
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   664
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   665
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   666
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   667
            if(search_expression_type->is_same_type(&search_constant_type_c::bool_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   668
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   669
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   670
                symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   671
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   672
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   673
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   674
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   675
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   676
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   677
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   678
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   679
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   680
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   681
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   682
    }/*function_bool_to_dword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   683
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   684
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   685
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   686
 *BOOL_TO_LWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   687
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   688
    case function_bool_to_lword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   689
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   690
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   691
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   692
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   693
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   694
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   695
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   696
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   697
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   698
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   699
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   700
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   701
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   702
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   703
            if(search_expression_type->is_same_type(&search_constant_type_c::bool_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   704
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   705
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   706
                symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   707
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   708
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   709
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   710
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   711
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   712
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   713
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   714
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   715
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   716
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   717
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   718
    }/*function_bool_to_lword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   719
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   720
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   721
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   722
 *SINT_TO_BOOL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   723
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   724
    case function_sint_to_bool :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   725
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   726
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   727
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   728
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   729
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   730
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   731
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   732
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   733
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   734
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   735
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   736
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   737
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   738
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   739
            if(search_expression_type->is_same_type(&search_constant_type_c::sint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   740
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   741
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   742
                symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   743
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   744
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   745
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   746
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   747
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   748
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   749
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   750
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   751
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   752
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   753
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   754
    }/*function_sint_to_bool*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   755
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   756
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   757
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   758
 *SINT_TO_INT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   759
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   760
    case function_sint_to_int :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   761
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   762
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   763
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   764
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   765
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   766
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   767
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   768
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   769
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   770
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   771
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   772
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   773
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   774
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   775
            if(search_expression_type->is_same_type(&search_constant_type_c::sint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   776
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   777
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   778
                symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   779
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   780
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   781
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   782
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   783
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   784
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   785
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   786
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   787
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   788
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   789
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   790
    }/*function_sint_to_int*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   791
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   792
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   793
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   794
 *SINT_TO_DINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   795
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   796
    case function_sint_to_dint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   797
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   798
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   799
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   800
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   801
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   802
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   803
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   804
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   805
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   806
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   807
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   808
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   809
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   810
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   811
            if(search_expression_type->is_same_type(&search_constant_type_c::sint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   812
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   813
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   814
                symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   815
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   816
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   817
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   818
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   819
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   820
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   821
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   822
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   823
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   824
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   825
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   826
    }/*function_sint_to_dint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   827
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   828
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   829
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   830
 *SINT_TO_LINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   831
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   832
    case function_sint_to_lint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   833
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   834
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   835
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   836
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   837
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   838
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   839
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   840
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   841
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   842
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   843
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   844
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   845
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   846
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   847
            if(search_expression_type->is_same_type(&search_constant_type_c::sint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   848
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   849
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   850
                symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   851
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   852
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   853
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   854
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   855
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   856
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   857
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   858
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   859
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   860
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   861
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   862
    }/*function_sint_to_lint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   863
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   864
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   865
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   866
 *SINT_TO_USINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   867
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   868
    case function_sint_to_usint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   869
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   870
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   871
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   872
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   873
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   874
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   875
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   876
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   877
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   878
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   879
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   880
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   881
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   882
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   883
            if(search_expression_type->is_same_type(&search_constant_type_c::sint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   884
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   885
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   886
                symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   887
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   888
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   889
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   890
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   891
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   892
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   893
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   894
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   895
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   896
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   897
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   898
    }/*function_sint_to_usint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   899
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   900
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   901
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   902
 *SINT_TO_UINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   903
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   904
    case function_sint_to_uint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   905
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   906
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   907
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   908
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   909
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   910
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   911
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   912
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   913
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   914
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   915
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   916
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   917
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   918
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   919
            if(search_expression_type->is_same_type(&search_constant_type_c::sint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   920
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   921
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   922
                symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   923
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   924
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   925
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   926
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   927
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   928
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   929
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   930
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   931
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   932
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   933
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   934
    }/*function_sint_to_uint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   935
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   936
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   937
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   938
 *SINT_TO_UDINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   939
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   940
    case function_sint_to_udint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   941
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   942
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   943
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   944
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   945
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   946
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   947
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   948
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   949
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   950
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   951
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   952
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   953
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   954
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   955
            if(search_expression_type->is_same_type(&search_constant_type_c::sint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   956
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   957
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   958
                symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   959
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   960
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   961
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   962
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   963
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   964
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   965
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   966
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   967
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   968
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   969
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   970
    }/*function_sint_to_udint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   971
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   972
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   973
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   974
 *SINT_TO_ULINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   975
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   976
    case function_sint_to_ulint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   977
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   978
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   979
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   980
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   981
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   982
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   983
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   984
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   985
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   986
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   987
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   988
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   989
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   990
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   991
            if(search_expression_type->is_same_type(&search_constant_type_c::sint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   992
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   993
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   994
                symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   995
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   996
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   997
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   998
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
   999
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1000
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1001
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1002
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1003
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1004
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1005
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1006
    }/*function_sint_to_ulint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1007
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1008
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1009
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1010
 *SINT_TO_REAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1011
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1012
    case function_sint_to_real :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1013
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1014
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1015
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1016
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1017
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1018
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1019
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1020
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1021
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1022
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1023
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1024
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1025
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1026
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1027
            if(search_expression_type->is_same_type(&search_constant_type_c::sint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1028
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1029
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1030
                symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1031
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1032
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1033
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1034
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1035
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1036
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1037
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1038
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1039
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1040
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1041
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1042
    }/*function_sint_to_real*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1043
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1044
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1045
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1046
 *SINT_TO_LREAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1047
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1048
    case function_sint_to_lreal :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1049
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1050
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1051
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1052
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1053
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1054
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1055
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1056
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1057
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1058
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1059
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1060
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1061
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1062
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1063
            if(search_expression_type->is_same_type(&search_constant_type_c::sint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1064
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1065
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1066
                symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1067
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1068
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1069
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1070
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1071
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1072
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1073
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1074
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1075
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1076
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1077
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1078
    }/*function_sint_to_lreal*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1079
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1080
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1081
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1082
 *SINT_TO_TIME
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1083
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1084
    case function_sint_to_time :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1085
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1086
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1087
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1088
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1089
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1090
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1091
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1092
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1093
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1094
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1095
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1096
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1097
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1098
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1099
            if(search_expression_type->is_same_type(&search_constant_type_c::sint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1100
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1101
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1102
                symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1103
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1104
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1105
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1106
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1107
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1108
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1109
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1110
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1111
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1112
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1113
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1114
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1115
    }/*function_sint_to_time*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1116
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1117
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1118
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1119
 *SINT_TO_DATE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1120
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1121
    case function_sint_to_date :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1122
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1123
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1124
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1125
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1126
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1127
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1128
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1129
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1130
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1131
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1132
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1133
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1134
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1135
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1136
            if(search_expression_type->is_same_type(&search_constant_type_c::sint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1137
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1138
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1139
                symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1140
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1141
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1142
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1143
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1144
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1145
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1146
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1147
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1148
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1149
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1150
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1151
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1152
    }/*function_sint_to_date*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1153
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1154
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1155
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1156
 *SINT_TO_TOD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1157
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1158
    case function_sint_to_tod :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1159
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1160
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1161
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1162
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1163
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1164
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1165
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1166
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1167
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1168
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1169
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1170
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1171
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1172
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1173
            if(search_expression_type->is_same_type(&search_constant_type_c::sint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1174
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1175
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1176
                symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1177
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1178
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1179
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1180
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1181
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1182
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1183
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1184
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1185
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1186
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1187
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1188
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1189
    }/*function_sint_to_tod*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1190
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1191
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1192
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1193
 *SINT_TO_DT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1194
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1195
    case function_sint_to_dt :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1196
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1197
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1198
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1199
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1200
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1201
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1202
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1203
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1204
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1205
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1206
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1207
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1208
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1209
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1210
            if(search_expression_type->is_same_type(&search_constant_type_c::sint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1211
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1212
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1213
                symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1214
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1215
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1216
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1217
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1218
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1219
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1220
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1221
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1222
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1223
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1224
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1225
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1226
    }/*function_sint_to_dt*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1227
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1228
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1229
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1230
 *SINT_TO_STRING
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1231
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1232
    case function_sint_to_string :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1233
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1234
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1235
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1236
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1237
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1238
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1239
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1240
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1241
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1242
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1243
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1244
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1245
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1246
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1247
            if(search_expression_type->is_same_type(&search_constant_type_c::sint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1248
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1249
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1250
                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1251
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1252
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1253
                s4o.print(")__sint_to_string(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1254
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1255
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1256
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1257
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1258
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1259
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1260
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1261
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1262
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1263
    }/*function_sint_to_string*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1264
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1265
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1266
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1267
 *SINT_TO_BYTE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1268
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1269
    case function_sint_to_byte :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1270
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1271
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1272
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1273
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1274
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1275
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1276
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1277
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1278
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1279
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1280
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1281
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1282
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1283
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1284
            if(search_expression_type->is_same_type(&search_constant_type_c::sint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1285
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1286
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1287
                symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1288
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1289
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1290
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1291
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1292
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1293
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1294
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1295
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1296
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1297
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1298
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1299
    }/*function_sint_to_byte*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1300
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1301
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1302
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1303
 *SINT_TO_WORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1304
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1305
    case function_sint_to_word :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1306
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1307
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1308
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1309
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1310
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1311
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1312
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1313
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1314
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1315
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1316
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1317
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1318
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1319
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1320
            if(search_expression_type->is_same_type(&search_constant_type_c::sint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1321
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1322
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1323
                symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1324
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1325
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1326
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1327
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1328
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1329
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1330
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1331
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1332
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1333
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1334
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1335
    }/*function_sint_to_word*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1336
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1337
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1338
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1339
 *SINT_TO_DWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1340
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1341
    case function_sint_to_dword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1342
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1343
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1344
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1345
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1346
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1347
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1348
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1349
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1350
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1351
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1352
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1353
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1354
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1355
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1356
            if(search_expression_type->is_same_type(&search_constant_type_c::sint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1357
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1358
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1359
                symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1360
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1361
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1362
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1363
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1364
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1365
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1366
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1367
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1368
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1369
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1370
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1371
    }/*function_sint_to_dword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1372
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1373
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1374
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1375
 *SINT_TO_LWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1376
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1377
    case function_sint_to_lword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1378
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1379
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1380
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1381
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1382
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1383
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1384
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1385
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1386
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1387
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1388
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1389
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1390
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1391
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1392
            if(search_expression_type->is_same_type(&search_constant_type_c::sint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1393
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1394
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1395
                symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1396
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1397
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1398
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1399
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1400
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1401
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1402
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1403
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1404
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1405
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1406
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1407
    }/*function_sint_to_lword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1408
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1409
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1410
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1411
 *INT_TO_BOOL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1412
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1413
    case function_int_to_bool :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1414
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1415
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1416
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1417
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1418
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1419
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1420
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1421
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1422
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1423
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1424
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1425
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1426
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1427
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1428
            if(search_expression_type->is_same_type(&search_constant_type_c::int_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1429
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1430
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1431
                symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1432
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1433
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1434
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1435
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1436
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1437
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1438
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1439
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1440
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1441
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1442
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1443
    }/*function_int_to_bool*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1444
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1445
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1446
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1447
 *INT_TO_SINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1448
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1449
    case function_int_to_sint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1450
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1451
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1452
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1453
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1454
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1455
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1456
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1457
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1458
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1459
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1460
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1461
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1462
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1463
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1464
            if(search_expression_type->is_same_type(&search_constant_type_c::int_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1465
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1466
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1467
                symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1468
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1469
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1470
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1471
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1472
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1473
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1474
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1475
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1476
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1477
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1478
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1479
    }/*function_int_to_sint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1480
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1481
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1482
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1483
 *INT_TO_DINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1484
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1485
    case function_int_to_dint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1486
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1487
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1488
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1489
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1490
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1491
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1492
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1493
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1494
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1495
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1496
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1497
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1498
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1499
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1500
            if(search_expression_type->is_same_type(&search_constant_type_c::int_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1501
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1502
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1503
                symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1504
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1505
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1506
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1507
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1508
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1509
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1510
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1511
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1512
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1513
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1514
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1515
    }/*function_int_to_dint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1516
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1517
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1518
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1519
 *INT_TO_LINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1520
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1521
    case function_int_to_lint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1522
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1523
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1524
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1525
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1526
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1527
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1528
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1529
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1530
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1531
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1532
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1533
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1534
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1535
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1536
            if(search_expression_type->is_same_type(&search_constant_type_c::int_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1537
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1538
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1539
                symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1540
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1541
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1542
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1543
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1544
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1545
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1546
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1547
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1548
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1549
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1550
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1551
    }/*function_int_to_lint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1552
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1553
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1554
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1555
 *INT_TO_USINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1556
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1557
    case function_int_to_usint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1558
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1559
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1560
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1561
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1562
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1563
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1564
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1565
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1566
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1567
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1568
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1569
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1570
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1571
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1572
            if(search_expression_type->is_same_type(&search_constant_type_c::int_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1573
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1574
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1575
                symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1576
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1577
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1578
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1579
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1580
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1581
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1582
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1583
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1584
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1585
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1586
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1587
    }/*function_int_to_usint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1588
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1589
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1590
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1591
 *INT_TO_UINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1592
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1593
    case function_int_to_uint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1594
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1595
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1596
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1597
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1598
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1599
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1600
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1601
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1602
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1603
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1604
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1605
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1606
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1607
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1608
            if(search_expression_type->is_same_type(&search_constant_type_c::int_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1609
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1610
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1611
                symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1612
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1613
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1614
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1615
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1616
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1617
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1618
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1619
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1620
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1621
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1622
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1623
    }/*function_int_to_uint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1624
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1625
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1626
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1627
 *INT_TO_UDINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1628
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1629
    case function_int_to_udint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1630
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1631
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1632
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1633
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1634
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1635
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1636
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1637
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1638
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1639
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1640
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1641
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1642
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1643
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1644
            if(search_expression_type->is_same_type(&search_constant_type_c::int_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1645
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1646
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1647
                symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1648
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1649
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1650
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1651
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1652
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1653
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1654
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1655
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1656
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1657
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1658
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1659
    }/*function_int_to_udint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1660
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1661
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1662
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1663
 *INT_TO_ULINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1664
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1665
    case function_int_to_ulint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1666
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1667
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1668
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1669
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1670
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1671
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1672
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1673
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1674
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1675
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1676
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1677
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1678
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1679
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1680
            if(search_expression_type->is_same_type(&search_constant_type_c::int_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1681
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1682
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1683
                symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1684
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1685
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1686
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1687
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1688
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1689
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1690
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1691
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1692
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1693
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1694
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1695
    }/*function_int_to_ulint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1696
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1697
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1698
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1699
 *INT_TO_REAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1700
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1701
    case function_int_to_real :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1702
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1703
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1704
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1705
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1706
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1707
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1708
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1709
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1710
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1711
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1712
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1713
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1714
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1715
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1716
            if(search_expression_type->is_same_type(&search_constant_type_c::int_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1717
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1718
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1719
                symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1720
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1721
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1722
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1723
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1724
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1725
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1726
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1727
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1728
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1729
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1730
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1731
    }/*function_int_to_real*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1732
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1733
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1734
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1735
 *INT_TO_LREAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1736
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1737
    case function_int_to_lreal :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1738
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1739
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1740
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1741
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1742
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1743
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1744
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1745
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1746
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1747
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1748
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1749
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1750
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1751
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1752
            if(search_expression_type->is_same_type(&search_constant_type_c::int_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1753
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1754
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1755
                symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1756
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1757
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1758
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1759
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1760
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1761
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1762
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1763
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1764
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1765
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1766
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1767
    }/*function_int_to_lreal*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1768
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1769
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1770
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1771
 *INT_TO_TIME
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1772
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1773
    case function_int_to_time :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1774
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1775
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1776
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1777
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1778
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1779
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1780
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1781
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1782
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1783
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1784
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1785
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1786
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1787
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1788
            if(search_expression_type->is_same_type(&search_constant_type_c::int_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1789
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1790
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1791
                symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1792
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1793
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1794
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1795
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1796
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1797
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1798
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1799
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1800
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1801
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1802
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1803
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1804
    }/*function_int_to_time*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1805
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1806
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1807
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1808
 *INT_TO_DATE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1809
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1810
    case function_int_to_date :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1811
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1812
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1813
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1814
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1815
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1816
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1817
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1818
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1819
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1820
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1821
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1822
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1823
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1824
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1825
            if(search_expression_type->is_same_type(&search_constant_type_c::int_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1826
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1827
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1828
                symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1829
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1830
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1831
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1832
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1833
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1834
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1835
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1836
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1837
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1838
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1839
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1840
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1841
    }/*function_int_to_date*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1842
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1843
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1844
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1845
 *INT_TO_TOD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1846
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1847
    case function_int_to_tod :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1848
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1849
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1850
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1851
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1852
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1853
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1854
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1855
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1856
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1857
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1858
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1859
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1860
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1861
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1862
            if(search_expression_type->is_same_type(&search_constant_type_c::int_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1863
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1864
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1865
                symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1866
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1867
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1868
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1869
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1870
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1871
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1872
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1873
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1874
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1875
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1876
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1877
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1878
    }/*function_int_to_tod*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1879
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1880
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1881
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1882
 *INT_TO_DT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1883
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1884
    case function_int_to_dt :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1885
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1886
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1887
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1888
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1889
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1890
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1891
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1892
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1893
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1894
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1895
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1896
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1897
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1898
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1899
            if(search_expression_type->is_same_type(&search_constant_type_c::int_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1900
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1901
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1902
                symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1903
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1904
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1905
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1906
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1907
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1908
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1909
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1910
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1911
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1912
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1913
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1914
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1915
    }/*function_int_to_dt*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1916
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1917
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1918
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1919
 *INT_TO_STRING
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1920
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1921
    case function_int_to_string :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1922
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1923
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1924
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1925
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1926
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1927
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1928
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1929
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1930
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1931
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1932
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1933
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1934
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1935
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1936
            if(search_expression_type->is_same_type(&search_constant_type_c::int_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1937
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1938
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1939
                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1940
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1941
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1942
                s4o.print(")__sint_to_string(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1943
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1944
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1945
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1946
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1947
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1948
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1949
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1950
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1951
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1952
    }/*function_int_to_string*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1953
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1954
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1955
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1956
 *INT_TO_BYTE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1957
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1958
    case function_int_to_byte :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1959
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1960
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1961
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1962
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1963
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1964
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1965
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1966
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1967
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1968
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1969
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1970
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1971
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1972
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1973
            if(search_expression_type->is_same_type(&search_constant_type_c::int_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1974
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1975
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1976
                symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1977
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1978
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1979
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1980
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1981
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1982
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1983
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1984
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1985
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1986
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1987
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1988
    }/*function_int_to_byte*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1989
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1990
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1991
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1992
 *INT_TO_WORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1993
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1994
    case function_int_to_word :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1995
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1996
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1997
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1998
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  1999
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2000
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2001
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2002
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2003
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2004
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2005
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2006
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2007
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2008
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2009
            if(search_expression_type->is_same_type(&search_constant_type_c::int_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2010
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2011
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2012
                symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2013
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2014
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2015
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2016
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2017
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2018
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2019
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2020
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2021
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2022
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2023
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2024
    }/*function_int_to_word*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2025
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2026
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2027
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2028
 *INT_TO_DWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2029
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2030
    case function_int_to_dword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2031
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2032
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2033
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2034
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2035
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2036
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2037
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2038
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2039
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2040
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2041
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2042
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2043
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2044
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2045
            if(search_expression_type->is_same_type(&search_constant_type_c::int_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2046
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2047
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2048
                symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2049
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2050
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2051
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2052
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2053
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2054
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2055
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2056
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2057
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2058
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2059
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2060
    }/*function_int_to_dword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2061
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2062
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2063
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2064
 *INT_TO_LWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2065
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2066
    case function_int_to_lword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2067
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2068
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2069
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2070
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2071
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2072
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2073
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2074
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2075
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2076
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2077
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2078
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2079
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2080
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2081
            if(search_expression_type->is_same_type(&search_constant_type_c::int_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2082
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2083
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2084
                symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2085
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2086
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2087
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2088
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2089
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2090
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2091
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2092
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2093
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2094
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2095
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2096
    }/*function_int_to_lword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2097
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2098
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2099
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2100
 *DINT_TO_BOOL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2101
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2102
    case function_dint_to_bool :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2103
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2104
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2105
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2106
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2107
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2108
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2109
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2110
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2111
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2112
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2113
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2114
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2115
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2116
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2117
            if(search_expression_type->is_same_type(&search_constant_type_c::dint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2118
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2119
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2120
                symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2121
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2122
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2123
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2124
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2125
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2126
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2127
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2128
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2129
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2130
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2131
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2132
    }/*function_dint_to_bool*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2133
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2134
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2135
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2136
 *DINT_TO_SINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2137
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2138
    case function_dint_to_sint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2139
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2140
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2141
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2142
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2143
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2144
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2145
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2146
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2147
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2148
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2149
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2150
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2151
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2152
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2153
            if(search_expression_type->is_same_type(&search_constant_type_c::dint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2154
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2155
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2156
                symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2157
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2158
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2159
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2160
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2161
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2162
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2163
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2164
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2165
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2166
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2167
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2168
    }/*function_dint_to_sint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2169
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2170
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2171
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2172
 *DINT_TO_INT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2173
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2174
    case function_dint_to_int :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2175
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2176
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2177
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2178
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2179
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2180
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2181
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2182
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2183
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2184
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2185
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2186
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2187
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2188
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2189
            if(search_expression_type->is_same_type(&search_constant_type_c::dint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2190
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2191
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2192
                symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2193
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2194
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2195
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2196
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2197
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2198
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2199
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2200
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2201
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2202
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2203
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2204
    }/*function_dint_to_int*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2205
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2206
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2207
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2208
 *DINT_TO_LINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2209
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2210
    case function_dint_to_lint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2211
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2212
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2213
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2214
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2215
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2216
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2217
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2218
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2219
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2220
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2221
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2222
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2223
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2224
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2225
            if(search_expression_type->is_same_type(&search_constant_type_c::dint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2226
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2227
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2228
                symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2229
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2230
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2231
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2232
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2233
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2234
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2235
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2236
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2237
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2238
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2239
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2240
    }/*function_dint_to_lint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2241
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2242
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2243
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2244
 *DINT_TO_USINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2245
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2246
    case function_dint_to_usint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2247
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2248
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2249
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2250
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2251
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2252
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2253
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2254
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2255
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2256
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2257
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2258
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2259
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2260
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2261
            if(search_expression_type->is_same_type(&search_constant_type_c::dint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2262
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2263
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2264
                symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2265
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2266
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2267
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2268
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2269
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2270
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2271
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2272
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2273
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2274
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2275
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2276
    }/*function_dint_to_usint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2277
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2278
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2279
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2280
 *DINT_TO_UINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2281
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2282
    case function_dint_to_uint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2283
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2284
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2285
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2286
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2287
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2288
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2289
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2290
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2291
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2292
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2293
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2294
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2295
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2296
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2297
            if(search_expression_type->is_same_type(&search_constant_type_c::dint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2298
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2299
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2300
                symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2301
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2302
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2303
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2304
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2305
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2306
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2307
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2308
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2309
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2310
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2311
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2312
    }/*function_dint_to_uint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2313
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2314
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2315
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2316
 *DINT_TO_UDINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2317
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2318
    case function_dint_to_udint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2319
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2320
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2321
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2322
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2323
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2324
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2325
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2326
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2327
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2328
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2329
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2330
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2331
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2332
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2333
            if(search_expression_type->is_same_type(&search_constant_type_c::dint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2334
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2335
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2336
                symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2337
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2338
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2339
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2340
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2341
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2342
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2343
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2344
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2345
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2346
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2347
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2348
    }/*function_dint_to_udint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2349
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2350
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2351
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2352
 *DINT_TO_ULINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2353
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2354
    case function_dint_to_ulint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2355
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2356
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2357
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2358
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2359
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2360
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2361
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2362
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2363
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2364
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2365
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2366
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2367
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2368
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2369
            if(search_expression_type->is_same_type(&search_constant_type_c::dint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2370
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2371
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2372
                symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2373
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2374
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2375
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2376
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2377
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2378
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2379
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2380
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2381
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2382
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2383
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2384
    }/*function_dint_to_ulint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2385
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2386
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2387
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2388
 *DINT_TO_REAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2389
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2390
    case function_dint_to_real :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2391
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2392
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2393
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2394
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2395
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2396
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2397
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2398
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2399
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2400
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2401
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2402
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2403
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2404
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2405
            if(search_expression_type->is_same_type(&search_constant_type_c::dint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2406
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2407
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2408
                symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2409
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2410
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2411
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2412
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2413
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2414
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2415
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2416
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2417
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2418
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2419
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2420
    }/*function_dint_to_real*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2421
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2422
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2423
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2424
 *DINT_TO_LREAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2425
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2426
    case function_dint_to_lreal :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2427
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2428
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2429
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2430
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2431
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2432
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2433
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2434
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2435
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2436
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2437
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2438
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2439
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2440
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2441
            if(search_expression_type->is_same_type(&search_constant_type_c::dint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2442
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2443
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2444
                symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2445
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2446
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2447
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2448
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2449
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2450
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2451
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2452
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2453
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2454
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2455
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2456
    }/*function_dint_to_lreal*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2457
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2458
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2459
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2460
 *DINT_TO_TIME
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2461
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2462
    case function_dint_to_time :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2463
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2464
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2465
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2466
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2467
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2468
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2469
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2470
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2471
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2472
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2473
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2474
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2475
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2476
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2477
            if(search_expression_type->is_same_type(&search_constant_type_c::dint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2478
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2479
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2480
                symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2481
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2482
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2483
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2484
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2485
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2486
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2487
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2488
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2489
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2490
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2491
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2492
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2493
    }/*function_dint_to_time*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2494
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2495
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2496
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2497
 *DINT_TO_DATE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2498
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2499
    case function_dint_to_date :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2500
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2501
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2502
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2503
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2504
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2505
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2506
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2507
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2508
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2509
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2510
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2511
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2512
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2513
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2514
            if(search_expression_type->is_same_type(&search_constant_type_c::dint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2515
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2516
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2517
                symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2518
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2519
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2520
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2521
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2522
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2523
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2524
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2525
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2526
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2527
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2528
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2529
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2530
    }/*function_dint_to_date*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2531
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2532
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2533
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2534
 *DINT_TO_TOD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2535
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2536
    case function_dint_to_tod :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2537
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2538
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2539
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2540
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2541
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2542
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2543
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2544
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2545
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2546
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2547
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2548
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2549
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2550
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2551
            if(search_expression_type->is_same_type(&search_constant_type_c::dint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2552
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2553
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2554
                symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2555
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2556
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2557
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2558
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2559
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2560
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2561
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2562
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2563
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2564
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2565
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2566
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2567
    }/*function_dint_to_tod*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2568
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2569
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2570
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2571
 *DINT_TO_DT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2572
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2573
    case function_dint_to_dt :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2574
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2575
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2576
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2577
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2578
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2579
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2580
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2581
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2582
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2583
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2584
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2585
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2586
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2587
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2588
            if(search_expression_type->is_same_type(&search_constant_type_c::dint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2589
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2590
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2591
                symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2592
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2593
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2594
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2595
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2596
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2597
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2598
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2599
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2600
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2601
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2602
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2603
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2604
    }/*function_dint_to_dt*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2605
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2606
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2607
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2608
 *DINT_TO_STRING
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2609
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2610
    case function_dint_to_string :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2611
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2612
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2613
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2614
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2615
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2616
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2617
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2618
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2619
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2620
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2621
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2622
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2623
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2624
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2625
            if(search_expression_type->is_same_type(&search_constant_type_c::dint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2626
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2627
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2628
                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2629
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2630
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2631
                s4o.print(")__sint_to_string(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2632
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2633
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2634
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2635
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2636
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2637
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2638
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2639
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2640
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2641
    }/*function_dint_to_string*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2642
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2643
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2644
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2645
 *DINT_TO_BYTE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2646
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2647
    case function_dint_to_byte :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2648
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2649
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2650
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2651
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2652
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2653
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2654
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2655
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2656
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2657
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2658
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2659
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2660
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2661
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2662
            if(search_expression_type->is_same_type(&search_constant_type_c::dint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2663
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2664
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2665
                symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2666
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2667
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2668
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2669
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2670
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2671
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2672
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2673
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2674
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2675
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2676
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2677
    }/*function_dint_to_byte*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2678
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2679
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2680
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2681
 *DINT_TO_WORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2682
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2683
    case function_dint_to_word :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2684
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2685
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2686
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2687
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2688
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2689
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2690
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2691
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2692
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2693
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2694
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2695
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2696
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2697
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2698
            if(search_expression_type->is_same_type(&search_constant_type_c::dint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2699
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2700
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2701
                symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2702
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2703
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2704
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2705
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2706
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2707
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2708
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2709
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2710
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2711
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2712
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2713
    }/*function_dint_to_word*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2714
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2715
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2716
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2717
 *DINT_TO_DWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2718
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2719
    case function_dint_to_dword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2720
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2721
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2722
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2723
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2724
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2725
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2726
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2727
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2728
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2729
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2730
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2731
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2732
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2733
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2734
            if(search_expression_type->is_same_type(&search_constant_type_c::dint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2735
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2736
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2737
                symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2738
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2739
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2740
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2741
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2742
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2743
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2744
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2745
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2746
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2747
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2748
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2749
    }/*function_dint_to_dword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2750
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2751
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2752
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2753
 *DINT_TO_LWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2754
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2755
    case function_dint_to_lword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2756
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2757
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2758
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2759
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2760
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2761
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2762
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2763
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2764
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2765
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2766
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2767
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2768
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2769
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2770
            if(search_expression_type->is_same_type(&search_constant_type_c::dint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2771
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2772
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2773
                symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2774
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2775
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2776
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2777
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2778
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2779
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2780
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2781
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2782
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2783
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2784
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2785
    }/*function_dint_to_lword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2786
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2787
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2788
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2789
 *LINT_TO_BOOL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2790
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2791
    case function_lint_to_bool :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2792
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2793
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2794
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2795
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2796
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2797
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2798
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2799
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2800
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2801
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2802
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2803
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2804
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2805
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2806
            if(search_expression_type->is_same_type(&search_constant_type_c::lint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2807
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2808
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2809
                symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2810
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2811
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2812
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2813
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2814
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2815
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2816
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2817
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2818
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2819
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2820
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2821
    }/*function_lint_to_bool*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2822
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2823
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2824
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2825
 *LINT_TO_SINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2826
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2827
    case function_lint_to_sint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2828
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2829
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2830
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2831
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2832
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2833
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2834
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2835
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2836
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2837
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2838
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2839
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2840
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2841
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2842
            if(search_expression_type->is_same_type(&search_constant_type_c::lint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2843
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2844
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2845
                symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2846
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2847
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2848
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2849
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2850
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2851
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2852
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2853
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2854
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2855
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2856
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2857
    }/*function_lint_to_sint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2858
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2859
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2860
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2861
 *LINT_TO_INT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2862
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2863
    case function_lint_to_int :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2864
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2865
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2866
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2867
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2868
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2869
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2870
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2871
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2872
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2873
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2874
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2875
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2876
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2877
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2878
            if(search_expression_type->is_same_type(&search_constant_type_c::lint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2879
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2880
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2881
                symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2882
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2883
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2884
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2885
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2886
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2887
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2888
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2889
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2890
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2891
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2892
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2893
    }/*function_lint_to_int*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2894
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2895
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2896
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2897
 *LINT_TO_DINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2898
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2899
    case function_lint_to_dint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2900
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2901
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2902
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2903
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2904
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2905
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2906
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2907
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2908
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2909
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2910
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2911
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2912
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2913
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2914
            if(search_expression_type->is_same_type(&search_constant_type_c::lint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2915
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2916
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2917
                symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2918
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2919
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2920
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2921
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2922
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2923
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2924
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2925
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2926
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2927
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2928
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2929
    }/*function_lint_to_dint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2930
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2931
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2932
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2933
 *LINT_TO_USINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2934
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2935
    case function_lint_to_usint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2936
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2937
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2938
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2939
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2940
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2941
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2942
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2943
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2944
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2945
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2946
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2947
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2948
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2949
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2950
            if(search_expression_type->is_same_type(&search_constant_type_c::lint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2951
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2952
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2953
                symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2954
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2955
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2956
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2957
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2958
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2959
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2960
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2961
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2962
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2963
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2964
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2965
    }/*function_lint_to_usint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2966
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2967
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2968
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2969
 *LINT_TO_UINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2970
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2971
    case function_lint_to_uint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2972
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2973
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2974
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2975
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2976
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2977
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2978
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2979
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2980
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2981
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2982
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2983
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2984
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2985
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2986
            if(search_expression_type->is_same_type(&search_constant_type_c::lint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2987
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2988
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2989
                symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2990
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2991
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2992
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2993
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2994
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2995
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2996
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2997
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2998
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  2999
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3000
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3001
    }/*function_lint_to_uint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3002
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3003
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3004
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3005
 *LINT_TO_UDINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3006
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3007
    case function_lint_to_udint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3008
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3009
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3010
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3011
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3012
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3013
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3014
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3015
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3016
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3017
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3018
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3019
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3020
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3021
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3022
            if(search_expression_type->is_same_type(&search_constant_type_c::lint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3023
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3024
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3025
                symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3026
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3027
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3028
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3029
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3030
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3031
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3032
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3033
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3034
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3035
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3036
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3037
    }/*function_lint_to_udint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3038
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3039
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3040
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3041
 *LINT_TO_ULINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3042
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3043
    case function_lint_to_ulint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3044
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3045
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3046
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3047
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3048
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3049
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3050
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3051
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3052
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3053
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3054
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3055
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3056
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3057
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3058
            if(search_expression_type->is_same_type(&search_constant_type_c::lint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3059
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3060
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3061
                symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3062
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3063
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3064
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3065
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3066
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3067
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3068
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3069
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3070
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3071
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3072
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3073
    }/*function_lint_to_ulint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3074
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3075
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3076
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3077
 *LINT_TO_REAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3078
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3079
    case function_lint_to_real :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3080
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3081
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3082
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3083
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3084
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3085
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3086
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3087
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3088
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3089
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3090
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3091
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3092
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3093
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3094
            if(search_expression_type->is_same_type(&search_constant_type_c::lint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3095
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3096
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3097
                symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3098
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3099
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3100
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3101
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3102
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3103
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3104
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3105
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3106
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3107
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3108
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3109
    }/*function_lint_to_real*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3110
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3111
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3112
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3113
 *LINT_TO_LREAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3114
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3115
    case function_lint_to_lreal :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3116
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3117
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3118
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3119
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3120
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3121
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3122
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3123
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3124
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3125
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3126
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3127
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3128
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3129
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3130
            if(search_expression_type->is_same_type(&search_constant_type_c::lint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3131
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3132
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3133
                symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3134
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3135
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3136
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3137
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3138
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3139
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3140
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3141
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3142
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3143
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3144
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3145
    }/*function_lint_to_lreal*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3146
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3147
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3148
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3149
 *LINT_TO_TIME
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3150
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3151
    case function_lint_to_time :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3152
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3153
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3154
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3155
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3156
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3157
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3158
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3159
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3160
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3161
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3162
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3163
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3164
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3165
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3166
            if(search_expression_type->is_same_type(&search_constant_type_c::lint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3167
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3168
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3169
                symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3170
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3171
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3172
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3173
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3174
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3175
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3176
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3177
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3178
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3179
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3180
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3181
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3182
    }/*function_lint_to_time*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3183
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3184
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3185
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3186
 *LINT_TO_DATE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3187
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3188
    case function_lint_to_date :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3189
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3190
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3191
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3192
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3193
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3194
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3195
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3196
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3197
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3198
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3199
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3200
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3201
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3202
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3203
            if(search_expression_type->is_same_type(&search_constant_type_c::lint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3204
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3205
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3206
                symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3207
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3208
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3209
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3210
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3211
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3212
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3213
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3214
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3215
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3216
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3217
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3218
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3219
    }/*function_lint_to_date*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3220
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3221
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3222
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3223
 *LINT_TO_TOD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3224
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3225
    case function_lint_to_tod :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3226
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3227
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3228
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3229
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3230
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3231
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3232
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3233
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3234
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3235
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3236
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3237
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3238
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3239
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3240
            if(search_expression_type->is_same_type(&search_constant_type_c::lint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3241
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3242
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3243
                symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3244
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3245
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3246
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3247
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3248
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3249
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3250
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3251
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3252
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3253
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3254
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3255
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3256
    }/*function_lint_to_tod*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3257
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3258
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3259
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3260
 *LINT_TO_DT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3261
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3262
    case function_lint_to_dt :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3263
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3264
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3265
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3266
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3267
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3268
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3269
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3270
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3271
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3272
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3273
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3274
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3275
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3276
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3277
            if(search_expression_type->is_same_type(&search_constant_type_c::lint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3278
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3279
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3280
                symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3281
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3282
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3283
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3284
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3285
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3286
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3287
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3288
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3289
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3290
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3291
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3292
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3293
    }/*function_lint_to_dt*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3294
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3295
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3296
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3297
 *LINT_TO_STRING
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3298
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3299
    case function_lint_to_string :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3300
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3301
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3302
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3303
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3304
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3305
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3306
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3307
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3308
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3309
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3310
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3311
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3312
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3313
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3314
            if(search_expression_type->is_same_type(&search_constant_type_c::lint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3315
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3316
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3317
                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3318
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3319
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3320
                s4o.print(")__sint_to_string(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3321
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3322
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3323
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3324
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3325
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3326
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3327
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3328
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3329
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3330
    }/*function_lint_to_string*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3331
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3332
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3333
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3334
 *LINT_TO_BYTE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3335
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3336
    case function_lint_to_byte :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3337
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3338
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3339
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3340
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3341
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3342
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3343
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3344
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3345
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3346
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3347
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3348
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3349
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3350
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3351
            if(search_expression_type->is_same_type(&search_constant_type_c::lint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3352
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3353
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3354
                symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3355
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3356
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3357
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3358
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3359
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3360
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3361
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3362
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3363
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3364
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3365
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3366
    }/*function_lint_to_byte*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3367
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3368
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3369
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3370
 *LINT_TO_WORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3371
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3372
    case function_lint_to_word :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3373
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3374
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3375
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3376
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3377
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3378
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3379
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3380
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3381
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3382
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3383
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3384
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3385
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3386
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3387
            if(search_expression_type->is_same_type(&search_constant_type_c::lint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3388
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3389
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3390
                symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3391
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3392
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3393
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3394
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3395
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3396
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3397
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3398
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3399
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3400
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3401
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3402
    }/*function_lint_to_word*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3403
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3404
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3405
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3406
 *LINT_TO_DWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3407
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3408
    case function_lint_to_dword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3409
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3410
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3411
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3412
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3413
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3414
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3415
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3416
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3417
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3418
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3419
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3420
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3421
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3422
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3423
            if(search_expression_type->is_same_type(&search_constant_type_c::lint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3424
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3425
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3426
                symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3427
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3428
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3429
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3430
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3431
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3432
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3433
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3434
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3435
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3436
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3437
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3438
    }/*function_lint_to_dword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3439
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3440
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3441
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3442
 *LINT_TO_LWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3443
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3444
    case function_lint_to_lword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3445
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3446
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3447
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3448
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3449
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3450
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3451
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3452
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3453
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3454
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3455
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3456
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3457
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3458
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3459
            if(search_expression_type->is_same_type(&search_constant_type_c::lint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3460
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3461
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3462
                symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3463
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3464
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3465
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3466
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3467
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3468
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3469
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3470
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3471
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3472
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3473
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3474
    }/*function_lint_to_lword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3475
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3476
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3477
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3478
 *USINT_TO_BOOL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3479
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3480
    case function_usint_to_bool :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3481
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3482
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3483
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3484
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3485
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3486
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3487
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3488
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3489
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3490
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3491
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3492
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3493
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3494
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3495
            if(search_expression_type->is_same_type(&search_constant_type_c::usint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3496
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3497
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3498
                symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3499
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3500
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3501
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3502
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3503
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3504
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3505
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3506
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3507
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3508
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3509
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3510
    }/*function_usint_to_bool*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3511
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3512
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3513
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3514
 *USINT_TO_SINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3515
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3516
    case function_usint_to_sint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3517
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3518
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3519
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3520
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3521
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3522
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3523
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3524
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3525
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3526
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3527
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3528
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3529
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3530
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3531
            if(search_expression_type->is_same_type(&search_constant_type_c::usint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3532
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3533
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3534
                symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3535
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3536
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3537
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3538
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3539
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3540
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3541
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3542
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3543
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3544
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3545
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3546
    }/*function_usint_to_sint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3547
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3548
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3549
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3550
 *USINT_TO_INT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3551
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3552
    case function_usint_to_int :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3553
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3554
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3555
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3556
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3557
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3558
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3559
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3560
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3561
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3562
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3563
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3564
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3565
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3566
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3567
            if(search_expression_type->is_same_type(&search_constant_type_c::usint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3568
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3569
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3570
                symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3571
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3572
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3573
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3574
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3575
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3576
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3577
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3578
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3579
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3580
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3581
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3582
    }/*function_usint_to_int*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3583
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3584
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3585
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3586
 *USINT_TO_DINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3587
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3588
    case function_usint_to_dint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3589
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3590
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3591
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3592
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3593
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3594
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3595
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3596
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3597
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3598
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3599
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3600
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3601
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3602
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3603
            if(search_expression_type->is_same_type(&search_constant_type_c::usint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3604
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3605
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3606
                symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3607
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3608
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3609
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3610
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3611
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3612
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3613
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3614
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3615
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3616
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3617
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3618
    }/*function_usint_to_dint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3619
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3620
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3621
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3622
 *USINT_TO_LINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3623
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3624
    case function_usint_to_lint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3625
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3626
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3627
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3628
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3629
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3630
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3631
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3632
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3633
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3634
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3635
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3636
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3637
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3638
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3639
            if(search_expression_type->is_same_type(&search_constant_type_c::usint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3640
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3641
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3642
                symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3643
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3644
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3645
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3646
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3647
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3648
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3649
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3650
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3651
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3652
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3653
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3654
    }/*function_usint_to_lint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3655
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3656
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3657
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3658
 *USINT_TO_UINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3659
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3660
    case function_usint_to_uint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3661
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3662
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3663
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3664
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3665
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3666
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3667
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3668
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3669
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3670
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3671
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3672
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3673
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3674
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3675
            if(search_expression_type->is_same_type(&search_constant_type_c::usint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3676
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3677
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3678
                symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3679
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3680
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3681
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3682
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3683
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3684
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3685
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3686
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3687
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3688
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3689
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3690
    }/*function_usint_to_uint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3691
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3692
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3693
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3694
 *USINT_TO_UDINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3695
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3696
    case function_usint_to_udint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3697
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3698
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3699
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3700
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3701
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3702
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3703
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3704
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3705
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3706
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3707
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3708
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3709
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3710
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3711
            if(search_expression_type->is_same_type(&search_constant_type_c::usint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3712
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3713
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3714
                symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3715
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3716
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3717
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3718
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3719
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3720
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3721
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3722
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3723
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3724
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3725
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3726
    }/*function_usint_to_udint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3727
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3728
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3729
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3730
 *USINT_TO_ULINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3731
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3732
    case function_usint_to_ulint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3733
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3734
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3735
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3736
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3737
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3738
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3739
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3740
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3741
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3742
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3743
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3744
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3745
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3746
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3747
            if(search_expression_type->is_same_type(&search_constant_type_c::usint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3748
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3749
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3750
                symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3751
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3752
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3753
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3754
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3755
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3756
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3757
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3758
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3759
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3760
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3761
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3762
    }/*function_usint_to_ulint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3763
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3764
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3765
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3766
 *USINT_TO_REAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3767
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3768
    case function_usint_to_real :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3769
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3770
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3771
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3772
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3773
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3774
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3775
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3776
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3777
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3778
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3779
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3780
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3781
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3782
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3783
            if(search_expression_type->is_same_type(&search_constant_type_c::usint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3784
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3785
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3786
                symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3787
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3788
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3789
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3790
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3791
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3792
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3793
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3794
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3795
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3796
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3797
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3798
    }/*function_usint_to_real*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3799
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3800
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3801
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3802
 *USINT_TO_LREAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3803
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3804
    case function_usint_to_lreal :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3805
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3806
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3807
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3808
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3809
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3810
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3811
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3812
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3813
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3814
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3815
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3816
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3817
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3818
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3819
            if(search_expression_type->is_same_type(&search_constant_type_c::usint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3820
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3821
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3822
                symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3823
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3824
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3825
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3826
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3827
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3828
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3829
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3830
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3831
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3832
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3833
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3834
    }/*function_usint_to_lreal*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3835
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3836
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3837
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3838
 *USINT_TO_TIME
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3839
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3840
    case function_usint_to_time :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3841
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3842
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3843
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3844
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3845
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3846
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3847
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3848
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3849
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3850
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3851
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3852
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3853
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3854
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3855
            if(search_expression_type->is_same_type(&search_constant_type_c::usint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3856
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3857
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3858
                symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3859
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3860
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3861
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3862
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3863
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3864
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3865
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3866
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3867
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3868
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3869
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3870
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3871
    }/*function_usint_to_time*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3872
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3873
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3874
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3875
 *USINT_TO_DATE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3876
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3877
    case function_usint_to_date :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3878
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3879
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3880
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3881
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3882
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3883
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3884
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3885
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3886
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3887
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3888
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3889
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3890
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3891
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3892
            if(search_expression_type->is_same_type(&search_constant_type_c::usint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3893
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3894
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3895
                symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3896
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3897
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3898
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3899
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3900
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3901
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3902
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3903
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3904
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3905
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3906
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3907
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3908
    }/*function_usint_to_date*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3909
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3910
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3911
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3912
 *USINT_TO_TOD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3913
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3914
    case function_usint_to_tod :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3915
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3916
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3917
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3918
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3919
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3920
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3921
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3922
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3923
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3924
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3925
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3926
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3927
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3928
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3929
            if(search_expression_type->is_same_type(&search_constant_type_c::usint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3930
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3931
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3932
                symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3933
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3934
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3935
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3936
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3937
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3938
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3939
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3940
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3941
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3942
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3943
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3944
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3945
    }/*function_usint_to_tod*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3946
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3947
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3948
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3949
 *USINT_TO_DT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3950
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3951
    case function_usint_to_dt :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3952
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3953
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3954
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3955
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3956
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3957
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3958
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3959
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3960
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3961
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3962
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3963
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3964
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3965
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3966
            if(search_expression_type->is_same_type(&search_constant_type_c::usint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3967
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3968
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3969
                symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3970
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3971
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3972
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3973
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3974
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3975
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3976
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3977
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3978
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3979
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3980
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3981
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3982
    }/*function_usint_to_dt*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3983
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3984
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3985
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3986
 *USINT_TO_STRING
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3987
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3988
    case function_usint_to_string :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3989
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3990
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3991
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3992
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3993
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3994
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3995
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3996
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3997
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3998
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  3999
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4000
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4001
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4002
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4003
            if(search_expression_type->is_same_type(&search_constant_type_c::usint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4004
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4005
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4006
                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4007
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4008
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4009
                s4o.print(")__uint_to_string(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4010
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4011
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4012
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4013
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4014
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4015
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4016
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4017
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4018
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4019
    }/*function_usint_to_string*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4020
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4021
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4022
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4023
 *USINT_TO_BYTE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4024
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4025
    case function_usint_to_byte :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4026
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4027
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4028
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4029
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4030
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4031
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4032
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4033
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4034
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4035
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4036
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4037
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4038
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4039
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4040
            if(search_expression_type->is_same_type(&search_constant_type_c::usint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4041
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4042
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4043
                symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4044
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4045
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4046
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4047
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4048
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4049
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4050
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4051
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4052
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4053
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4054
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4055
    }/*function_usint_to_byte*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4056
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4057
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4058
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4059
 *USINT_TO_WORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4060
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4061
    case function_usint_to_word :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4062
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4063
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4064
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4065
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4066
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4067
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4068
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4069
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4070
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4071
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4072
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4073
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4074
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4075
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4076
            if(search_expression_type->is_same_type(&search_constant_type_c::usint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4077
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4078
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4079
                symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4080
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4081
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4082
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4083
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4084
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4085
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4086
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4087
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4088
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4089
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4090
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4091
    }/*function_usint_to_word*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4092
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4093
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4094
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4095
 *USINT_TO_DWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4096
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4097
    case function_usint_to_dword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4098
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4099
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4100
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4101
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4102
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4103
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4104
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4105
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4106
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4107
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4108
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4109
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4110
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4111
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4112
            if(search_expression_type->is_same_type(&search_constant_type_c::usint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4113
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4114
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4115
                symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4116
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4117
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4118
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4119
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4120
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4121
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4122
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4123
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4124
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4125
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4126
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4127
    }/*function_usint_to_dword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4128
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4129
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4130
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4131
 *USINT_TO_LWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4132
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4133
    case function_usint_to_lword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4134
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4135
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4136
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4137
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4138
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4139
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4140
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4141
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4142
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4143
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4144
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4145
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4146
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4147
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4148
            if(search_expression_type->is_same_type(&search_constant_type_c::usint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4149
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4150
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4151
                symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4152
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4153
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4154
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4155
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4156
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4157
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4158
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4159
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4160
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4161
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4162
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4163
    }/*function_usint_to_lword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4164
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4165
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4166
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4167
 *UINT_TO_BOOL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4168
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4169
    case function_uint_to_bool :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4170
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4171
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4172
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4173
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4174
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4175
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4176
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4177
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4178
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4179
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4180
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4181
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4182
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4183
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4184
            if(search_expression_type->is_same_type(&search_constant_type_c::uint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4185
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4186
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4187
                symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4188
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4189
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4190
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4191
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4192
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4193
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4194
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4195
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4196
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4197
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4198
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4199
    }/*function_uint_to_bool*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4200
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4201
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4202
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4203
 *UINT_TO_SINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4204
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4205
    case function_uint_to_sint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4206
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4207
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4208
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4209
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4210
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4211
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4212
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4213
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4214
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4215
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4216
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4217
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4218
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4219
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4220
            if(search_expression_type->is_same_type(&search_constant_type_c::uint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4221
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4222
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4223
                symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4224
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4225
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4226
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4227
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4228
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4229
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4230
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4231
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4232
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4233
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4234
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4235
    }/*function_uint_to_sint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4236
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4237
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4238
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4239
 *UINT_TO_INT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4240
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4241
    case function_uint_to_int :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4242
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4243
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4244
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4245
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4246
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4247
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4248
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4249
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4250
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4251
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4252
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4253
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4254
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4255
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4256
            if(search_expression_type->is_same_type(&search_constant_type_c::uint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4257
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4258
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4259
                symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4260
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4261
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4262
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4263
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4264
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4265
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4266
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4267
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4268
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4269
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4270
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4271
    }/*function_uint_to_int*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4272
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4273
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4274
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4275
 *UINT_TO_DINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4276
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4277
    case function_uint_to_dint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4278
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4279
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4280
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4281
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4282
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4283
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4284
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4285
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4286
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4287
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4288
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4289
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4290
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4291
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4292
            if(search_expression_type->is_same_type(&search_constant_type_c::uint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4293
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4294
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4295
                symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4296
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4297
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4298
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4299
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4300
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4301
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4302
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4303
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4304
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4305
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4306
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4307
    }/*function_uint_to_dint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4308
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4309
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4310
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4311
 *UINT_TO_LINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4312
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4313
    case function_uint_to_lint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4314
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4315
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4316
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4317
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4318
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4319
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4320
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4321
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4322
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4323
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4324
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4325
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4326
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4327
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4328
            if(search_expression_type->is_same_type(&search_constant_type_c::uint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4329
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4330
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4331
                symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4332
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4333
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4334
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4335
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4336
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4337
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4338
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4339
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4340
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4341
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4342
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4343
    }/*function_uint_to_lint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4344
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4345
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4346
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4347
 *UINT_TO_USINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4348
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4349
    case function_uint_to_usint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4350
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4351
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4352
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4353
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4354
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4355
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4356
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4357
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4358
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4359
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4360
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4361
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4362
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4363
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4364
            if(search_expression_type->is_same_type(&search_constant_type_c::uint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4365
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4366
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4367
                symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4368
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4369
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4370
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4371
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4372
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4373
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4374
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4375
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4376
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4377
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4378
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4379
    }/*function_uint_to_usint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4380
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4381
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4382
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4383
 *UINT_TO_UDINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4384
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4385
    case function_uint_to_udint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4386
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4387
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4388
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4389
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4390
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4391
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4392
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4393
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4394
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4395
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4396
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4397
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4398
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4399
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4400
            if(search_expression_type->is_same_type(&search_constant_type_c::uint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4401
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4402
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4403
                symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4404
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4405
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4406
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4407
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4408
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4409
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4410
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4411
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4412
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4413
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4414
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4415
    }/*function_uint_to_udint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4416
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4417
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4418
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4419
 *UINT_TO_ULINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4420
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4421
    case function_uint_to_ulint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4422
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4423
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4424
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4425
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4426
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4427
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4428
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4429
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4430
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4431
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4432
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4433
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4434
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4435
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4436
            if(search_expression_type->is_same_type(&search_constant_type_c::uint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4437
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4438
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4439
                symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4440
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4441
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4442
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4443
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4444
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4445
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4446
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4447
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4448
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4449
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4450
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4451
    }/*function_uint_to_ulint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4452
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4453
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4454
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4455
 *UINT_TO_REAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4456
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4457
    case function_uint_to_real :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4458
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4459
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4460
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4461
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4462
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4463
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4464
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4465
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4466
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4467
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4468
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4469
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4470
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4471
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4472
            if(search_expression_type->is_same_type(&search_constant_type_c::uint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4473
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4474
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4475
                symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4476
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4477
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4478
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4479
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4480
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4481
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4482
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4483
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4484
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4485
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4486
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4487
    }/*function_uint_to_real*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4488
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4489
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4490
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4491
 *UINT_TO_LREAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4492
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4493
    case function_uint_to_lreal :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4494
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4495
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4496
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4497
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4498
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4499
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4500
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4501
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4502
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4503
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4504
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4505
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4506
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4507
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4508
            if(search_expression_type->is_same_type(&search_constant_type_c::uint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4509
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4510
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4511
                symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4512
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4513
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4514
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4515
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4516
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4517
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4518
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4519
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4520
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4521
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4522
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4523
    }/*function_uint_to_lreal*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4524
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4525
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4526
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4527
 *UINT_TO_TIME
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4528
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4529
    case function_uint_to_time :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4530
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4531
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4532
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4533
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4534
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4535
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4536
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4537
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4538
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4539
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4540
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4541
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4542
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4543
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4544
            if(search_expression_type->is_same_type(&search_constant_type_c::uint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4545
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4546
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4547
                symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4548
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4549
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4550
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4551
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4552
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4553
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4554
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4555
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4556
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4557
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4558
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4559
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4560
    }/*function_uint_to_time*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4561
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4562
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4563
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4564
 *UINT_TO_DATE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4565
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4566
    case function_uint_to_date :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4567
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4568
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4569
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4570
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4571
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4572
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4573
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4574
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4575
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4576
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4577
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4578
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4579
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4580
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4581
            if(search_expression_type->is_same_type(&search_constant_type_c::uint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4582
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4583
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4584
                symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4585
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4586
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4587
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4588
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4589
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4590
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4591
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4592
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4593
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4594
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4595
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4596
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4597
    }/*function_uint_to_date*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4598
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4599
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4600
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4601
 *UINT_TO_TOD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4602
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4603
    case function_uint_to_tod :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4604
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4605
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4606
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4607
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4608
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4609
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4610
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4611
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4612
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4613
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4614
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4615
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4616
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4617
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4618
            if(search_expression_type->is_same_type(&search_constant_type_c::uint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4619
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4620
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4621
                symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4622
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4623
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4624
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4625
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4626
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4627
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4628
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4629
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4630
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4631
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4632
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4633
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4634
    }/*function_uint_to_tod*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4635
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4636
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4637
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4638
 *UINT_TO_DT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4639
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4640
    case function_uint_to_dt :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4641
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4642
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4643
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4644
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4645
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4646
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4647
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4648
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4649
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4650
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4651
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4652
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4653
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4654
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4655
            if(search_expression_type->is_same_type(&search_constant_type_c::uint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4656
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4657
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4658
                symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4659
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4660
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4661
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4662
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4663
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4664
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4665
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4666
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4667
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4668
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4669
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4670
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4671
    }/*function_uint_to_dt*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4672
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4673
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4674
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4675
 *UINT_TO_STRING
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4676
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4677
    case function_uint_to_string :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4678
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4679
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4680
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4681
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4682
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4683
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4684
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4685
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4686
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4687
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4688
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4689
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4690
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4691
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4692
            if(search_expression_type->is_same_type(&search_constant_type_c::uint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4693
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4694
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4695
                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4696
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4697
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4698
                s4o.print(")__uint_to_string(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4699
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4700
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4701
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4702
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4703
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4704
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4705
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4706
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4707
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4708
    }/*function_uint_to_string*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4709
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4710
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4711
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4712
 *UINT_TO_BYTE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4713
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4714
    case function_uint_to_byte :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4715
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4716
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4717
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4718
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4719
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4720
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4721
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4722
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4723
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4724
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4725
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4726
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4727
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4728
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4729
            if(search_expression_type->is_same_type(&search_constant_type_c::uint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4730
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4731
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4732
                symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4733
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4734
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4735
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4736
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4737
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4738
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4739
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4740
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4741
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4742
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4743
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4744
    }/*function_uint_to_byte*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4745
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4746
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4747
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4748
 *UINT_TO_WORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4749
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4750
    case function_uint_to_word :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4751
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4752
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4753
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4754
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4755
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4756
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4757
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4758
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4759
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4760
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4761
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4762
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4763
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4764
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4765
            if(search_expression_type->is_same_type(&search_constant_type_c::uint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4766
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4767
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4768
                symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4769
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4770
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4771
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4772
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4773
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4774
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4775
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4776
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4777
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4778
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4779
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4780
    }/*function_uint_to_word*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4781
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4782
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4783
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4784
 *UINT_TO_DWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4785
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4786
    case function_uint_to_dword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4787
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4788
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4789
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4790
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4791
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4792
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4793
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4794
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4795
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4796
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4797
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4798
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4799
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4800
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4801
            if(search_expression_type->is_same_type(&search_constant_type_c::uint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4802
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4803
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4804
                symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4805
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4806
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4807
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4808
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4809
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4810
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4811
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4812
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4813
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4814
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4815
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4816
    }/*function_uint_to_dword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4817
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4818
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4819
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4820
 *UINT_TO_LWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4821
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4822
    case function_uint_to_lword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4823
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4824
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4825
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4826
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4827
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4828
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4829
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4830
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4831
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4832
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4833
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4834
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4835
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4836
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4837
            if(search_expression_type->is_same_type(&search_constant_type_c::uint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4838
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4839
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4840
                symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4841
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4842
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4843
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4844
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4845
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4846
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4847
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4848
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4849
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4850
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4851
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4852
    }/*function_uint_to_lword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4853
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4854
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4855
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4856
 *UDINT_TO_BOOL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4857
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4858
    case function_udint_to_bool :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4859
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4860
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4861
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4862
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4863
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4864
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4865
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4866
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4867
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4868
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4869
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4870
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4871
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4872
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4873
            if(search_expression_type->is_same_type(&search_constant_type_c::udint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4874
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4875
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4876
                symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4877
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4878
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4879
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4880
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4881
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4882
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4883
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4884
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4885
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4886
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4887
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4888
    }/*function_udint_to_bool*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4889
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4890
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4891
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4892
 *UDINT_TO_SINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4893
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4894
    case function_udint_to_sint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4895
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4896
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4897
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4898
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4899
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4900
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4901
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4902
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4903
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4904
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4905
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4906
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4907
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4908
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4909
            if(search_expression_type->is_same_type(&search_constant_type_c::udint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4910
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4911
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4912
                symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4913
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4914
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4915
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4916
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4917
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4918
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4919
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4920
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4921
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4922
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4923
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4924
    }/*function_udint_to_sint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4925
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4926
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4927
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4928
 *UDINT_TO_INT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4929
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4930
    case function_udint_to_int :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4931
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4932
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4933
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4934
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4935
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4936
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4937
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4938
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4939
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4940
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4941
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4942
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4943
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4944
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4945
            if(search_expression_type->is_same_type(&search_constant_type_c::udint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4946
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4947
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4948
                symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4949
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4950
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4951
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4952
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4953
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4954
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4955
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4956
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4957
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4958
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4959
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4960
    }/*function_udint_to_int*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4961
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4962
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4963
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4964
 *UDINT_TO_DINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4965
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4966
    case function_udint_to_dint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4967
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4968
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4969
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4970
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4971
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4972
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4973
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4974
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4975
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4976
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4977
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4978
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4979
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4980
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4981
            if(search_expression_type->is_same_type(&search_constant_type_c::udint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4982
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4983
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4984
                symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4985
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4986
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4987
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4988
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4989
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4990
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4991
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4992
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4993
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4994
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4995
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4996
    }/*function_udint_to_dint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4997
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4998
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  4999
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5000
 *UDINT_TO_LINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5001
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5002
    case function_udint_to_lint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5003
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5004
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5005
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5006
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5007
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5008
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5009
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5010
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5011
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5012
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5013
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5014
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5015
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5016
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5017
            if(search_expression_type->is_same_type(&search_constant_type_c::udint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5018
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5019
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5020
                symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5021
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5022
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5023
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5024
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5025
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5026
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5027
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5028
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5029
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5030
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5031
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5032
    }/*function_udint_to_lint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5033
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5034
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5035
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5036
 *UDINT_TO_USINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5037
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5038
    case function_udint_to_usint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5039
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5040
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5041
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5042
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5043
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5044
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5045
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5046
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5047
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5048
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5049
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5050
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5051
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5052
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5053
            if(search_expression_type->is_same_type(&search_constant_type_c::udint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5054
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5055
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5056
                symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5057
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5058
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5059
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5060
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5061
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5062
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5063
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5064
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5065
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5066
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5067
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5068
    }/*function_udint_to_usint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5069
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5070
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5071
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5072
 *UDINT_TO_UINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5073
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5074
    case function_udint_to_uint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5075
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5076
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5077
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5078
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5079
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5080
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5081
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5082
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5083
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5084
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5085
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5086
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5087
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5088
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5089
            if(search_expression_type->is_same_type(&search_constant_type_c::udint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5090
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5091
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5092
                symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5093
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5094
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5095
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5096
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5097
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5098
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5099
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5100
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5101
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5102
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5103
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5104
    }/*function_udint_to_uint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5105
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5106
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5107
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5108
 *UDINT_TO_ULINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5109
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5110
    case function_udint_to_ulint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5111
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5112
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5113
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5114
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5115
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5116
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5117
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5118
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5119
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5120
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5121
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5122
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5123
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5124
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5125
            if(search_expression_type->is_same_type(&search_constant_type_c::udint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5126
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5127
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5128
                symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5129
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5130
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5131
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5132
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5133
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5134
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5135
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5136
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5137
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5138
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5139
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5140
    }/*function_udint_to_ulint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5141
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5142
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5143
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5144
 *UDINT_TO_REAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5145
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5146
    case function_udint_to_real :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5147
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5148
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5149
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5150
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5151
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5152
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5153
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5154
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5155
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5156
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5157
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5158
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5159
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5160
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5161
            if(search_expression_type->is_same_type(&search_constant_type_c::udint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5162
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5163
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5164
                symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5165
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5166
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5167
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5168
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5169
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5170
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5171
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5172
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5173
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5174
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5175
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5176
    }/*function_udint_to_real*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5177
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5178
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5179
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5180
 *UDINT_TO_LREAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5181
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5182
    case function_udint_to_lreal :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5183
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5184
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5185
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5186
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5187
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5188
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5189
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5190
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5191
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5192
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5193
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5194
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5195
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5196
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5197
            if(search_expression_type->is_same_type(&search_constant_type_c::udint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5198
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5199
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5200
                symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5201
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5202
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5203
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5204
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5205
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5206
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5207
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5208
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5209
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5210
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5211
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5212
    }/*function_udint_to_lreal*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5213
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5214
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5215
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5216
 *UDINT_TO_TIME
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5217
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5218
    case function_udint_to_time :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5219
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5220
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5221
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5222
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5223
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5224
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5225
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5226
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5227
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5228
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5229
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5230
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5231
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5232
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5233
            if(search_expression_type->is_same_type(&search_constant_type_c::udint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5234
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5235
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5236
                symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5237
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5238
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5239
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5240
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5241
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5242
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5243
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5244
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5245
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5246
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5247
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5248
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5249
    }/*function_udint_to_time*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5250
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5251
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5252
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5253
 *UDINT_TO_DATE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5254
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5255
    case function_udint_to_date :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5256
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5257
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5258
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5259
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5260
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5261
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5262
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5263
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5264
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5265
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5266
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5267
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5268
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5269
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5270
            if(search_expression_type->is_same_type(&search_constant_type_c::udint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5271
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5272
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5273
                symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5274
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5275
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5276
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5277
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5278
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5279
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5280
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5281
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5282
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5283
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5284
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5285
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5286
    }/*function_udint_to_date*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5287
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5288
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5289
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5290
 *UDINT_TO_TOD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5291
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5292
    case function_udint_to_tod :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5293
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5294
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5295
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5296
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5297
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5298
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5299
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5300
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5301
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5302
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5303
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5304
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5305
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5306
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5307
            if(search_expression_type->is_same_type(&search_constant_type_c::udint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5308
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5309
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5310
                symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5311
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5312
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5313
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5314
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5315
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5316
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5317
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5318
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5319
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5320
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5321
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5322
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5323
    }/*function_udint_to_tod*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5324
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5325
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5326
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5327
 *UDINT_TO_DT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5328
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5329
    case function_udint_to_dt :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5330
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5331
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5332
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5333
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5334
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5335
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5336
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5337
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5338
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5339
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5340
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5341
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5342
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5343
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5344
            if(search_expression_type->is_same_type(&search_constant_type_c::udint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5345
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5346
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5347
                symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5348
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5349
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5350
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5351
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5352
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5353
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5354
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5355
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5356
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5357
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5358
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5359
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5360
    }/*function_udint_to_dt*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5361
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5362
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5363
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5364
 *UDINT_TO_STRING
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5365
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5366
    case function_udint_to_string :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5367
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5368
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5369
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5370
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5371
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5372
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5373
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5374
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5375
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5376
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5377
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5378
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5379
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5380
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5381
            if(search_expression_type->is_same_type(&search_constant_type_c::udint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5382
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5383
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5384
                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5385
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5386
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5387
                s4o.print(")__uint_to_string(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5388
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5389
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5390
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5391
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5392
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5393
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5394
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5395
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5396
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5397
    }/*function_udint_to_string*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5398
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5399
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5400
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5401
 *UDINT_TO_BYTE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5402
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5403
    case function_udint_to_byte :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5404
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5405
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5406
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5407
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5408
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5409
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5410
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5411
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5412
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5413
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5414
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5415
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5416
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5417
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5418
            if(search_expression_type->is_same_type(&search_constant_type_c::udint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5419
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5420
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5421
                symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5422
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5423
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5424
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5425
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5426
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5427
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5428
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5429
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5430
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5431
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5432
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5433
    }/*function_udint_to_byte*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5434
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5435
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5436
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5437
 *UDINT_TO_WORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5438
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5439
    case function_udint_to_word :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5440
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5441
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5442
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5443
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5444
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5445
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5446
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5447
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5448
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5449
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5450
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5451
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5452
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5453
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5454
            if(search_expression_type->is_same_type(&search_constant_type_c::udint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5455
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5456
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5457
                symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5458
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5459
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5460
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5461
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5462
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5463
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5464
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5465
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5466
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5467
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5468
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5469
    }/*function_udint_to_word*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5470
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5471
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5472
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5473
 *UDINT_TO_DWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5474
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5475
    case function_udint_to_dword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5476
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5477
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5478
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5479
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5480
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5481
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5482
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5483
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5484
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5485
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5486
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5487
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5488
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5489
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5490
            if(search_expression_type->is_same_type(&search_constant_type_c::udint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5491
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5492
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5493
                symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5494
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5495
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5496
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5497
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5498
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5499
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5500
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5501
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5502
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5503
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5504
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5505
    }/*function_udint_to_dword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5506
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5507
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5508
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5509
 *UDINT_TO_LWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5510
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5511
    case function_udint_to_lword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5512
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5513
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5514
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5515
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5516
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5517
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5518
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5519
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5520
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5521
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5522
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5523
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5524
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5525
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5526
            if(search_expression_type->is_same_type(&search_constant_type_c::udint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5527
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5528
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5529
                symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5530
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5531
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5532
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5533
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5534
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5535
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5536
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5537
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5538
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5539
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5540
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5541
    }/*function_udint_to_lword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5542
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5543
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5544
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5545
 *ULINT_TO_BOOL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5546
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5547
    case function_ulint_to_bool :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5548
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5549
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5550
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5551
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5552
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5553
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5554
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5555
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5556
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5557
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5558
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5559
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5560
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5561
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5562
            if(search_expression_type->is_same_type(&search_constant_type_c::ulint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5563
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5564
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5565
                symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5566
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5567
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5568
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5569
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5570
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5571
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5572
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5573
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5574
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5575
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5576
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5577
    }/*function_ulint_to_bool*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5578
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5579
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5580
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5581
 *ULINT_TO_SINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5582
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5583
    case function_ulint_to_sint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5584
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5585
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5586
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5587
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5588
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5589
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5590
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5591
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5592
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5593
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5594
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5595
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5596
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5597
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5598
            if(search_expression_type->is_same_type(&search_constant_type_c::ulint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5599
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5600
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5601
                symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5602
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5603
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5604
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5605
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5606
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5607
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5608
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5609
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5610
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5611
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5612
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5613
    }/*function_ulint_to_sint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5614
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5615
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5616
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5617
 *ULINT_TO_INT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5618
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5619
    case function_ulint_to_int :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5620
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5621
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5622
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5623
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5624
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5625
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5626
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5627
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5628
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5629
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5630
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5631
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5632
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5633
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5634
            if(search_expression_type->is_same_type(&search_constant_type_c::ulint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5635
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5636
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5637
                symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5638
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5639
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5640
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5641
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5642
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5643
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5644
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5645
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5646
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5647
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5648
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5649
    }/*function_ulint_to_int*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5650
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5651
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5652
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5653
 *ULINT_TO_DINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5654
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5655
    case function_ulint_to_dint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5656
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5657
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5658
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5659
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5660
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5661
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5662
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5663
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5664
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5665
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5666
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5667
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5668
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5669
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5670
            if(search_expression_type->is_same_type(&search_constant_type_c::ulint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5671
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5672
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5673
                symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5674
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5675
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5676
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5677
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5678
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5679
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5680
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5681
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5682
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5683
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5684
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5685
    }/*function_ulint_to_dint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5686
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5687
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5688
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5689
 *ULINT_TO_LINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5690
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5691
    case function_ulint_to_lint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5692
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5693
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5694
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5695
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5696
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5697
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5698
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5699
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5700
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5701
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5702
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5703
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5704
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5705
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5706
            if(search_expression_type->is_same_type(&search_constant_type_c::ulint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5707
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5708
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5709
                symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5710
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5711
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5712
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5713
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5714
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5715
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5716
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5717
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5718
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5719
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5720
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5721
    }/*function_ulint_to_lint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5722
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5723
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5724
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5725
 *ULINT_TO_USINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5726
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5727
    case function_ulint_to_usint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5728
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5729
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5730
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5731
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5732
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5733
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5734
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5735
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5736
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5737
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5738
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5739
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5740
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5741
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5742
            if(search_expression_type->is_same_type(&search_constant_type_c::ulint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5743
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5744
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5745
                symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5746
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5747
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5748
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5749
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5750
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5751
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5752
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5753
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5754
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5755
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5756
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5757
    }/*function_ulint_to_usint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5758
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5759
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5760
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5761
 *ULINT_TO_UINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5762
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5763
    case function_ulint_to_uint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5764
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5765
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5766
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5767
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5768
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5769
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5770
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5771
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5772
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5773
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5774
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5775
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5776
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5777
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5778
            if(search_expression_type->is_same_type(&search_constant_type_c::ulint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5779
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5780
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5781
                symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5782
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5783
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5784
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5785
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5786
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5787
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5788
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5789
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5790
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5791
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5792
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5793
    }/*function_ulint_to_uint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5794
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5795
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5796
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5797
 *ULINT_TO_UDINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5798
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5799
    case function_ulint_to_udint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5800
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5801
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5802
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5803
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5804
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5805
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5806
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5807
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5808
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5809
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5810
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5811
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5812
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5813
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5814
            if(search_expression_type->is_same_type(&search_constant_type_c::ulint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5815
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5816
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5817
                symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5818
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5819
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5820
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5821
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5822
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5823
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5824
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5825
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5826
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5827
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5828
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5829
    }/*function_ulint_to_udint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5830
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5831
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5832
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5833
 *ULINT_TO_REAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5834
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5835
    case function_ulint_to_real :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5836
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5837
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5838
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5839
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5840
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5841
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5842
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5843
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5844
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5845
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5846
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5847
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5848
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5849
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5850
            if(search_expression_type->is_same_type(&search_constant_type_c::ulint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5851
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5852
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5853
                symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5854
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5855
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5856
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5857
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5858
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5859
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5860
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5861
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5862
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5863
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5864
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5865
    }/*function_ulint_to_real*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5866
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5867
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5868
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5869
 *ULINT_TO_LREAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5870
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5871
    case function_ulint_to_lreal :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5872
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5873
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5874
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5875
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5876
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5877
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5878
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5879
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5880
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5881
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5882
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5883
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5884
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5885
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5886
            if(search_expression_type->is_same_type(&search_constant_type_c::ulint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5887
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5888
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5889
                symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5890
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5891
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5892
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5893
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5894
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5895
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5896
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5897
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5898
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5899
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5900
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5901
    }/*function_ulint_to_lreal*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5902
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5903
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5904
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5905
 *ULINT_TO_TIME
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5906
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5907
    case function_ulint_to_time :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5908
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5909
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5910
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5911
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5912
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5913
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5914
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5915
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5916
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5917
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5918
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5919
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5920
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5921
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5922
            if(search_expression_type->is_same_type(&search_constant_type_c::ulint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5923
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5924
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5925
                symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5926
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5927
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5928
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5929
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5930
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5931
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5932
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5933
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5934
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5935
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5936
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5937
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5938
    }/*function_ulint_to_time*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5939
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5940
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5941
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5942
 *ULINT_TO_DATE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5943
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5944
    case function_ulint_to_date :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5945
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5946
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5947
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5948
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5949
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5950
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5951
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5952
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5953
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5954
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5955
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5956
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5957
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5958
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5959
            if(search_expression_type->is_same_type(&search_constant_type_c::ulint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5960
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5961
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5962
                symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5963
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5964
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5965
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5966
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5967
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5968
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5969
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5970
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5971
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5972
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5973
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5974
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5975
    }/*function_ulint_to_date*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5976
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5977
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5978
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5979
 *ULINT_TO_TOD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5980
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5981
    case function_ulint_to_tod :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5982
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5983
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5984
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5985
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5986
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5987
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5988
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5989
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5990
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5991
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5992
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5993
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5994
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5995
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5996
            if(search_expression_type->is_same_type(&search_constant_type_c::ulint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5997
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5998
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  5999
                symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6000
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6001
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6002
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6003
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6004
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6005
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6006
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6007
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6008
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6009
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6010
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6011
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6012
    }/*function_ulint_to_tod*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6013
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6014
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6015
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6016
 *ULINT_TO_DT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6017
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6018
    case function_ulint_to_dt :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6019
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6020
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6021
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6022
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6023
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6024
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6025
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6026
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6027
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6028
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6029
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6030
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6031
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6032
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6033
            if(search_expression_type->is_same_type(&search_constant_type_c::ulint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6034
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6035
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6036
                symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6037
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6038
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6039
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6040
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6041
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6042
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6043
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6044
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6045
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6046
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6047
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6048
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6049
    }/*function_ulint_to_dt*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6050
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6051
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6052
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6053
 *ULINT_TO_STRING
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6054
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6055
    case function_ulint_to_string :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6056
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6057
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6058
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6059
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6060
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6061
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6062
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6063
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6064
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6065
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6066
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6067
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6068
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6069
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6070
            if(search_expression_type->is_same_type(&search_constant_type_c::ulint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6071
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6072
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6073
                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6074
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6075
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6076
                s4o.print(")__uint_to_string(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6077
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6078
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6079
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6080
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6081
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6082
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6083
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6084
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6085
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6086
    }/*function_ulint_to_string*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6087
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6088
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6089
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6090
 *ULINT_TO_BYTE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6091
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6092
    case function_ulint_to_byte :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6093
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6094
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6095
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6096
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6097
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6098
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6099
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6100
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6101
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6102
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6103
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6104
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6105
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6106
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6107
            if(search_expression_type->is_same_type(&search_constant_type_c::ulint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6108
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6109
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6110
                symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6111
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6112
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6113
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6114
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6115
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6116
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6117
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6118
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6119
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6120
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6121
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6122
    }/*function_ulint_to_byte*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6123
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6124
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6125
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6126
 *ULINT_TO_WORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6127
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6128
    case function_ulint_to_word :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6129
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6130
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6131
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6132
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6133
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6134
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6135
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6136
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6137
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6138
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6139
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6140
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6141
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6142
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6143
            if(search_expression_type->is_same_type(&search_constant_type_c::ulint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6144
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6145
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6146
                symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6147
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6148
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6149
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6150
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6151
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6152
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6153
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6154
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6155
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6156
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6157
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6158
    }/*function_ulint_to_word*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6159
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6160
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6161
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6162
 *ULINT_TO_DWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6163
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6164
    case function_ulint_to_dword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6165
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6166
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6167
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6168
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6169
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6170
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6171
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6172
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6173
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6174
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6175
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6176
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6177
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6178
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6179
            if(search_expression_type->is_same_type(&search_constant_type_c::ulint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6180
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6181
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6182
                symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6183
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6184
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6185
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6186
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6187
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6188
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6189
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6190
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6191
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6192
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6193
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6194
    }/*function_ulint_to_dword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6195
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6196
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6197
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6198
 *ULINT_TO_LWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6199
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6200
    case function_ulint_to_lword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6201
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6202
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6203
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6204
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6205
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6206
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6207
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6208
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6209
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6210
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6211
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6212
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6213
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6214
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6215
            if(search_expression_type->is_same_type(&search_constant_type_c::ulint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6216
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6217
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6218
                symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6219
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6220
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6221
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6222
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6223
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6224
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6225
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6226
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6227
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6228
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6229
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6230
    }/*function_ulint_to_lword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6231
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6232
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6233
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6234
 *REAL_TO_BOOL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6235
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6236
    case function_real_to_bool :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6237
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6238
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6239
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6240
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6241
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6242
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6243
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6244
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6245
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6246
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6247
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6248
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6249
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6250
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6251
            if(search_expression_type->is_same_type(&search_constant_type_c::real_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6252
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6253
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6254
                symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6255
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6256
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6257
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6258
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6259
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6260
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6261
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6262
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6263
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6264
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6265
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6266
    }/*function_real_to_bool*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6267
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6268
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6269
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6270
 *REAL_TO_SINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6271
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6272
    case function_real_to_sint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6273
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6274
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6275
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6276
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6277
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6278
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6279
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6280
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6281
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6282
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6283
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6284
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6285
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6286
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6287
            if(search_expression_type->is_same_type(&search_constant_type_c::real_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6288
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6289
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6290
                symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6291
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6292
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6293
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6294
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6295
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6296
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6297
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6298
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6299
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6300
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6301
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6302
    }/*function_real_to_sint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6303
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6304
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6305
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6306
 *REAL_TO_INT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6307
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6308
    case function_real_to_int :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6309
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6310
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6311
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6312
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6313
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6314
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6315
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6316
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6317
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6318
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6319
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6320
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6321
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6322
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6323
            if(search_expression_type->is_same_type(&search_constant_type_c::real_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6324
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6325
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6326
                symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6327
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6328
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6329
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6330
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6331
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6332
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6333
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6334
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6335
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6336
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6337
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6338
    }/*function_real_to_int*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6339
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6340
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6341
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6342
 *REAL_TO_DINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6343
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6344
    case function_real_to_dint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6345
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6346
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6347
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6348
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6349
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6350
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6351
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6352
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6353
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6354
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6355
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6356
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6357
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6358
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6359
            if(search_expression_type->is_same_type(&search_constant_type_c::real_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6360
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6361
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6362
                symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6363
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6364
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6365
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6366
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6367
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6368
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6369
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6370
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6371
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6372
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6373
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6374
    }/*function_real_to_dint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6375
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6376
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6377
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6378
 *REAL_TO_LINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6379
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6380
    case function_real_to_lint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6381
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6382
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6383
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6384
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6385
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6386
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6387
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6388
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6389
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6390
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6391
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6392
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6393
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6394
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6395
            if(search_expression_type->is_same_type(&search_constant_type_c::real_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6396
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6397
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6398
                symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6399
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6400
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6401
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6402
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6403
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6404
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6405
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6406
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6407
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6408
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6409
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6410
    }/*function_real_to_lint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6411
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6412
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6413
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6414
 *REAL_TO_USINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6415
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6416
    case function_real_to_usint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6417
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6418
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6419
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6420
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6421
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6422
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6423
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6424
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6425
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6426
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6427
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6428
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6429
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6430
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6431
            if(search_expression_type->is_same_type(&search_constant_type_c::real_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6432
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6433
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6434
                symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6435
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6436
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6437
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6438
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6439
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6440
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6441
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6442
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6443
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6444
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6445
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6446
    }/*function_real_to_usint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6447
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6448
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6449
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6450
 *REAL_TO_UINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6451
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6452
    case function_real_to_uint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6453
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6454
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6455
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6456
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6457
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6458
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6459
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6460
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6461
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6462
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6463
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6464
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6465
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6466
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6467
            if(search_expression_type->is_same_type(&search_constant_type_c::real_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6468
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6469
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6470
                symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6471
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6472
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6473
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6474
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6475
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6476
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6477
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6478
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6479
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6480
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6481
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6482
    }/*function_real_to_uint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6483
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6484
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6485
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6486
 *REAL_TO_UDINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6487
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6488
    case function_real_to_udint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6489
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6490
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6491
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6492
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6493
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6494
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6495
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6496
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6497
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6498
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6499
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6500
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6501
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6502
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6503
            if(search_expression_type->is_same_type(&search_constant_type_c::real_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6504
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6505
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6506
                symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6507
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6508
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6509
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6510
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6511
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6512
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6513
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6514
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6515
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6516
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6517
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6518
    }/*function_real_to_udint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6519
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6520
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6521
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6522
 *REAL_TO_ULINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6523
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6524
    case function_real_to_ulint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6525
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6526
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6527
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6528
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6529
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6530
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6531
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6532
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6533
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6534
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6535
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6536
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6537
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6538
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6539
            if(search_expression_type->is_same_type(&search_constant_type_c::real_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6540
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6541
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6542
                symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6543
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6544
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6545
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6546
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6547
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6548
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6549
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6550
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6551
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6552
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6553
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6554
    }/*function_real_to_ulint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6555
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6556
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6557
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6558
 *REAL_TO_LREAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6559
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6560
    case function_real_to_lreal :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6561
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6562
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6563
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6564
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6565
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6566
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6567
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6568
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6569
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6570
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6571
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6572
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6573
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6574
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6575
            if(search_expression_type->is_same_type(&search_constant_type_c::real_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6576
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6577
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6578
                symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6579
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6580
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6581
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6582
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6583
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6584
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6585
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6586
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6587
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6588
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6589
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6590
    }/*function_real_to_lreal*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6591
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6592
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6593
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6594
 *REAL_TO_TIME
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6595
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6596
    case function_real_to_time :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6597
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6598
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6599
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6600
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6601
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6602
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6603
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6604
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6605
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6606
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6607
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6608
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6609
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6610
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6611
            if(search_expression_type->is_same_type(&search_constant_type_c::real_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6612
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6613
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6614
                symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6615
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6616
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6617
                s4o.print(")__real_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6618
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6619
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6620
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6621
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6622
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6623
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6624
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6625
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6626
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6627
    }/*function_real_to_time*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6628
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6629
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6630
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6631
 *REAL_TO_DATE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6632
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6633
    case function_real_to_date :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6634
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6635
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6636
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6637
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6638
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6639
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6640
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6641
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6642
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6643
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6644
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6645
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6646
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6647
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6648
            if(search_expression_type->is_same_type(&search_constant_type_c::real_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6649
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6650
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6651
                symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6652
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6653
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6654
                s4o.print(")__real_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6655
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6656
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6657
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6658
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6659
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6660
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6661
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6662
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6663
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6664
    }/*function_real_to_date*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6665
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6666
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6667
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6668
 *REAL_TO_TOD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6669
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6670
    case function_real_to_tod :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6671
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6672
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6673
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6674
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6675
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6676
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6677
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6678
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6679
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6680
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6681
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6682
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6683
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6684
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6685
            if(search_expression_type->is_same_type(&search_constant_type_c::real_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6686
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6687
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6688
                symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6689
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6690
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6691
                s4o.print(")__real_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6692
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6693
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6694
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6695
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6696
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6697
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6698
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6699
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6700
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6701
    }/*function_real_to_tod*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6702
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6703
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6704
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6705
 *REAL_TO_DT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6706
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6707
    case function_real_to_dt :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6708
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6709
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6710
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6711
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6712
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6713
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6714
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6715
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6716
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6717
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6718
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6719
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6720
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6721
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6722
            if(search_expression_type->is_same_type(&search_constant_type_c::real_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6723
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6724
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6725
                symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6726
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6727
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6728
                s4o.print(")__real_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6729
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6730
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6731
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6732
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6733
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6734
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6735
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6736
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6737
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6738
    }/*function_real_to_dt*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6739
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6740
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6741
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6742
 *REAL_TO_STRING
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6743
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6744
    case function_real_to_string :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6745
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6746
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6747
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6748
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6749
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6750
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6751
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6752
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6753
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6754
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6755
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6756
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6757
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6758
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6759
            if(search_expression_type->is_same_type(&search_constant_type_c::real_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6760
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6761
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6762
                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6763
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6764
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6765
                s4o.print(")__real_to_string(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6766
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6767
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6768
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6769
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6770
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6771
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6772
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6773
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6774
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6775
    }/*function_real_to_string*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6776
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6777
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6778
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6779
 *REAL_TO_BYTE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6780
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6781
    case function_real_to_byte :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6782
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6783
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6784
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6785
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6786
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6787
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6788
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6789
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6790
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6791
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6792
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6793
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6794
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6795
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6796
            if(search_expression_type->is_same_type(&search_constant_type_c::real_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6797
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6798
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6799
                symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6800
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6801
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6802
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6803
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6804
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6805
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6806
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6807
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6808
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6809
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6810
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6811
    }/*function_real_to_byte*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6812
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6813
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6814
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6815
 *REAL_TO_WORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6816
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6817
    case function_real_to_word :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6818
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6819
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6820
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6821
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6822
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6823
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6824
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6825
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6826
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6827
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6828
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6829
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6830
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6831
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6832
            if(search_expression_type->is_same_type(&search_constant_type_c::real_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6833
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6834
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6835
                symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6836
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6837
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6838
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6839
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6840
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6841
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6842
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6843
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6844
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6845
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6846
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6847
    }/*function_real_to_word*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6848
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6849
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6850
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6851
 *REAL_TO_DWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6852
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6853
    case function_real_to_dword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6854
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6855
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6856
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6857
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6858
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6859
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6860
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6861
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6862
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6863
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6864
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6865
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6866
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6867
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6868
            if(search_expression_type->is_same_type(&search_constant_type_c::real_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6869
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6870
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6871
                symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6872
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6873
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6874
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6875
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6876
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6877
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6878
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6879
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6880
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6881
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6882
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6883
    }/*function_real_to_dword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6884
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6885
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6886
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6887
 *REAL_TO_LWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6888
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6889
    case function_real_to_lword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6890
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6891
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6892
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6893
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6894
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6895
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6896
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6897
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6898
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6899
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6900
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6901
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6902
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6903
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6904
            if(search_expression_type->is_same_type(&search_constant_type_c::real_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6905
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6906
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6907
                symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6908
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6909
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6910
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6911
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6912
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6913
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6914
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6915
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6916
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6917
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6918
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6919
    }/*function_real_to_lword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6920
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6921
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6922
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6923
 *LREAL_TO_BOOL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6924
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6925
    case function_lreal_to_bool :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6926
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6927
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6928
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6929
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6930
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6931
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6932
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6933
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6934
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6935
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6936
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6937
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6938
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6939
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6940
            if(search_expression_type->is_same_type(&search_constant_type_c::lreal_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6941
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6942
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6943
                symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6944
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6945
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6946
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6947
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6948
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6949
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6950
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6951
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6952
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6953
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6954
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6955
    }/*function_lreal_to_bool*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6956
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6957
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6958
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6959
 *LREAL_TO_SINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6960
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6961
    case function_lreal_to_sint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6962
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6963
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6964
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6965
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6966
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6967
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6968
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6969
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6970
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6971
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6972
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6973
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6974
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6975
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6976
            if(search_expression_type->is_same_type(&search_constant_type_c::lreal_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6977
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6978
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6979
                symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6980
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6981
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6982
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6983
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6984
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6985
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6986
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6987
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6988
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6989
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6990
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6991
    }/*function_lreal_to_sint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6992
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6993
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6994
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6995
 *LREAL_TO_INT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6996
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6997
    case function_lreal_to_int :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6998
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  6999
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7000
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7001
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7002
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7003
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7004
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7005
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7006
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7007
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7008
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7009
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7010
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7011
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7012
            if(search_expression_type->is_same_type(&search_constant_type_c::lreal_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7013
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7014
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7015
                symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7016
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7017
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7018
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7019
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7020
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7021
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7022
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7023
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7024
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7025
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7026
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7027
    }/*function_lreal_to_int*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7028
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7029
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7030
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7031
 *LREAL_TO_DINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7032
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7033
    case function_lreal_to_dint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7034
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7035
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7036
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7037
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7038
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7039
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7040
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7041
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7042
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7043
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7044
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7045
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7046
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7047
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7048
            if(search_expression_type->is_same_type(&search_constant_type_c::lreal_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7049
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7050
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7051
                symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7052
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7053
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7054
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7055
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7056
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7057
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7058
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7059
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7060
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7061
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7062
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7063
    }/*function_lreal_to_dint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7064
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7065
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7066
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7067
 *LREAL_TO_LINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7068
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7069
    case function_lreal_to_lint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7070
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7071
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7072
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7073
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7074
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7075
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7076
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7077
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7078
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7079
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7080
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7081
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7082
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7083
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7084
            if(search_expression_type->is_same_type(&search_constant_type_c::lreal_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7085
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7086
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7087
                symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7088
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7089
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7090
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7091
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7092
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7093
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7094
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7095
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7096
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7097
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7098
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7099
    }/*function_lreal_to_lint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7100
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7101
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7102
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7103
 *LREAL_TO_USINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7104
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7105
    case function_lreal_to_usint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7106
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7107
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7108
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7109
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7110
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7111
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7112
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7113
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7114
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7115
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7116
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7117
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7118
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7119
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7120
            if(search_expression_type->is_same_type(&search_constant_type_c::lreal_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7121
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7122
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7123
                symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7124
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7125
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7126
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7127
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7128
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7129
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7130
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7131
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7132
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7133
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7134
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7135
    }/*function_lreal_to_usint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7136
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7137
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7138
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7139
 *LREAL_TO_UINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7140
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7141
    case function_lreal_to_uint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7142
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7143
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7144
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7145
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7146
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7147
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7148
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7149
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7150
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7151
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7152
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7153
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7154
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7155
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7156
            if(search_expression_type->is_same_type(&search_constant_type_c::lreal_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7157
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7158
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7159
                symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7160
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7161
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7162
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7163
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7164
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7165
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7166
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7167
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7168
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7169
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7170
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7171
    }/*function_lreal_to_uint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7172
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7173
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7174
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7175
 *LREAL_TO_UDINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7176
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7177
    case function_lreal_to_udint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7178
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7179
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7180
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7181
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7182
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7183
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7184
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7185
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7186
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7187
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7188
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7189
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7190
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7191
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7192
            if(search_expression_type->is_same_type(&search_constant_type_c::lreal_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7193
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7194
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7195
                symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7196
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7197
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7198
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7199
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7200
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7201
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7202
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7203
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7204
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7205
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7206
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7207
    }/*function_lreal_to_udint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7208
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7209
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7210
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7211
 *LREAL_TO_ULINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7212
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7213
    case function_lreal_to_ulint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7214
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7215
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7216
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7217
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7218
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7219
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7220
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7221
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7222
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7223
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7224
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7225
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7226
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7227
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7228
            if(search_expression_type->is_same_type(&search_constant_type_c::lreal_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7229
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7230
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7231
                symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7232
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7233
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7234
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7235
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7236
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7237
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7238
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7239
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7240
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7241
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7242
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7243
    }/*function_lreal_to_ulint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7244
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7245
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7246
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7247
 *LREAL_TO_REAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7248
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7249
    case function_lreal_to_real :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7250
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7251
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7252
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7253
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7254
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7255
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7256
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7257
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7258
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7259
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7260
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7261
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7262
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7263
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7264
            if(search_expression_type->is_same_type(&search_constant_type_c::lreal_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7265
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7266
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7267
                symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7268
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7269
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7270
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7271
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7272
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7273
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7274
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7275
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7276
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7277
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7278
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7279
    }/*function_lreal_to_real*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7280
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7281
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7282
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7283
 *LREAL_TO_TIME
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7284
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7285
    case function_lreal_to_time :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7286
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7287
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7288
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7289
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7290
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7291
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7292
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7293
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7294
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7295
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7296
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7297
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7298
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7299
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7300
            if(search_expression_type->is_same_type(&search_constant_type_c::lreal_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7301
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7302
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7303
                symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7304
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7305
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7306
                s4o.print(")__real_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7307
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7308
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7309
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7310
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7311
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7312
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7313
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7314
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7315
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7316
    }/*function_lreal_to_time*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7317
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7318
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7319
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7320
 *LREAL_TO_DATE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7321
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7322
    case function_lreal_to_date :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7323
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7324
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7325
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7326
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7327
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7328
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7329
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7330
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7331
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7332
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7333
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7334
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7335
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7336
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7337
            if(search_expression_type->is_same_type(&search_constant_type_c::lreal_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7338
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7339
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7340
                symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7341
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7342
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7343
                s4o.print(")__real_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7344
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7345
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7346
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7347
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7348
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7349
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7350
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7351
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7352
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7353
    }/*function_lreal_to_date*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7354
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7355
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7356
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7357
 *LREAL_TO_TOD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7358
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7359
    case function_lreal_to_tod :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7360
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7361
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7362
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7363
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7364
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7365
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7366
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7367
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7368
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7369
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7370
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7371
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7372
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7373
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7374
            if(search_expression_type->is_same_type(&search_constant_type_c::lreal_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7375
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7376
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7377
                symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7378
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7379
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7380
                s4o.print(")__real_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7381
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7382
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7383
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7384
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7385
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7386
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7387
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7388
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7389
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7390
    }/*function_lreal_to_tod*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7391
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7392
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7393
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7394
 *LREAL_TO_DT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7395
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7396
    case function_lreal_to_dt :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7397
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7398
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7399
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7400
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7401
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7402
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7403
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7404
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7405
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7406
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7407
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7408
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7409
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7410
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7411
            if(search_expression_type->is_same_type(&search_constant_type_c::lreal_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7412
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7413
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7414
                symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7415
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7416
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7417
                s4o.print(")__real_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7418
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7419
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7420
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7421
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7422
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7423
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7424
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7425
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7426
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7427
    }/*function_lreal_to_dt*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7428
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7429
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7430
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7431
 *LREAL_TO_STRING
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7432
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7433
    case function_lreal_to_string :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7434
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7435
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7436
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7437
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7438
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7439
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7440
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7441
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7442
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7443
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7444
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7445
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7446
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7447
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7448
            if(search_expression_type->is_same_type(&search_constant_type_c::lreal_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7449
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7450
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7451
                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7452
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7453
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7454
                s4o.print(")__real_to_string(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7455
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7456
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7457
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7458
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7459
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7460
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7461
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7462
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7463
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7464
    }/*function_lreal_to_string*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7465
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7466
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7467
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7468
 *LREAL_TO_BYTE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7469
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7470
    case function_lreal_to_byte :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7471
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7472
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7473
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7474
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7475
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7476
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7477
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7478
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7479
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7480
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7481
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7482
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7483
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7484
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7485
            if(search_expression_type->is_same_type(&search_constant_type_c::lreal_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7486
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7487
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7488
                symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7489
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7490
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7491
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7492
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7493
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7494
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7495
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7496
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7497
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7498
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7499
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7500
    }/*function_lreal_to_byte*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7501
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7502
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7503
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7504
 *LREAL_TO_WORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7505
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7506
    case function_lreal_to_word :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7507
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7508
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7509
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7510
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7511
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7512
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7513
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7514
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7515
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7516
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7517
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7518
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7519
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7520
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7521
            if(search_expression_type->is_same_type(&search_constant_type_c::lreal_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7522
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7523
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7524
                symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7525
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7526
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7527
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7528
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7529
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7530
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7531
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7532
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7533
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7534
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7535
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7536
    }/*function_lreal_to_word*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7537
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7538
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7539
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7540
 *LREAL_TO_DWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7541
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7542
    case function_lreal_to_dword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7543
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7544
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7545
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7546
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7547
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7548
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7549
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7550
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7551
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7552
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7553
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7554
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7555
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7556
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7557
            if(search_expression_type->is_same_type(&search_constant_type_c::lreal_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7558
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7559
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7560
                symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7561
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7562
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7563
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7564
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7565
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7566
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7567
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7568
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7569
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7570
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7571
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7572
    }/*function_lreal_to_dword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7573
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7574
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7575
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7576
 *LREAL_TO_LWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7577
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7578
    case function_lreal_to_lword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7579
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7580
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7581
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7582
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7583
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7584
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7585
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7586
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7587
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7588
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7589
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7590
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7591
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7592
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7593
            if(search_expression_type->is_same_type(&search_constant_type_c::lreal_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7594
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7595
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7596
                symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7597
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7598
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7599
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7600
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7601
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7602
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7603
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7604
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7605
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7606
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7607
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7608
    }/*function_lreal_to_lword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7609
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7610
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7611
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7612
 *TIME_TO_SINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7613
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7614
    case function_time_to_sint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7615
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7616
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7617
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7618
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7619
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7620
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7621
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7622
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7623
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7624
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7625
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7626
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7627
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7628
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7629
            if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7630
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7631
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7632
                symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7633
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7634
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7635
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7636
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7637
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7638
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7639
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7640
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7641
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7642
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7643
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7644
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7645
    }/*function_time_to_sint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7646
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7647
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7648
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7649
 *TIME_TO_INT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7650
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7651
    case function_time_to_int :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7652
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7653
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7654
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7655
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7656
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7657
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7658
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7659
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7660
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7661
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7662
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7663
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7664
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7665
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7666
            if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7667
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7668
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7669
                symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7670
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7671
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7672
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7673
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7674
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7675
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7676
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7677
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7678
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7679
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7680
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7681
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7682
    }/*function_time_to_int*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7683
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7684
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7685
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7686
 *TIME_TO_DINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7687
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7688
    case function_time_to_dint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7689
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7690
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7691
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7692
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7693
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7694
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7695
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7696
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7697
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7698
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7699
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7700
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7701
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7702
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7703
            if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7704
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7705
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7706
                symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7707
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7708
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7709
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7710
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7711
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7712
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7713
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7714
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7715
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7716
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7717
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7718
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7719
    }/*function_time_to_dint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7720
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7721
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7722
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7723
 *TIME_TO_LINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7724
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7725
    case function_time_to_lint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7726
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7727
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7728
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7729
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7730
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7731
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7732
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7733
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7734
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7735
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7736
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7737
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7738
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7739
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7740
            if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7741
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7742
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7743
                symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7744
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7745
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7746
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7747
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7748
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7749
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7750
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7751
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7752
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7753
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7754
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7755
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7756
    }/*function_time_to_lint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7757
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7758
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7759
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7760
 *TIME_TO_USINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7761
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7762
    case function_time_to_usint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7763
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7764
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7765
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7766
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7767
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7768
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7769
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7770
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7771
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7772
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7773
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7774
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7775
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7776
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7777
            if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7778
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7779
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7780
                symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7781
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7782
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7783
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7784
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7785
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7786
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7787
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7788
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7789
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7790
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7791
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7792
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7793
    }/*function_time_to_usint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7794
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7795
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7796
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7797
 *TIME_TO_UINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7798
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7799
    case function_time_to_uint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7800
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7801
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7802
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7803
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7804
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7805
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7806
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7807
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7808
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7809
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7810
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7811
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7812
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7813
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7814
            if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7815
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7816
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7817
                symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7818
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7819
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7820
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7821
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7822
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7823
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7824
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7825
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7826
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7827
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7828
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7829
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7830
    }/*function_time_to_uint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7831
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7832
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7833
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7834
 *TIME_TO_UDINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7835
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7836
    case function_time_to_udint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7837
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7838
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7839
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7840
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7841
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7842
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7843
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7844
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7845
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7846
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7847
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7848
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7849
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7850
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7851
            if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7852
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7853
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7854
                symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7855
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7856
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7857
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7858
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7859
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7860
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7861
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7862
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7863
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7864
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7865
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7866
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7867
    }/*function_time_to_udint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7868
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7869
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7870
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7871
 *TIME_TO_ULINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7872
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7873
    case function_time_to_ulint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7874
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7875
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7876
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7877
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7878
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7879
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7880
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7881
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7882
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7883
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7884
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7885
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7886
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7887
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7888
            if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7889
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7890
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7891
                symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7892
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7893
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7894
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7895
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7896
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7897
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7898
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7899
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7900
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7901
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7902
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7903
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7904
    }/*function_time_to_ulint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7905
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7906
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7907
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7908
 *TIME_TO_REAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7909
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7910
    case function_time_to_real :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7911
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7912
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7913
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7914
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7915
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7916
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7917
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7918
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7919
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7920
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7921
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7922
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7923
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7924
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7925
            if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7926
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7927
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7928
                symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7929
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7930
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7931
                s4o.print(")__time_to_real(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7932
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7933
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7934
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7935
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7936
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7937
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7938
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7939
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7940
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7941
    }/*function_time_to_real*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7942
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7943
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7944
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7945
 *TIME_TO_LREAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7946
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7947
    case function_time_to_lreal :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7948
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7949
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7950
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7951
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7952
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7953
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7954
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7955
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7956
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7957
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7958
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7959
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7960
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7961
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7962
            if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7963
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7964
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7965
                symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7966
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7967
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7968
                s4o.print(")__time_to_real(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7969
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7970
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7971
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7972
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7973
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7974
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7975
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7976
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7977
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7978
    }/*function_time_to_lreal*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7979
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7980
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7981
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7982
 *TIME_TO_STRING
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7983
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7984
    case function_time_to_string :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7985
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7986
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7987
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7988
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7989
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7990
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7991
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7992
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7993
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7994
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7995
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7996
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7997
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7998
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  7999
            if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8000
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8001
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8002
                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8003
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8004
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8005
                s4o.print(")__time_to_string(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8006
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8007
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8008
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8009
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8010
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8011
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8012
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8013
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8014
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8015
    }/*function_time_to_string*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8016
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8017
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8018
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8019
 *TIME_TO_BYTE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8020
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8021
    case function_time_to_byte :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8022
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8023
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8024
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8025
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8026
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8027
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8028
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8029
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8030
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8031
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8032
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8033
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8034
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8035
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8036
            if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8037
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8038
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8039
                symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8040
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8041
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8042
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8043
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8044
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8045
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8046
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8047
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8048
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8049
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8050
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8051
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8052
    }/*function_time_to_byte*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8053
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8054
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8055
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8056
 *TIME_TO_WORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8057
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8058
    case function_time_to_word :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8059
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8060
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8061
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8062
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8063
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8064
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8065
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8066
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8067
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8068
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8069
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8070
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8071
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8072
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8073
            if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8074
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8075
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8076
                symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8077
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8078
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8079
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8080
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8081
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8082
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8083
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8084
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8085
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8086
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8087
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8088
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8089
    }/*function_time_to_word*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8090
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8091
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8092
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8093
 *TIME_TO_DWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8094
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8095
    case function_time_to_dword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8096
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8097
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8098
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8099
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8100
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8101
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8102
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8103
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8104
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8105
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8106
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8107
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8108
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8109
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8110
            if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8111
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8112
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8113
                symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8114
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8115
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8116
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8117
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8118
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8119
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8120
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8121
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8122
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8123
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8124
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8125
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8126
    }/*function_time_to_dword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8127
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8128
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8129
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8130
 *TIME_TO_LWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8131
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8132
    case function_time_to_lword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8133
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8134
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8135
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8136
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8137
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8138
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8139
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8140
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8141
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8142
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8143
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8144
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8145
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8146
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8147
            if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8148
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8149
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8150
                symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8151
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8152
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8153
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8154
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8155
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8156
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8157
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8158
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8159
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8160
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8161
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8162
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8163
    }/*function_time_to_lword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8164
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8165
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8166
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8167
 *DATE_TO_SINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8168
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8169
    case function_date_to_sint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8170
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8171
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8172
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8173
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8174
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8175
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8176
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8177
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8178
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8179
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8180
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8181
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8182
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8183
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8184
            if(search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8185
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8186
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8187
                symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8188
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8189
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8190
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8191
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8192
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8193
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8194
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8195
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8196
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8197
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8198
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8199
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8200
    }/*function_date_to_sint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8201
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8202
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8203
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8204
 *DATE_TO_INT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8205
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8206
    case function_date_to_int :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8207
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8208
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8209
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8210
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8211
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8212
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8213
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8214
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8215
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8216
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8217
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8218
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8219
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8220
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8221
            if(search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8222
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8223
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8224
                symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8225
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8226
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8227
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8228
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8229
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8230
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8231
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8232
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8233
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8234
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8235
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8236
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8237
    }/*function_date_to_int*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8238
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8239
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8240
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8241
 *DATE_TO_DINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8242
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8243
    case function_date_to_dint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8244
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8245
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8246
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8247
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8248
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8249
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8250
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8251
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8252
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8253
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8254
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8255
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8256
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8257
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8258
            if(search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8259
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8260
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8261
                symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8262
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8263
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8264
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8265
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8266
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8267
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8268
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8269
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8270
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8271
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8272
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8273
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8274
    }/*function_date_to_dint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8275
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8276
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8277
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8278
 *DATE_TO_LINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8279
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8280
    case function_date_to_lint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8281
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8282
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8283
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8284
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8285
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8286
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8287
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8288
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8289
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8290
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8291
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8292
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8293
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8294
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8295
            if(search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8296
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8297
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8298
                symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8299
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8300
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8301
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8302
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8303
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8304
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8305
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8306
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8307
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8308
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8309
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8310
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8311
    }/*function_date_to_lint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8312
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8313
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8314
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8315
 *DATE_TO_USINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8316
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8317
    case function_date_to_usint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8318
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8319
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8320
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8321
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8322
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8323
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8324
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8325
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8326
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8327
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8328
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8329
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8330
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8331
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8332
            if(search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8333
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8334
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8335
                symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8336
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8337
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8338
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8339
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8340
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8341
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8342
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8343
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8344
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8345
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8346
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8347
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8348
    }/*function_date_to_usint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8349
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8350
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8351
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8352
 *DATE_TO_UINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8353
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8354
    case function_date_to_uint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8355
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8356
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8357
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8358
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8359
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8360
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8361
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8362
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8363
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8364
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8365
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8366
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8367
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8368
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8369
            if(search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8370
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8371
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8372
                symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8373
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8374
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8375
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8376
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8377
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8378
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8379
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8380
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8381
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8382
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8383
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8384
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8385
    }/*function_date_to_uint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8386
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8387
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8388
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8389
 *DATE_TO_UDINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8390
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8391
    case function_date_to_udint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8392
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8393
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8394
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8395
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8396
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8397
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8398
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8399
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8400
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8401
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8402
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8403
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8404
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8405
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8406
            if(search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8407
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8408
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8409
                symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8410
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8411
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8412
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8413
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8414
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8415
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8416
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8417
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8418
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8419
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8420
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8421
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8422
    }/*function_date_to_udint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8423
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8424
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8425
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8426
 *DATE_TO_ULINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8427
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8428
    case function_date_to_ulint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8429
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8430
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8431
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8432
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8433
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8434
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8435
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8436
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8437
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8438
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8439
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8440
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8441
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8442
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8443
            if(search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8444
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8445
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8446
                symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8447
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8448
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8449
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8450
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8451
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8452
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8453
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8454
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8455
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8456
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8457
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8458
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8459
    }/*function_date_to_ulint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8460
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8461
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8462
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8463
 *DATE_TO_REAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8464
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8465
    case function_date_to_real :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8466
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8467
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8468
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8469
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8470
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8471
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8472
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8473
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8474
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8475
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8476
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8477
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8478
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8479
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8480
            if(search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8481
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8482
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8483
                symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8484
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8485
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8486
                s4o.print(")__time_to_real(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8487
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8488
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8489
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8490
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8491
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8492
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8493
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8494
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8495
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8496
    }/*function_date_to_real*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8497
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8498
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8499
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8500
 *DATE_TO_LREAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8501
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8502
    case function_date_to_lreal :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8503
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8504
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8505
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8506
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8507
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8508
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8509
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8510
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8511
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8512
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8513
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8514
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8515
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8516
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8517
            if(search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8518
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8519
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8520
                symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8521
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8522
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8523
                s4o.print(")__time_to_real(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8524
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8525
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8526
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8527
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8528
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8529
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8530
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8531
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8532
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8533
    }/*function_date_to_lreal*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8534
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8535
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8536
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8537
 *DATE_TO_STRING
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8538
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8539
    case function_date_to_string :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8540
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8541
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8542
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8543
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8544
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8545
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8546
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8547
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8548
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8549
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8550
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8551
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8552
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8553
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8554
            if(search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8555
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8556
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8557
                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8558
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8559
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8560
                s4o.print(")__date_to_string(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8561
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8562
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8563
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8564
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8565
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8566
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8567
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8568
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8569
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8570
    }/*function_date_to_string*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8571
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8572
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8573
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8574
 *DATE_TO_BYTE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8575
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8576
    case function_date_to_byte :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8577
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8578
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8579
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8580
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8581
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8582
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8583
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8584
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8585
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8586
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8587
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8588
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8589
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8590
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8591
            if(search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8592
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8593
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8594
                symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8595
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8596
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8597
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8598
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8599
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8600
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8601
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8602
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8603
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8604
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8605
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8606
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8607
    }/*function_date_to_byte*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8608
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8609
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8610
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8611
 *DATE_TO_WORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8612
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8613
    case function_date_to_word :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8614
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8615
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8616
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8617
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8618
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8619
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8620
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8621
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8622
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8623
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8624
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8625
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8626
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8627
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8628
            if(search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8629
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8630
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8631
                symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8632
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8633
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8634
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8635
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8636
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8637
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8638
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8639
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8640
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8641
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8642
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8643
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8644
    }/*function_date_to_word*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8645
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8646
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8647
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8648
 *DATE_TO_DWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8649
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8650
    case function_date_to_dword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8651
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8652
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8653
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8654
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8655
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8656
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8657
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8658
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8659
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8660
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8661
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8662
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8663
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8664
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8665
            if(search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8666
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8667
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8668
                symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8669
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8670
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8671
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8672
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8673
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8674
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8675
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8676
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8677
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8678
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8679
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8680
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8681
    }/*function_date_to_dword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8682
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8683
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8684
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8685
 *DATE_TO_LWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8686
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8687
    case function_date_to_lword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8688
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8689
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8690
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8691
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8692
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8693
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8694
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8695
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8696
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8697
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8698
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8699
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8700
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8701
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8702
            if(search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8703
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8704
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8705
                symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8706
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8707
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8708
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8709
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8710
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8711
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8712
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8713
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8714
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8715
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8716
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8717
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8718
    }/*function_date_to_lword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8719
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8720
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8721
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8722
 *TOD_TO_SINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8723
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8724
    case function_tod_to_sint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8725
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8726
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8727
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8728
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8729
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8730
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8731
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8732
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8733
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8734
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8735
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8736
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8737
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8738
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8739
            if(search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8740
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8741
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8742
                symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8743
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8744
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8745
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8746
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8747
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8748
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8749
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8750
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8751
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8752
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8753
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8754
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8755
    }/*function_tod_to_sint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8756
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8757
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8758
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8759
 *TOD_TO_INT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8760
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8761
    case function_tod_to_int :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8762
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8763
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8764
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8765
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8766
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8767
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8768
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8769
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8770
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8771
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8772
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8773
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8774
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8775
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8776
            if(search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8777
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8778
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8779
                symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8780
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8781
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8782
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8783
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8784
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8785
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8786
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8787
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8788
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8789
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8790
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8791
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8792
    }/*function_tod_to_int*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8793
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8794
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8795
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8796
 *TOD_TO_DINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8797
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8798
    case function_tod_to_dint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8799
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8800
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8801
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8802
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8803
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8804
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8805
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8806
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8807
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8808
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8809
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8810
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8811
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8812
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8813
            if(search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8814
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8815
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8816
                symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8817
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8818
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8819
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8820
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8821
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8822
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8823
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8824
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8825
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8826
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8827
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8828
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8829
    }/*function_tod_to_dint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8830
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8831
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8832
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8833
 *TOD_TO_LINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8834
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8835
    case function_tod_to_lint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8836
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8837
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8838
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8839
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8840
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8841
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8842
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8843
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8844
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8845
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8846
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8847
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8848
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8849
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8850
            if(search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8851
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8852
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8853
                symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8854
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8855
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8856
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8857
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8858
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8859
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8860
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8861
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8862
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8863
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8864
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8865
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8866
    }/*function_tod_to_lint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8867
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8868
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8869
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8870
 *TOD_TO_USINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8871
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8872
    case function_tod_to_usint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8873
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8874
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8875
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8876
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8877
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8878
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8879
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8880
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8881
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8882
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8883
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8884
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8885
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8886
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8887
            if(search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8888
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8889
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8890
                symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8891
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8892
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8893
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8894
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8895
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8896
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8897
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8898
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8899
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8900
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8901
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8902
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8903
    }/*function_tod_to_usint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8904
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8905
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8906
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8907
 *TOD_TO_UINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8908
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8909
    case function_tod_to_uint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8910
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8911
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8912
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8913
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8914
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8915
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8916
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8917
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8918
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8919
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8920
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8921
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8922
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8923
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8924
            if(search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8925
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8926
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8927
                symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8928
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8929
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8930
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8931
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8932
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8933
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8934
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8935
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8936
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8937
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8938
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8939
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8940
    }/*function_tod_to_uint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8941
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8942
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8943
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8944
 *TOD_TO_UDINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8945
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8946
    case function_tod_to_udint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8947
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8948
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8949
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8950
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8951
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8952
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8953
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8954
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8955
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8956
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8957
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8958
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8959
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8960
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8961
            if(search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8962
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8963
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8964
                symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8965
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8966
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8967
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8968
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8969
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8970
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8971
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8972
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8973
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8974
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8975
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8976
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8977
    }/*function_tod_to_udint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8978
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8979
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8980
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8981
 *TOD_TO_ULINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8982
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8983
    case function_tod_to_ulint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8984
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8985
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8986
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8987
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8988
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8989
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8990
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8991
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8992
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8993
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8994
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8995
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8996
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8997
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8998
            if(search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  8999
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9000
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9001
                symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9002
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9003
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9004
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9005
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9006
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9007
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9008
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9009
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9010
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9011
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9012
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9013
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9014
    }/*function_tod_to_ulint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9015
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9016
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9017
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9018
 *TOD_TO_REAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9019
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9020
    case function_tod_to_real :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9021
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9022
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9023
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9024
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9025
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9026
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9027
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9028
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9029
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9030
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9031
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9032
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9033
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9034
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9035
            if(search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9036
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9037
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9038
                symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9039
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9040
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9041
                s4o.print(")__time_to_real(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9042
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9043
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9044
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9045
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9046
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9047
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9048
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9049
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9050
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9051
    }/*function_tod_to_real*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9052
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9053
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9054
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9055
 *TOD_TO_LREAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9056
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9057
    case function_tod_to_lreal :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9058
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9059
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9060
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9061
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9062
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9063
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9064
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9065
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9066
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9067
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9068
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9069
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9070
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9071
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9072
            if(search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9073
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9074
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9075
                symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9076
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9077
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9078
                s4o.print(")__time_to_real(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9079
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9080
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9081
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9082
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9083
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9084
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9085
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9086
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9087
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9088
    }/*function_tod_to_lreal*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9089
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9090
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9091
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9092
 *TOD_TO_STRING
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9093
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9094
    case function_tod_to_string :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9095
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9096
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9097
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9098
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9099
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9100
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9101
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9102
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9103
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9104
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9105
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9106
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9107
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9108
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9109
            if(search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9110
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9111
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9112
                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9113
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9114
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9115
                s4o.print(")__tod_to_string(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9116
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9117
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9118
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9119
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9120
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9121
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9122
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9123
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9124
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9125
    }/*function_tod_to_string*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9126
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9127
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9128
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9129
 *TOD_TO_BYTE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9130
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9131
    case function_tod_to_byte :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9132
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9133
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9134
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9135
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9136
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9137
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9138
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9139
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9140
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9141
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9142
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9143
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9144
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9145
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9146
            if(search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9147
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9148
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9149
                symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9150
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9151
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9152
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9153
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9154
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9155
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9156
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9157
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9158
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9159
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9160
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9161
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9162
    }/*function_tod_to_byte*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9163
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9164
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9165
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9166
 *TOD_TO_WORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9167
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9168
    case function_tod_to_word :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9169
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9170
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9171
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9172
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9173
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9174
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9175
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9176
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9177
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9178
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9179
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9180
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9181
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9182
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9183
            if(search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9184
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9185
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9186
                symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9187
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9188
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9189
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9190
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9191
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9192
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9193
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9194
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9195
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9196
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9197
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9198
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9199
    }/*function_tod_to_word*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9200
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9201
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9202
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9203
 *TOD_TO_DWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9204
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9205
    case function_tod_to_dword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9206
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9207
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9208
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9209
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9210
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9211
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9212
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9213
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9214
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9215
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9216
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9217
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9218
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9219
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9220
            if(search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9221
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9222
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9223
                symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9224
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9225
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9226
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9227
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9228
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9229
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9230
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9231
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9232
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9233
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9234
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9235
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9236
    }/*function_tod_to_dword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9237
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9238
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9239
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9240
 *TOD_TO_LWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9241
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9242
    case function_tod_to_lword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9243
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9244
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9245
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9246
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9247
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9248
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9249
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9250
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9251
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9252
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9253
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9254
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9255
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9256
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9257
            if(search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9258
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9259
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9260
                symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9261
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9262
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9263
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9264
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9265
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9266
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9267
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9268
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9269
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9270
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9271
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9272
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9273
    }/*function_tod_to_lword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9274
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9275
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9276
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9277
 *DT_TO_SINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9278
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9279
    case function_dt_to_sint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9280
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9281
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9282
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9283
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9284
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9285
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9286
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9287
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9288
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9289
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9290
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9291
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9292
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9293
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9294
            if(search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9295
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9296
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9297
                symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9298
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9299
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9300
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9301
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9302
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9303
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9304
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9305
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9306
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9307
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9308
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9309
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9310
    }/*function_dt_to_sint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9311
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9312
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9313
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9314
 *DT_TO_INT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9315
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9316
    case function_dt_to_int :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9317
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9318
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9319
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9320
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9321
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9322
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9323
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9324
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9325
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9326
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9327
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9328
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9329
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9330
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9331
            if(search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9332
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9333
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9334
                symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9335
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9336
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9337
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9338
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9339
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9340
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9341
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9342
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9343
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9344
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9345
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9346
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9347
    }/*function_dt_to_int*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9348
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9349
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9350
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9351
 *DT_TO_DINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9352
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9353
    case function_dt_to_dint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9354
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9355
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9356
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9357
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9358
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9359
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9360
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9361
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9362
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9363
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9364
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9365
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9366
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9367
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9368
            if(search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9369
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9370
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9371
                symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9372
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9373
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9374
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9375
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9376
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9377
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9378
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9379
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9380
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9381
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9382
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9383
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9384
    }/*function_dt_to_dint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9385
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9386
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9387
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9388
 *DT_TO_LINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9389
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9390
    case function_dt_to_lint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9391
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9392
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9393
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9394
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9395
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9396
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9397
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9398
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9399
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9400
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9401
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9402
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9403
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9404
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9405
            if(search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9406
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9407
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9408
                symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9409
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9410
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9411
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9412
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9413
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9414
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9415
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9416
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9417
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9418
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9419
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9420
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9421
    }/*function_dt_to_lint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9422
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9423
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9424
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9425
 *DT_TO_USINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9426
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9427
    case function_dt_to_usint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9428
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9429
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9430
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9431
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9432
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9433
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9434
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9435
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9436
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9437
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9438
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9439
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9440
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9441
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9442
            if(search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9443
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9444
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9445
                symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9446
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9447
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9448
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9449
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9450
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9451
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9452
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9453
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9454
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9455
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9456
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9457
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9458
    }/*function_dt_to_usint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9459
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9460
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9461
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9462
 *DT_TO_UINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9463
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9464
    case function_dt_to_uint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9465
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9466
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9467
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9468
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9469
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9470
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9471
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9472
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9473
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9474
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9475
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9476
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9477
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9478
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9479
            if(search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9480
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9481
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9482
                symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9483
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9484
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9485
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9486
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9487
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9488
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9489
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9490
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9491
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9492
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9493
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9494
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9495
    }/*function_dt_to_uint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9496
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9497
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9498
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9499
 *DT_TO_UDINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9500
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9501
    case function_dt_to_udint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9502
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9503
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9504
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9505
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9506
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9507
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9508
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9509
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9510
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9511
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9512
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9513
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9514
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9515
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9516
            if(search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9517
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9518
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9519
                symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9520
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9521
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9522
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9523
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9524
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9525
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9526
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9527
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9528
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9529
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9530
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9531
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9532
    }/*function_dt_to_udint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9533
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9534
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9535
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9536
 *DT_TO_ULINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9537
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9538
    case function_dt_to_ulint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9539
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9540
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9541
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9542
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9543
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9544
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9545
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9546
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9547
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9548
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9549
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9550
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9551
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9552
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9553
            if(search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9554
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9555
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9556
                symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9557
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9558
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9559
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9560
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9561
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9562
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9563
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9564
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9565
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9566
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9567
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9568
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9569
    }/*function_dt_to_ulint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9570
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9571
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9572
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9573
 *DT_TO_REAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9574
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9575
    case function_dt_to_real :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9576
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9577
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9578
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9579
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9580
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9581
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9582
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9583
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9584
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9585
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9586
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9587
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9588
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9589
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9590
            if(search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9591
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9592
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9593
                symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9594
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9595
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9596
                s4o.print(")__time_to_real(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9597
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9598
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9599
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9600
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9601
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9602
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9603
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9604
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9605
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9606
    }/*function_dt_to_real*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9607
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9608
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9609
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9610
 *DT_TO_LREAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9611
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9612
    case function_dt_to_lreal :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9613
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9614
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9615
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9616
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9617
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9618
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9619
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9620
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9621
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9622
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9623
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9624
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9625
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9626
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9627
            if(search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9628
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9629
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9630
                symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9631
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9632
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9633
                s4o.print(")__time_to_real(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9634
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9635
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9636
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9637
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9638
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9639
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9640
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9641
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9642
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9643
    }/*function_dt_to_lreal*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9644
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9645
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9646
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9647
 *DT_TO_STRING
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9648
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9649
    case function_dt_to_string :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9650
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9651
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9652
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9653
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9654
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9655
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9656
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9657
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9658
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9659
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9660
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9661
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9662
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9663
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9664
            if(search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9665
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9666
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9667
                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9668
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9669
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9670
                s4o.print(")__dt_to_string(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9671
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9672
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9673
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9674
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9675
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9676
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9677
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9678
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9679
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9680
    }/*function_dt_to_string*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9681
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9682
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9683
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9684
 *DT_TO_BYTE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9685
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9686
    case function_dt_to_byte :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9687
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9688
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9689
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9690
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9691
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9692
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9693
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9694
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9695
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9696
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9697
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9698
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9699
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9700
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9701
            if(search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9702
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9703
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9704
                symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9705
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9706
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9707
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9708
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9709
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9710
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9711
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9712
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9713
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9714
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9715
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9716
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9717
    }/*function_dt_to_byte*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9718
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9719
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9720
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9721
 *DT_TO_WORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9722
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9723
    case function_dt_to_word :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9724
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9725
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9726
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9727
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9728
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9729
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9730
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9731
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9732
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9733
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9734
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9735
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9736
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9737
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9738
            if(search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9739
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9740
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9741
                symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9742
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9743
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9744
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9745
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9746
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9747
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9748
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9749
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9750
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9751
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9752
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9753
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9754
    }/*function_dt_to_word*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9755
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9756
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9757
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9758
 *DT_TO_DWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9759
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9760
    case function_dt_to_dword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9761
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9762
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9763
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9764
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9765
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9766
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9767
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9768
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9769
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9770
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9771
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9772
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9773
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9774
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9775
            if(search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9776
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9777
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9778
                symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9779
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9780
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9781
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9782
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9783
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9784
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9785
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9786
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9787
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9788
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9789
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9790
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9791
    }/*function_dt_to_dword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9792
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9793
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9794
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9795
 *DT_TO_LWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9796
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9797
    case function_dt_to_lword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9798
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9799
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9800
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9801
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9802
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9803
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9804
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9805
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9806
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9807
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9808
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9809
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9810
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9811
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9812
            if(search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9813
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9814
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9815
                symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9816
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9817
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9818
                s4o.print(")__time_to_int(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9819
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9820
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9821
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9822
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9823
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9824
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9825
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9826
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9827
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9828
    }/*function_dt_to_lword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9829
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9830
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9831
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9832
 *STRING_TO_BOOL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9833
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9834
    case function_string_to_bool :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9835
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9836
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9837
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9838
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9839
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9840
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9841
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9842
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9843
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9844
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9845
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9846
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9847
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9848
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9849
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9850
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9851
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9852
                symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9853
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9854
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9855
                s4o.print(")__string_to_bool(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9856
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9857
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9858
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9859
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9860
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9861
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9862
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9863
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9864
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9865
    }/*function_string_to_bool*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9866
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9867
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9868
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9869
 *STRING_TO_SINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9870
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9871
    case function_string_to_sint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9872
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9873
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9874
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9875
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9876
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9877
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9878
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9879
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9880
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9881
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9882
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9883
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9884
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9885
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9886
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9887
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9888
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9889
                symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9890
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9891
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9892
                s4o.print(")__string_to_sint(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9893
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9894
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9895
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9896
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9897
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9898
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9899
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9900
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9901
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9902
    }/*function_string_to_sint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9903
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9904
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9905
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9906
 *STRING_TO_INT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9907
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9908
    case function_string_to_int :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9909
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9910
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9911
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9912
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9913
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9914
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9915
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9916
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9917
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9918
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9919
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9920
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9921
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9922
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9923
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9924
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9925
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9926
                symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9927
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9928
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9929
                s4o.print(")__string_to_sint(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9930
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9931
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9932
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9933
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9934
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9935
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9936
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9937
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9938
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9939
    }/*function_string_to_int*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9940
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9941
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9942
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9943
 *STRING_TO_DINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9944
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9945
    case function_string_to_dint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9946
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9947
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9948
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9949
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9950
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9951
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9952
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9953
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9954
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9955
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9956
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9957
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9958
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9959
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9960
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9961
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9962
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9963
                symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9964
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9965
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9966
                s4o.print(")__string_to_sint(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9967
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9968
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9969
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9970
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9971
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9972
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9973
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9974
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9975
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9976
    }/*function_string_to_dint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9977
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9978
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9979
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9980
 *STRING_TO_LINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9981
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9982
    case function_string_to_lint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9983
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9984
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9985
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9986
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9987
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9988
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9989
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9990
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9991
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9992
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9993
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9994
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9995
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9996
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9997
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9998
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
  9999
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10000
                symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10001
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10002
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10003
                s4o.print(")__string_to_sint(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10004
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10005
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10006
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10007
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10008
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10009
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10010
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10011
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10012
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10013
    }/*function_string_to_lint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10014
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10015
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10016
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10017
 *STRING_TO_USINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10018
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10019
    case function_string_to_usint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10020
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10021
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10022
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10023
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10024
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10025
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10026
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10027
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10028
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10029
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10030
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10031
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10032
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10033
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10034
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10035
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10036
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10037
                symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10038
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10039
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10040
                s4o.print(")__string_to_uint(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10041
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10042
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10043
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10044
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10045
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10046
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10047
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10048
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10049
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10050
    }/*function_string_to_usint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10051
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10052
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10053
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10054
 *STRING_TO_UINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10055
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10056
    case function_string_to_uint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10057
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10058
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10059
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10060
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10061
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10062
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10063
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10064
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10065
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10066
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10067
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10068
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10069
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10070
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10071
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10072
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10073
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10074
                symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10075
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10076
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10077
                s4o.print(")__string_to_uint(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10078
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10079
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10080
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10081
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10082
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10083
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10084
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10085
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10086
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10087
    }/*function_string_to_uint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10088
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10089
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10090
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10091
 *STRING_TO_UDINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10092
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10093
    case function_string_to_udint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10094
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10095
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10096
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10097
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10098
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10099
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10100
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10101
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10102
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10103
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10104
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10105
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10106
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10107
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10108
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10109
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10110
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10111
                symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10112
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10113
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10114
                s4o.print(")__string_to_uint(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10115
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10116
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10117
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10118
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10119
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10120
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10121
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10122
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10123
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10124
    }/*function_string_to_udint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10125
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10126
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10127
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10128
 *STRING_TO_ULINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10129
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10130
    case function_string_to_ulint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10131
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10132
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10133
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10134
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10135
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10136
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10137
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10138
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10139
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10140
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10141
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10142
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10143
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10144
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10145
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10146
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10147
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10148
                symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10149
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10150
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10151
                s4o.print(")__string_to_uint(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10152
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10153
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10154
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10155
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10156
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10157
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10158
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10159
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10160
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10161
    }/*function_string_to_ulint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10162
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10163
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10164
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10165
 *STRING_TO_REAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10166
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10167
    case function_string_to_real :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10168
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10169
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10170
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10171
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10172
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10173
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10174
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10175
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10176
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10177
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10178
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10179
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10180
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10181
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10182
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10183
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10184
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10185
                symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10186
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10187
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10188
                s4o.print(")__string_to_real(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10189
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10190
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10191
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10192
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10193
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10194
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10195
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10196
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10197
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10198
    }/*function_string_to_real*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10199
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10200
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10201
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10202
 *STRING_TO_LREAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10203
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10204
    case function_string_to_lreal :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10205
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10206
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10207
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10208
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10209
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10210
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10211
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10212
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10213
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10214
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10215
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10216
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10217
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10218
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10219
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10220
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10221
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10222
                symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10223
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10224
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10225
                s4o.print(")__string_to_real(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10226
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10227
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10228
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10229
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10230
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10231
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10232
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10233
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10234
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10235
    }/*function_string_to_lreal*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10236
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10237
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10238
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10239
 *STRING_TO_TIME
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10240
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10241
    case function_string_to_time :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10242
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10243
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10244
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10245
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10246
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10247
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10248
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10249
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10250
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10251
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10252
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10253
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10254
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10255
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10256
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10257
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10258
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10259
                symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10260
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10261
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10262
                s4o.print(")__string_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10263
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10264
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10265
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10266
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10267
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10268
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10269
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10270
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10271
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10272
    }/*function_string_to_time*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10273
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10274
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10275
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10276
 *STRING_TO_DATE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10277
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10278
    case function_string_to_date :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10279
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10280
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10281
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10282
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10283
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10284
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10285
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10286
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10287
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10288
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10289
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10290
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10291
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10292
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10293
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10294
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10295
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10296
                symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10297
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10298
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10299
                s4o.print(")__string_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10300
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10301
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10302
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10303
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10304
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10305
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10306
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10307
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10308
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10309
    }/*function_string_to_date*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10310
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10311
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10312
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10313
 *STRING_TO_TOD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10314
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10315
    case function_string_to_tod :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10316
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10317
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10318
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10319
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10320
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10321
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10322
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10323
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10324
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10325
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10326
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10327
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10328
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10329
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10330
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10331
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10332
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10333
                symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10334
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10335
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10336
                s4o.print(")__string_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10337
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10338
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10339
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10340
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10341
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10342
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10343
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10344
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10345
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10346
    }/*function_string_to_tod*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10347
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10348
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10349
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10350
 *STRING_TO_DT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10351
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10352
    case function_string_to_dt :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10353
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10354
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10355
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10356
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10357
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10358
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10359
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10360
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10361
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10362
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10363
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10364
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10365
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10366
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10367
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10368
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10369
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10370
                symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10371
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10372
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10373
                s4o.print(")__string_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10374
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10375
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10376
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10377
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10378
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10379
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10380
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10381
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10382
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10383
    }/*function_string_to_dt*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10384
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10385
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10386
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10387
 *STRING_TO_BYTE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10388
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10389
    case function_string_to_byte :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10390
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10391
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10392
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10393
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10394
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10395
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10396
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10397
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10398
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10399
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10400
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10401
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10402
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10403
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10404
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10405
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10406
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10407
                symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10408
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10409
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10410
                s4o.print(")__string_to_bit(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10411
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10412
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10413
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10414
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10415
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10416
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10417
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10418
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10419
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10420
    }/*function_string_to_byte*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10421
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10422
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10423
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10424
 *STRING_TO_WORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10425
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10426
    case function_string_to_word :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10427
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10428
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10429
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10430
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10431
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10432
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10433
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10434
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10435
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10436
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10437
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10438
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10439
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10440
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10441
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10442
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10443
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10444
                symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10445
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10446
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10447
                s4o.print(")__string_to_bit(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10448
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10449
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10450
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10451
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10452
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10453
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10454
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10455
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10456
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10457
    }/*function_string_to_word*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10458
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10459
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10460
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10461
 *STRING_TO_DWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10462
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10463
    case function_string_to_dword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10464
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10465
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10466
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10467
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10468
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10469
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10470
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10471
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10472
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10473
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10474
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10475
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10476
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10477
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10478
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10479
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10480
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10481
                symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10482
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10483
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10484
                s4o.print(")__string_to_bit(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10485
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10486
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10487
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10488
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10489
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10490
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10491
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10492
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10493
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10494
    }/*function_string_to_dword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10495
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10496
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10497
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10498
 *STRING_TO_LWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10499
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10500
    case function_string_to_lword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10501
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10502
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10503
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10504
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10505
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10506
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10507
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10508
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10509
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10510
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10511
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10512
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10513
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10514
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10515
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10516
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10517
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10518
                symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10519
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10520
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10521
                s4o.print(")__string_to_bit(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10522
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10523
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10524
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10525
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10526
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10527
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10528
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10529
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10530
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10531
    }/*function_string_to_lword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10532
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10533
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10534
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10535
 *BYTE_TO_BOOL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10536
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10537
    case function_byte_to_bool :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10538
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10539
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10540
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10541
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10542
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10543
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10544
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10545
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10546
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10547
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10548
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10549
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10550
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10551
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10552
            if(search_expression_type->is_same_type(&search_constant_type_c::byte_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10553
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10554
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10555
                symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10556
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10557
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10558
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10559
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10560
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10561
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10562
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10563
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10564
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10565
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10566
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10567
    }/*function_byte_to_bool*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10568
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10569
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10570
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10571
 *BYTE_TO_SINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10572
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10573
    case function_byte_to_sint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10574
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10575
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10576
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10577
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10578
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10579
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10580
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10581
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10582
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10583
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10584
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10585
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10586
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10587
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10588
            if(search_expression_type->is_same_type(&search_constant_type_c::byte_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10589
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10590
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10591
                symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10592
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10593
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10594
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10595
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10596
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10597
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10598
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10599
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10600
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10601
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10602
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10603
    }/*function_byte_to_sint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10604
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10605
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10606
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10607
 *BYTE_TO_INT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10608
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10609
    case function_byte_to_int :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10610
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10611
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10612
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10613
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10614
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10615
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10616
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10617
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10618
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10619
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10620
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10621
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10622
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10623
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10624
            if(search_expression_type->is_same_type(&search_constant_type_c::byte_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10625
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10626
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10627
                symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10628
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10629
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10630
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10631
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10632
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10633
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10634
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10635
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10636
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10637
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10638
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10639
    }/*function_byte_to_int*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10640
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10641
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10642
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10643
 *BYTE_TO_DINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10644
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10645
    case function_byte_to_dint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10646
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10647
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10648
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10649
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10650
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10651
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10652
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10653
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10654
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10655
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10656
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10657
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10658
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10659
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10660
            if(search_expression_type->is_same_type(&search_constant_type_c::byte_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10661
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10662
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10663
                symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10664
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10665
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10666
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10667
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10668
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10669
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10670
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10671
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10672
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10673
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10674
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10675
    }/*function_byte_to_dint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10676
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10677
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10678
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10679
 *BYTE_TO_LINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10680
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10681
    case function_byte_to_lint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10682
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10683
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10684
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10685
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10686
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10687
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10688
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10689
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10690
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10691
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10692
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10693
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10694
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10695
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10696
            if(search_expression_type->is_same_type(&search_constant_type_c::byte_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10697
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10698
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10699
                symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10700
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10701
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10702
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10703
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10704
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10705
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10706
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10707
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10708
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10709
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10710
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10711
    }/*function_byte_to_lint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10712
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10713
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10714
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10715
 *BYTE_TO_USINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10716
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10717
    case function_byte_to_usint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10718
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10719
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10720
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10721
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10722
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10723
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10724
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10725
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10726
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10727
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10728
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10729
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10730
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10731
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10732
            if(search_expression_type->is_same_type(&search_constant_type_c::byte_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10733
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10734
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10735
                symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10736
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10737
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10738
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10739
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10740
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10741
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10742
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10743
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10744
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10745
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10746
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10747
    }/*function_byte_to_usint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10748
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10749
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10750
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10751
 *BYTE_TO_UINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10752
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10753
    case function_byte_to_uint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10754
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10755
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10756
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10757
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10758
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10759
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10760
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10761
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10762
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10763
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10764
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10765
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10766
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10767
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10768
            if(search_expression_type->is_same_type(&search_constant_type_c::byte_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10769
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10770
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10771
                symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10772
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10773
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10774
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10775
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10776
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10777
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10778
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10779
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10780
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10781
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10782
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10783
    }/*function_byte_to_uint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10784
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10785
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10786
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10787
 *BYTE_TO_UDINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10788
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10789
    case function_byte_to_udint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10790
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10791
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10792
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10793
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10794
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10795
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10796
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10797
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10798
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10799
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10800
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10801
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10802
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10803
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10804
            if(search_expression_type->is_same_type(&search_constant_type_c::byte_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10805
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10806
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10807
                symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10808
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10809
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10810
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10811
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10812
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10813
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10814
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10815
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10816
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10817
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10818
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10819
    }/*function_byte_to_udint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10820
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10821
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10822
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10823
 *BYTE_TO_ULINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10824
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10825
    case function_byte_to_ulint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10826
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10827
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10828
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10829
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10830
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10831
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10832
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10833
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10834
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10835
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10836
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10837
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10838
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10839
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10840
            if(search_expression_type->is_same_type(&search_constant_type_c::byte_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10841
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10842
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10843
                symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10844
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10845
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10846
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10847
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10848
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10849
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10850
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10851
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10852
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10853
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10854
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10855
    }/*function_byte_to_ulint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10856
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10857
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10858
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10859
 *BYTE_TO_REAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10860
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10861
    case function_byte_to_real :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10862
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10863
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10864
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10865
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10866
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10867
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10868
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10869
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10870
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10871
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10872
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10873
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10874
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10875
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10876
            if(search_expression_type->is_same_type(&search_constant_type_c::byte_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10877
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10878
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10879
                symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10880
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10881
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10882
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10883
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10884
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10885
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10886
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10887
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10888
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10889
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10890
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10891
    }/*function_byte_to_real*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10892
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10893
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10894
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10895
 *BYTE_TO_LREAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10896
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10897
    case function_byte_to_lreal :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10898
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10899
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10900
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10901
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10902
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10903
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10904
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10905
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10906
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10907
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10908
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10909
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10910
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10911
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10912
            if(search_expression_type->is_same_type(&search_constant_type_c::byte_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10913
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10914
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10915
                symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10916
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10917
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10918
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10919
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10920
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10921
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10922
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10923
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10924
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10925
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10926
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10927
    }/*function_byte_to_lreal*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10928
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10929
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10930
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10931
 *BYTE_TO_TIME
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10932
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10933
    case function_byte_to_time :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10934
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10935
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10936
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10937
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10938
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10939
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10940
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10941
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10942
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10943
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10944
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10945
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10946
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10947
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10948
            if(search_expression_type->is_same_type(&search_constant_type_c::byte_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10949
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10950
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10951
                symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10952
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10953
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10954
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10955
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10956
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10957
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10958
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10959
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10960
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10961
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10962
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10963
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10964
    }/*function_byte_to_time*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10965
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10966
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10967
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10968
 *BYTE_TO_DATE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10969
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10970
    case function_byte_to_date :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10971
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10972
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10973
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10974
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10975
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10976
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10977
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10978
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10979
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10980
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10981
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10982
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10983
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10984
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10985
            if(search_expression_type->is_same_type(&search_constant_type_c::byte_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10986
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10987
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10988
                symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10989
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10990
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10991
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10992
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10993
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10994
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10995
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10996
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10997
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10998
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 10999
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11000
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11001
    }/*function_byte_to_date*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11002
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11003
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11004
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11005
 *BYTE_TO_TOD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11006
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11007
    case function_byte_to_tod :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11008
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11009
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11010
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11011
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11012
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11013
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11014
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11015
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11016
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11017
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11018
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11019
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11020
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11021
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11022
            if(search_expression_type->is_same_type(&search_constant_type_c::byte_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11023
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11024
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11025
                symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11026
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11027
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11028
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11029
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11030
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11031
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11032
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11033
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11034
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11035
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11036
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11037
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11038
    }/*function_byte_to_tod*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11039
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11040
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11041
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11042
 *BYTE_TO_DT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11043
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11044
    case function_byte_to_dt :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11045
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11046
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11047
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11048
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11049
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11050
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11051
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11052
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11053
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11054
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11055
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11056
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11057
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11058
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11059
            if(search_expression_type->is_same_type(&search_constant_type_c::byte_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11060
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11061
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11062
                symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11063
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11064
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11065
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11066
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11067
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11068
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11069
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11070
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11071
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11072
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11073
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11074
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11075
    }/*function_byte_to_dt*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11076
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11077
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11078
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11079
 *BYTE_TO_STRING
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11080
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11081
    case function_byte_to_string :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11082
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11083
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11084
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11085
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11086
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11087
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11088
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11089
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11090
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11091
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11092
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11093
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11094
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11095
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11096
            if(search_expression_type->is_same_type(&search_constant_type_c::byte_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11097
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11098
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11099
                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11100
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11101
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11102
                s4o.print(")__bit_to_string(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11103
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11104
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11105
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11106
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11107
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11108
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11109
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11110
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11111
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11112
    }/*function_byte_to_string*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11113
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11114
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11115
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11116
 *BYTE_TO_WORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11117
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11118
    case function_byte_to_word :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11119
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11120
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11121
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11122
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11123
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11124
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11125
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11126
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11127
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11128
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11129
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11130
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11131
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11132
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11133
            if(search_expression_type->is_same_type(&search_constant_type_c::byte_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11134
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11135
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11136
                symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11137
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11138
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11139
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11140
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11141
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11142
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11143
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11144
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11145
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11146
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11147
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11148
    }/*function_byte_to_word*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11149
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11150
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11151
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11152
 *BYTE_TO_DWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11153
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11154
    case function_byte_to_dword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11155
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11156
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11157
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11158
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11159
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11160
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11161
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11162
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11163
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11164
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11165
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11166
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11167
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11168
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11169
            if(search_expression_type->is_same_type(&search_constant_type_c::byte_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11170
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11171
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11172
                symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11173
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11174
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11175
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11176
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11177
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11178
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11179
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11180
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11181
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11182
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11183
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11184
    }/*function_byte_to_dword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11185
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11186
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11187
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11188
 *BYTE_TO_LWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11189
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11190
    case function_byte_to_lword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11191
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11192
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11193
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11194
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11195
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11196
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11197
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11198
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11199
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11200
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11201
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11202
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11203
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11204
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11205
            if(search_expression_type->is_same_type(&search_constant_type_c::byte_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11206
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11207
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11208
                symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11209
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11210
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11211
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11212
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11213
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11214
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11215
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11216
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11217
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11218
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11219
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11220
    }/*function_byte_to_lword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11221
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11222
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11223
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11224
 *WORD_TO_BOOL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11225
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11226
    case function_word_to_bool :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11227
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11228
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11229
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11230
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11231
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11232
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11233
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11234
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11235
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11236
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11237
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11238
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11239
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11240
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11241
            if(search_expression_type->is_same_type(&search_constant_type_c::word_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11242
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11243
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11244
                symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11245
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11246
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11247
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11248
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11249
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11250
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11251
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11252
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11253
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11254
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11255
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11256
    }/*function_word_to_bool*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11257
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11258
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11259
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11260
 *WORD_TO_SINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11261
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11262
    case function_word_to_sint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11263
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11264
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11265
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11266
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11267
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11268
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11269
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11270
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11271
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11272
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11273
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11274
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11275
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11276
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11277
            if(search_expression_type->is_same_type(&search_constant_type_c::word_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11278
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11279
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11280
                symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11281
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11282
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11283
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11284
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11285
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11286
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11287
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11288
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11289
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11290
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11291
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11292
    }/*function_word_to_sint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11293
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11294
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11295
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11296
 *WORD_TO_INT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11297
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11298
    case function_word_to_int :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11299
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11300
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11301
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11302
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11303
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11304
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11305
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11306
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11307
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11308
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11309
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11310
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11311
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11312
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11313
            if(search_expression_type->is_same_type(&search_constant_type_c::word_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11314
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11315
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11316
                symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11317
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11318
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11319
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11320
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11321
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11322
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11323
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11324
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11325
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11326
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11327
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11328
    }/*function_word_to_int*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11329
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11330
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11331
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11332
 *WORD_TO_DINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11333
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11334
    case function_word_to_dint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11335
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11336
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11337
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11338
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11339
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11340
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11341
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11342
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11343
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11344
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11345
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11346
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11347
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11348
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11349
            if(search_expression_type->is_same_type(&search_constant_type_c::word_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11350
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11351
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11352
                symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11353
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11354
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11355
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11356
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11357
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11358
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11359
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11360
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11361
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11362
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11363
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11364
    }/*function_word_to_dint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11365
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11366
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11367
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11368
 *WORD_TO_LINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11369
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11370
    case function_word_to_lint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11371
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11372
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11373
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11374
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11375
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11376
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11377
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11378
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11379
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11380
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11381
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11382
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11383
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11384
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11385
            if(search_expression_type->is_same_type(&search_constant_type_c::word_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11386
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11387
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11388
                symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11389
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11390
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11391
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11392
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11393
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11394
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11395
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11396
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11397
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11398
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11399
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11400
    }/*function_word_to_lint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11401
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11402
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11403
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11404
 *WORD_TO_USINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11405
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11406
    case function_word_to_usint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11407
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11408
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11409
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11410
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11411
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11412
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11413
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11414
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11415
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11416
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11417
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11418
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11419
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11420
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11421
            if(search_expression_type->is_same_type(&search_constant_type_c::word_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11422
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11423
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11424
                symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11425
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11426
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11427
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11428
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11429
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11430
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11431
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11432
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11433
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11434
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11435
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11436
    }/*function_word_to_usint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11437
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11438
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11439
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11440
 *WORD_TO_UINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11441
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11442
    case function_word_to_uint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11443
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11444
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11445
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11446
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11447
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11448
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11449
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11450
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11451
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11452
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11453
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11454
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11455
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11456
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11457
            if(search_expression_type->is_same_type(&search_constant_type_c::word_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11458
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11459
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11460
                symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11461
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11462
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11463
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11464
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11465
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11466
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11467
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11468
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11469
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11470
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11471
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11472
    }/*function_word_to_uint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11473
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11474
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11475
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11476
 *WORD_TO_UDINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11477
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11478
    case function_word_to_udint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11479
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11480
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11481
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11482
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11483
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11484
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11485
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11486
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11487
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11488
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11489
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11490
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11491
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11492
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11493
            if(search_expression_type->is_same_type(&search_constant_type_c::word_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11494
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11495
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11496
                symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11497
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11498
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11499
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11500
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11501
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11502
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11503
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11504
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11505
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11506
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11507
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11508
    }/*function_word_to_udint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11509
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11510
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11511
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11512
 *WORD_TO_ULINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11513
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11514
    case function_word_to_ulint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11515
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11516
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11517
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11518
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11519
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11520
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11521
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11522
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11523
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11524
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11525
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11526
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11527
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11528
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11529
            if(search_expression_type->is_same_type(&search_constant_type_c::word_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11530
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11531
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11532
                symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11533
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11534
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11535
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11536
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11537
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11538
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11539
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11540
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11541
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11542
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11543
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11544
    }/*function_word_to_ulint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11545
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11546
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11547
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11548
 *WORD_TO_REAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11549
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11550
    case function_word_to_real :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11551
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11552
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11553
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11554
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11555
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11556
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11557
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11558
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11559
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11560
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11561
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11562
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11563
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11564
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11565
            if(search_expression_type->is_same_type(&search_constant_type_c::word_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11566
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11567
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11568
                symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11569
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11570
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11571
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11572
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11573
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11574
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11575
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11576
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11577
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11578
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11579
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11580
    }/*function_word_to_real*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11581
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11582
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11583
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11584
 *WORD_TO_LREAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11585
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11586
    case function_word_to_lreal :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11587
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11588
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11589
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11590
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11591
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11592
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11593
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11594
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11595
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11596
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11597
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11598
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11599
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11600
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11601
            if(search_expression_type->is_same_type(&search_constant_type_c::word_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11602
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11603
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11604
                symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11605
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11606
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11607
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11608
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11609
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11610
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11611
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11612
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11613
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11614
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11615
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11616
    }/*function_word_to_lreal*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11617
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11618
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11619
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11620
 *WORD_TO_TIME
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11621
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11622
    case function_word_to_time :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11623
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11624
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11625
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11626
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11627
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11628
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11629
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11630
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11631
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11632
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11633
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11634
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11635
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11636
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11637
            if(search_expression_type->is_same_type(&search_constant_type_c::word_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11638
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11639
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11640
                symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11641
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11642
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11643
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11644
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11645
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11646
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11647
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11648
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11649
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11650
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11651
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11652
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11653
    }/*function_word_to_time*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11654
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11655
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11656
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11657
 *WORD_TO_DATE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11658
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11659
    case function_word_to_date :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11660
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11661
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11662
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11663
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11664
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11665
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11666
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11667
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11668
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11669
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11670
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11671
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11672
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11673
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11674
            if(search_expression_type->is_same_type(&search_constant_type_c::word_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11675
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11676
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11677
                symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11678
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11679
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11680
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11681
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11682
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11683
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11684
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11685
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11686
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11687
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11688
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11689
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11690
    }/*function_word_to_date*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11691
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11692
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11693
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11694
 *WORD_TO_TOD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11695
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11696
    case function_word_to_tod :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11697
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11698
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11699
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11700
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11701
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11702
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11703
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11704
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11705
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11706
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11707
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11708
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11709
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11710
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11711
            if(search_expression_type->is_same_type(&search_constant_type_c::word_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11712
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11713
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11714
                symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11715
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11716
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11717
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11718
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11719
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11720
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11721
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11722
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11723
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11724
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11725
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11726
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11727
    }/*function_word_to_tod*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11728
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11729
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11730
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11731
 *WORD_TO_DT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11732
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11733
    case function_word_to_dt :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11734
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11735
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11736
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11737
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11738
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11739
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11740
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11741
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11742
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11743
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11744
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11745
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11746
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11747
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11748
            if(search_expression_type->is_same_type(&search_constant_type_c::word_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11749
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11750
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11751
                symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11752
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11753
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11754
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11755
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11756
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11757
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11758
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11759
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11760
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11761
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11762
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11763
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11764
    }/*function_word_to_dt*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11765
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11766
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11767
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11768
 *WORD_TO_STRING
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11769
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11770
    case function_word_to_string :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11771
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11772
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11773
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11774
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11775
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11776
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11777
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11778
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11779
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11780
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11781
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11782
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11783
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11784
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11785
            if(search_expression_type->is_same_type(&search_constant_type_c::word_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11786
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11787
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11788
                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11789
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11790
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11791
                s4o.print(")__bit_to_string(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11792
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11793
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11794
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11795
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11796
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11797
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11798
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11799
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11800
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11801
    }/*function_word_to_string*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11802
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11803
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11804
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11805
 *WORD_TO_BYTE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11806
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11807
    case function_word_to_byte :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11808
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11809
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11810
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11811
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11812
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11813
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11814
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11815
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11816
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11817
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11818
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11819
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11820
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11821
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11822
            if(search_expression_type->is_same_type(&search_constant_type_c::word_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11823
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11824
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11825
                symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11826
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11827
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11828
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11829
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11830
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11831
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11832
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11833
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11834
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11835
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11836
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11837
    }/*function_word_to_byte*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11838
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11839
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11840
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11841
 *WORD_TO_DWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11842
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11843
    case function_word_to_dword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11844
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11845
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11846
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11847
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11848
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11849
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11850
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11851
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11852
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11853
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11854
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11855
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11856
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11857
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11858
            if(search_expression_type->is_same_type(&search_constant_type_c::word_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11859
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11860
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11861
                symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11862
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11863
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11864
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11865
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11866
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11867
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11868
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11869
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11870
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11871
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11872
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11873
    }/*function_word_to_dword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11874
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11875
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11876
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11877
 *WORD_TO_LWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11878
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11879
    case function_word_to_lword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11880
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11881
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11882
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11883
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11884
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11885
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11886
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11887
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11888
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11889
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11890
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11891
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11892
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11893
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11894
            if(search_expression_type->is_same_type(&search_constant_type_c::word_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11895
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11896
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11897
                symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11898
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11899
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11900
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11901
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11902
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11903
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11904
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11905
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11906
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11907
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11908
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11909
    }/*function_word_to_lword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11910
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11911
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11912
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11913
 *DWORD_TO_BOOL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11914
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11915
    case function_dword_to_bool :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11916
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11917
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11918
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11919
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11920
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11921
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11922
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11923
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11924
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11925
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11926
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11927
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11928
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11929
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11930
            if(search_expression_type->is_same_type(&search_constant_type_c::dword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11931
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11932
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11933
                symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11934
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11935
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11936
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11937
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11938
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11939
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11940
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11941
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11942
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11943
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11944
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11945
    }/*function_dword_to_bool*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11946
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11947
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11948
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11949
 *DWORD_TO_SINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11950
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11951
    case function_dword_to_sint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11952
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11953
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11954
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11955
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11956
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11957
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11958
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11959
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11960
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11961
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11962
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11963
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11964
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11965
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11966
            if(search_expression_type->is_same_type(&search_constant_type_c::dword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11967
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11968
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11969
                symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11970
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11971
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11972
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11973
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11974
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11975
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11976
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11977
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11978
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11979
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11980
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11981
    }/*function_dword_to_sint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11982
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11983
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11984
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11985
 *DWORD_TO_INT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11986
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11987
    case function_dword_to_int :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11988
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11989
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11990
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11991
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11992
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11993
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11994
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11995
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11996
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11997
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11998
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 11999
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12000
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12001
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12002
            if(search_expression_type->is_same_type(&search_constant_type_c::dword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12003
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12004
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12005
                symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12006
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12007
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12008
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12009
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12010
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12011
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12012
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12013
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12014
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12015
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12016
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12017
    }/*function_dword_to_int*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12018
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12019
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12020
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12021
 *DWORD_TO_DINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12022
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12023
    case function_dword_to_dint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12024
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12025
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12026
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12027
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12028
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12029
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12030
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12031
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12032
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12033
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12034
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12035
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12036
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12037
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12038
            if(search_expression_type->is_same_type(&search_constant_type_c::dword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12039
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12040
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12041
                symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12042
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12043
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12044
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12045
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12046
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12047
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12048
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12049
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12050
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12051
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12052
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12053
    }/*function_dword_to_dint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12054
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12055
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12056
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12057
 *DWORD_TO_LINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12058
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12059
    case function_dword_to_lint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12060
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12061
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12062
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12063
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12064
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12065
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12066
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12067
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12068
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12069
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12070
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12071
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12072
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12073
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12074
            if(search_expression_type->is_same_type(&search_constant_type_c::dword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12075
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12076
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12077
                symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12078
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12079
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12080
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12081
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12082
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12083
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12084
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12085
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12086
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12087
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12088
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12089
    }/*function_dword_to_lint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12090
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12091
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12092
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12093
 *DWORD_TO_USINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12094
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12095
    case function_dword_to_usint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12096
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12097
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12098
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12099
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12100
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12101
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12102
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12103
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12104
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12105
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12106
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12107
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12108
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12109
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12110
            if(search_expression_type->is_same_type(&search_constant_type_c::dword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12111
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12112
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12113
                symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12114
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12115
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12116
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12117
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12118
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12119
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12120
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12121
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12122
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12123
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12124
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12125
    }/*function_dword_to_usint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12126
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12127
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12128
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12129
 *DWORD_TO_UINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12130
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12131
    case function_dword_to_uint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12132
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12133
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12134
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12135
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12136
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12137
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12138
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12139
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12140
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12141
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12142
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12143
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12144
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12145
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12146
            if(search_expression_type->is_same_type(&search_constant_type_c::dword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12147
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12148
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12149
                symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12150
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12151
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12152
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12153
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12154
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12155
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12156
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12157
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12158
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12159
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12160
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12161
    }/*function_dword_to_uint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12162
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12163
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12164
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12165
 *DWORD_TO_UDINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12166
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12167
    case function_dword_to_udint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12168
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12169
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12170
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12171
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12172
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12173
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12174
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12175
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12176
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12177
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12178
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12179
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12180
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12181
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12182
            if(search_expression_type->is_same_type(&search_constant_type_c::dword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12183
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12184
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12185
                symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12186
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12187
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12188
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12189
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12190
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12191
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12192
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12193
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12194
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12195
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12196
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12197
    }/*function_dword_to_udint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12198
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12199
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12200
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12201
 *DWORD_TO_ULINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12202
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12203
    case function_dword_to_ulint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12204
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12205
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12206
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12207
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12208
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12209
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12210
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12211
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12212
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12213
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12214
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12215
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12216
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12217
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12218
            if(search_expression_type->is_same_type(&search_constant_type_c::dword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12219
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12220
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12221
                symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12222
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12223
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12224
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12225
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12226
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12227
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12228
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12229
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12230
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12231
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12232
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12233
    }/*function_dword_to_ulint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12234
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12235
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12236
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12237
 *DWORD_TO_REAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12238
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12239
    case function_dword_to_real :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12240
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12241
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12242
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12243
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12244
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12245
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12246
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12247
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12248
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12249
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12250
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12251
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12252
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12253
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12254
            if(search_expression_type->is_same_type(&search_constant_type_c::dword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12255
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12256
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12257
                symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12258
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12259
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12260
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12261
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12262
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12263
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12264
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12265
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12266
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12267
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12268
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12269
    }/*function_dword_to_real*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12270
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12271
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12272
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12273
 *DWORD_TO_LREAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12274
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12275
    case function_dword_to_lreal :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12276
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12277
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12278
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12279
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12280
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12281
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12282
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12283
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12284
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12285
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12286
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12287
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12288
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12289
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12290
            if(search_expression_type->is_same_type(&search_constant_type_c::dword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12291
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12292
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12293
                symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12294
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12295
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12296
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12297
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12298
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12299
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12300
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12301
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12302
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12303
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12304
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12305
    }/*function_dword_to_lreal*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12306
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12307
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12308
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12309
 *DWORD_TO_TIME
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12310
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12311
    case function_dword_to_time :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12312
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12313
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12314
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12315
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12316
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12317
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12318
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12319
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12320
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12321
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12322
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12323
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12324
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12325
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12326
            if(search_expression_type->is_same_type(&search_constant_type_c::dword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12327
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12328
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12329
                symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12330
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12331
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12332
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12333
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12334
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12335
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12336
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12337
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12338
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12339
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12340
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12341
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12342
    }/*function_dword_to_time*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12343
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12344
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12345
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12346
 *DWORD_TO_DATE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12347
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12348
    case function_dword_to_date :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12349
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12350
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12351
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12352
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12353
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12354
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12355
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12356
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12357
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12358
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12359
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12360
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12361
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12362
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12363
            if(search_expression_type->is_same_type(&search_constant_type_c::dword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12364
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12365
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12366
                symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12367
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12368
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12369
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12370
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12371
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12372
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12373
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12374
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12375
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12376
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12377
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12378
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12379
    }/*function_dword_to_date*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12380
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12381
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12382
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12383
 *DWORD_TO_TOD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12384
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12385
    case function_dword_to_tod :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12386
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12387
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12388
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12389
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12390
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12391
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12392
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12393
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12394
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12395
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12396
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12397
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12398
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12399
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12400
            if(search_expression_type->is_same_type(&search_constant_type_c::dword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12401
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12402
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12403
                symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12404
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12405
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12406
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12407
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12408
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12409
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12410
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12411
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12412
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12413
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12414
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12415
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12416
    }/*function_dword_to_tod*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12417
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12418
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12419
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12420
 *DWORD_TO_DT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12421
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12422
    case function_dword_to_dt :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12423
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12424
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12425
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12426
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12427
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12428
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12429
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12430
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12431
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12432
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12433
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12434
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12435
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12436
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12437
            if(search_expression_type->is_same_type(&search_constant_type_c::dword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12438
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12439
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12440
                symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12441
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12442
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12443
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12444
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12445
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12446
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12447
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12448
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12449
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12450
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12451
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12452
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12453
    }/*function_dword_to_dt*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12454
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12455
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12456
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12457
 *DWORD_TO_STRING
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12458
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12459
    case function_dword_to_string :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12460
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12461
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12462
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12463
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12464
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12465
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12466
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12467
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12468
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12469
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12470
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12471
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12472
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12473
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12474
            if(search_expression_type->is_same_type(&search_constant_type_c::dword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12475
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12476
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12477
                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12478
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12479
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12480
                s4o.print(")__bit_to_string(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12481
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12482
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12483
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12484
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12485
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12486
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12487
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12488
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12489
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12490
    }/*function_dword_to_string*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12491
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12492
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12493
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12494
 *DWORD_TO_BYTE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12495
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12496
    case function_dword_to_byte :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12497
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12498
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12499
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12500
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12501
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12502
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12503
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12504
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12505
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12506
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12507
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12508
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12509
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12510
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12511
            if(search_expression_type->is_same_type(&search_constant_type_c::dword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12512
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12513
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12514
                symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12515
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12516
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12517
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12518
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12519
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12520
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12521
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12522
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12523
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12524
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12525
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12526
    }/*function_dword_to_byte*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12527
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12528
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12529
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12530
 *DWORD_TO_WORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12531
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12532
    case function_dword_to_word :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12533
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12534
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12535
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12536
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12537
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12538
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12539
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12540
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12541
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12542
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12543
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12544
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12545
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12546
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12547
            if(search_expression_type->is_same_type(&search_constant_type_c::dword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12548
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12549
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12550
                symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12551
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12552
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12553
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12554
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12555
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12556
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12557
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12558
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12559
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12560
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12561
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12562
    }/*function_dword_to_word*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12563
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12564
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12565
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12566
 *DWORD_TO_LWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12567
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12568
    case function_dword_to_lword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12569
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12570
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12571
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12572
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12573
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12574
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12575
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12576
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12577
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12578
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12579
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12580
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12581
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12582
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12583
            if(search_expression_type->is_same_type(&search_constant_type_c::dword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12584
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12585
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12586
                symbol_c * return_type_symbol = &search_constant_type_c::lword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12587
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12588
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12589
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12590
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12591
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12592
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12593
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12594
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12595
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12596
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12597
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12598
    }/*function_dword_to_lword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12599
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12600
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12601
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12602
 *LWORD_TO_BOOL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12603
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12604
    case function_lword_to_bool :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12605
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12606
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12607
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12608
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12609
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12610
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12611
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12612
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12613
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12614
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12615
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12616
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12617
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12618
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12619
            if(search_expression_type->is_same_type(&search_constant_type_c::lword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12620
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12621
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12622
                symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12623
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12624
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12625
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12626
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12627
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12628
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12629
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12630
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12631
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12632
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12633
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12634
    }/*function_lword_to_bool*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12635
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12636
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12637
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12638
 *LWORD_TO_SINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12639
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12640
    case function_lword_to_sint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12641
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12642
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12643
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12644
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12645
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12646
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12647
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12648
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12649
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12650
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12651
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12652
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12653
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12654
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12655
            if(search_expression_type->is_same_type(&search_constant_type_c::lword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12656
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12657
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12658
                symbol_c * return_type_symbol = &search_constant_type_c::sint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12659
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12660
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12661
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12662
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12663
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12664
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12665
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12666
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12667
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12668
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12669
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12670
    }/*function_lword_to_sint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12671
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12672
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12673
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12674
 *LWORD_TO_INT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12675
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12676
    case function_lword_to_int :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12677
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12678
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12679
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12680
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12681
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12682
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12683
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12684
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12685
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12686
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12687
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12688
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12689
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12690
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12691
            if(search_expression_type->is_same_type(&search_constant_type_c::lword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12692
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12693
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12694
                symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12695
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12696
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12697
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12698
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12699
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12700
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12701
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12702
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12703
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12704
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12705
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12706
    }/*function_lword_to_int*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12707
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12708
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12709
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12710
 *LWORD_TO_DINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12711
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12712
    case function_lword_to_dint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12713
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12714
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12715
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12716
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12717
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12718
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12719
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12720
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12721
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12722
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12723
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12724
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12725
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12726
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12727
            if(search_expression_type->is_same_type(&search_constant_type_c::lword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12728
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12729
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12730
                symbol_c * return_type_symbol = &search_constant_type_c::dint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12731
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12732
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12733
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12734
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12735
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12736
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12737
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12738
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12739
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12740
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12741
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12742
    }/*function_lword_to_dint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12743
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12744
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12745
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12746
 *LWORD_TO_LINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12747
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12748
    case function_lword_to_lint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12749
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12750
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12751
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12752
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12753
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12754
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12755
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12756
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12757
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12758
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12759
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12760
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12761
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12762
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12763
            if(search_expression_type->is_same_type(&search_constant_type_c::lword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12764
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12765
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12766
                symbol_c * return_type_symbol = &search_constant_type_c::lint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12767
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12768
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12769
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12770
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12771
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12772
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12773
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12774
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12775
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12776
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12777
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12778
    }/*function_lword_to_lint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12779
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12780
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12781
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12782
 *LWORD_TO_USINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12783
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12784
    case function_lword_to_usint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12785
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12786
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12787
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12788
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12789
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12790
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12791
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12792
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12793
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12794
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12795
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12796
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12797
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12798
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12799
            if(search_expression_type->is_same_type(&search_constant_type_c::lword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12800
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12801
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12802
                symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12803
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12804
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12805
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12806
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12807
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12808
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12809
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12810
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12811
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12812
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12813
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12814
    }/*function_lword_to_usint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12815
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12816
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12817
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12818
 *LWORD_TO_UINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12819
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12820
    case function_lword_to_uint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12821
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12822
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12823
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12824
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12825
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12826
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12827
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12828
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12829
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12830
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12831
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12832
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12833
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12834
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12835
            if(search_expression_type->is_same_type(&search_constant_type_c::lword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12836
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12837
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12838
                symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12839
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12840
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12841
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12842
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12843
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12844
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12845
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12846
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12847
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12848
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12849
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12850
    }/*function_lword_to_uint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12851
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12852
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12853
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12854
 *LWORD_TO_UDINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12855
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12856
    case function_lword_to_udint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12857
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12858
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12859
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12860
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12861
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12862
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12863
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12864
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12865
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12866
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12867
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12868
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12869
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12870
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12871
            if(search_expression_type->is_same_type(&search_constant_type_c::lword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12872
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12873
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12874
                symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12875
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12876
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12877
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12878
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12879
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12880
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12881
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12882
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12883
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12884
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12885
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12886
    }/*function_lword_to_udint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12887
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12888
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12889
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12890
 *LWORD_TO_ULINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12891
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12892
    case function_lword_to_ulint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12893
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12894
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12895
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12896
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12897
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12898
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12899
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12900
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12901
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12902
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12903
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12904
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12905
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12906
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12907
            if(search_expression_type->is_same_type(&search_constant_type_c::lword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12908
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12909
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12910
                symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12911
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12912
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12913
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12914
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12915
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12916
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12917
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12918
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12919
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12920
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12921
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12922
    }/*function_lword_to_ulint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12923
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12924
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12925
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12926
 *LWORD_TO_REAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12927
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12928
    case function_lword_to_real :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12929
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12930
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12931
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12932
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12933
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12934
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12935
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12936
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12937
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12938
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12939
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12940
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12941
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12942
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12943
            if(search_expression_type->is_same_type(&search_constant_type_c::lword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12944
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12945
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12946
                symbol_c * return_type_symbol = &search_constant_type_c::real_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12947
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12948
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12949
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12950
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12951
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12952
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12953
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12954
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12955
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12956
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12957
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12958
    }/*function_lword_to_real*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12959
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12960
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12961
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12962
 *LWORD_TO_LREAL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12963
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12964
    case function_lword_to_lreal :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12965
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12966
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12967
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12968
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12969
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12970
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12971
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12972
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12973
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12974
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12975
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12976
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12977
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12978
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12979
            if(search_expression_type->is_same_type(&search_constant_type_c::lword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12980
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12981
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12982
                symbol_c * return_type_symbol = &search_constant_type_c::lreal_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12983
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12984
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12985
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12986
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12987
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12988
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12989
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12990
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12991
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12992
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12993
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12994
    }/*function_lword_to_lreal*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12995
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12996
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12997
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12998
 *LWORD_TO_TIME
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 12999
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13000
    case function_lword_to_time :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13001
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13002
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13003
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13004
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13005
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13006
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13007
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13008
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13009
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13010
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13011
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13012
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13013
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13014
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13015
            if(search_expression_type->is_same_type(&search_constant_type_c::lword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13016
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13017
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13018
                symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13019
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13020
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13021
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13022
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13023
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13024
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13025
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13026
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13027
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13028
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13029
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13030
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13031
    }/*function_lword_to_time*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13032
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13033
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13034
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13035
 *LWORD_TO_DATE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13036
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13037
    case function_lword_to_date :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13038
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13039
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13040
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13041
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13042
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13043
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13044
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13045
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13046
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13047
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13048
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13049
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13050
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13051
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13052
            if(search_expression_type->is_same_type(&search_constant_type_c::lword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13053
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13054
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13055
                symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13056
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13057
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13058
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13059
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13060
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13061
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13062
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13063
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13064
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13065
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13066
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13067
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13068
    }/*function_lword_to_date*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13069
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13070
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13071
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13072
 *LWORD_TO_TOD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13073
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13074
    case function_lword_to_tod :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13075
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13076
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13077
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13078
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13079
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13080
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13081
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13082
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13083
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13084
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13085
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13086
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13087
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13088
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13089
            if(search_expression_type->is_same_type(&search_constant_type_c::lword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13090
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13091
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13092
                symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13093
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13094
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13095
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13096
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13097
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13098
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13099
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13100
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13101
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13102
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13103
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13104
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13105
    }/*function_lword_to_tod*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13106
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13107
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13108
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13109
 *LWORD_TO_DT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13110
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13111
    case function_lword_to_dt :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13112
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13113
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13114
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13115
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13116
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13117
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13118
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13119
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13120
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13121
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13122
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13123
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13124
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13125
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13126
            if(search_expression_type->is_same_type(&search_constant_type_c::lword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13127
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13128
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13129
                symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13130
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13131
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13132
                s4o.print(")__int_to_time(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13133
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13134
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13135
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13136
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13137
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13138
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13139
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13140
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13141
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13142
    }/*function_lword_to_dt*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13143
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13144
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13145
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13146
 *LWORD_TO_STRING
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13147
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13148
    case function_lword_to_string :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13149
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13150
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13151
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13152
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13153
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13154
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13155
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13156
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13157
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13158
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13159
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13160
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13161
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13162
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13163
            if(search_expression_type->is_same_type(&search_constant_type_c::lword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13164
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13165
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13166
                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13167
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13168
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13169
                s4o.print(")__bit_to_string(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13170
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13171
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13172
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13173
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13174
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13175
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13176
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13177
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13178
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13179
    }/*function_lword_to_string*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13180
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13181
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13182
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13183
 *LWORD_TO_BYTE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13184
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13185
    case function_lword_to_byte :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13186
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13187
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13188
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13189
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13190
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13191
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13192
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13193
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13194
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13195
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13196
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13197
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13198
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13199
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13200
            if(search_expression_type->is_same_type(&search_constant_type_c::lword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13201
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13202
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13203
                symbol_c * return_type_symbol = &search_constant_type_c::byte_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13204
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13205
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13206
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13207
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13208
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13209
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13210
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13211
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13212
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13213
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13214
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13215
    }/*function_lword_to_byte*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13216
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13217
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13218
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13219
 *LWORD_TO_WORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13220
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13221
    case function_lword_to_word :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13222
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13223
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13224
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13225
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13226
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13227
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13228
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13229
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13230
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13231
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13232
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13233
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13234
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13235
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13236
            if(search_expression_type->is_same_type(&search_constant_type_c::lword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13237
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13238
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13239
                symbol_c * return_type_symbol = &search_constant_type_c::word_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13240
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13241
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13242
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13243
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13244
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13245
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13246
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13247
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13248
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13249
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13250
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13251
    }/*function_lword_to_word*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13252
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13253
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13254
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13255
 *LWORD_TO_DWORD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13256
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13257
    case function_lword_to_dword :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13258
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13259
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13260
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13261
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13262
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13263
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13264
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13265
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13266
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13267
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13268
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13269
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13270
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13271
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13272
            if(search_expression_type->is_same_type(&search_constant_type_c::lword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13273
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13274
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13275
                symbol_c * return_type_symbol = &search_constant_type_c::dword_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13276
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13277
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13278
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13279
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13280
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13281
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13282
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13283
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13284
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13285
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13286
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13287
    }/*function_lword_to_dword*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13288
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13289
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13290
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13291
 *TRUNC
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13292
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13293
    case function_trunc :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13294
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13295
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13296
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13297
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13298
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13299
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13300
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13301
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13302
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13303
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13304
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13305
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13306
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13307
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13308
            if(search_expression_type->is_real_type(IN_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13309
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13310
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13311
                symbol_c * return_type_symbol = &search_constant_type_c::constant_int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13312
                s4o.print("(int)");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13313
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13314
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13315
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13316
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13317
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13318
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13319
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13320
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13321
    }/*function_trunc*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13322
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13323
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13324
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13325
 *BCD_TO_USINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13326
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13327
    case function_bcd_to_usint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13328
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13329
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13330
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13331
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13332
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13333
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13334
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13335
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13336
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13337
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13338
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13339
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13340
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13341
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13342
            if(search_expression_type->is_same_type(&search_constant_type_c::byte_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13343
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13344
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13345
                symbol_c * return_type_symbol = &search_constant_type_c::usint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13346
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13347
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13348
                s4o.print(")__bcd_to_uint(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13349
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13350
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13351
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13352
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13353
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13354
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13355
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13356
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13357
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13358
    }/*function_bcd_to_usint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13359
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13360
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13361
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13362
 *BCD_TO_UINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13363
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13364
    case function_bcd_to_uint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13365
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13366
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13367
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13368
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13369
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13370
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13371
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13372
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13373
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13374
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13375
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13376
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13377
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13378
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13379
            if(search_expression_type->is_same_type(&search_constant_type_c::word_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13380
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13381
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13382
                symbol_c * return_type_symbol = &search_constant_type_c::uint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13383
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13384
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13385
                s4o.print(")__bcd_to_uint(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13386
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13387
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13388
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13389
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13390
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13391
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13392
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13393
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13394
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13395
    }/*function_bcd_to_uint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13396
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13397
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13398
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13399
 *BCD_TO_UDINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13400
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13401
    case function_bcd_to_udint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13402
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13403
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13404
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13405
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13406
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13407
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13408
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13409
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13410
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13411
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13412
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13413
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13414
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13415
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13416
            if(search_expression_type->is_same_type(&search_constant_type_c::dword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13417
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13418
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13419
                symbol_c * return_type_symbol = &search_constant_type_c::udint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13420
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13421
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13422
                s4o.print(")__bcd_to_uint(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13423
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13424
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13425
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13426
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13427
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13428
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13429
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13430
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13431
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13432
    }/*function_bcd_to_udint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13433
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13434
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13435
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13436
 *BCD_TO_ULINT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13437
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13438
    case function_bcd_to_ulint :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13439
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13440
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13441
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13442
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13443
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13444
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13445
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13446
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13447
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13448
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13449
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13450
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13451
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13452
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13453
            if(search_expression_type->is_same_type(&search_constant_type_c::lword_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13454
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13455
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13456
                symbol_c * return_type_symbol = &search_constant_type_c::ulint_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13457
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13458
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13459
                s4o.print(")__bcd_to_uint(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13460
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13461
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13462
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13463
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13464
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13465
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13466
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13467
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13468
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13469
    }/*function_bcd_to_ulint*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13470
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13471
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13472
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13473
 *USINT_TO_BCD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13474
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13475
    case function_usint_to_bcd :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13476
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13477
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13478
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13479
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13480
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13481
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13482
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13483
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13484
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13485
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13486
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13487
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13488
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13489
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13490
            if(search_expression_type->is_same_type(&search_constant_type_c::usint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13491
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13492
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13493
                symbol_c * return_type_symbol = &search_constant_type_c::constant_int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13494
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13495
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13496
                s4o.print(")__uint_to_bcd(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13497
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13498
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13499
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13500
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13501
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13502
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13503
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13504
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13505
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13506
    }/*function_usint_to_bcd*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13507
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13508
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13509
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13510
 *UINT_TO_BCD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13511
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13512
    case function_uint_to_bcd :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13513
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13514
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13515
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13516
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13517
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13518
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13519
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13520
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13521
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13522
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13523
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13524
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13525
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13526
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13527
            if(search_expression_type->is_same_type(&search_constant_type_c::uint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13528
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13529
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13530
                symbol_c * return_type_symbol = &search_constant_type_c::constant_int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13531
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13532
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13533
                s4o.print(")__uint_to_bcd(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13534
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13535
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13536
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13537
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13538
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13539
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13540
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13541
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13542
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13543
    }/*function_uint_to_bcd*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13544
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13545
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13546
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13547
 *UDINT_TO_BCD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13548
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13549
    case function_udint_to_bcd :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13550
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13551
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13552
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13553
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13554
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13555
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13556
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13557
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13558
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13559
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13560
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13561
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13562
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13563
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13564
            if(search_expression_type->is_same_type(&search_constant_type_c::udint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13565
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13566
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13567
                symbol_c * return_type_symbol = &search_constant_type_c::constant_int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13568
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13569
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13570
                s4o.print(")__uint_to_bcd(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13571
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13572
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13573
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13574
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13575
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13576
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13577
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13578
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13579
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13580
    }/*function_udint_to_bcd*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13581
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13582
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13583
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13584
 *ULINT_TO_BCD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13585
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13586
    case function_ulint_to_bcd :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13587
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13588
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13589
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13590
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13591
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13592
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13593
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13594
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13595
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13596
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13597
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13598
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13599
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13600
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13601
            if(search_expression_type->is_same_type(&search_constant_type_c::ulint_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13602
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13603
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13604
                symbol_c * return_type_symbol = &search_constant_type_c::constant_int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13605
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13606
                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13607
                s4o.print(")__uint_to_bcd(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13608
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13609
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13610
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13611
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13612
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13613
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13614
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13615
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13616
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13617
    }/*function_ulint_to_bcd*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13618
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13619
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13620
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13621
 *DATE_AND_TIME_TO_TIME_OF_DAY
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13622
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13623
    case function_date_and_time_to_time_of_day :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13624
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13625
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13626
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13627
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13628
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13629
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13630
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13631
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13632
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13633
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13634
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13635
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13636
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13637
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13638
            if(search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13639
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13640
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13641
                symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13642
                s4o.print("__date_and_time_to_time_of_day(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13643
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13644
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13645
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13646
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13647
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13648
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13649
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13650
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13651
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13652
    }/*function_date_and_time_to_time_of_day*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13653
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13654
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13655
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13656
 *DATE_AND_TIME_TO_DATE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13657
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13658
    case function_date_and_time_to_date :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13659
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13660
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13661
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13662
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13663
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13664
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13665
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13666
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13667
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13668
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13669
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13670
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13671
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13672
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13673
            if(search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13674
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13675
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13676
                symbol_c * return_type_symbol = &search_constant_type_c::date_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13677
                s4o.print("__date_and_time_to_date(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13678
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13679
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13680
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13681
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13682
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13683
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13684
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13685
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13686
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13687
    }/*function_date_and_time_to_date*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13688
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13689
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13690
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13691
 *ABS
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13692
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13693
    case function_abs :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13694
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13695
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13696
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13697
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13698
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13699
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13700
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13701
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13702
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13703
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13704
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13705
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13706
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13707
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13708
            if(search_expression_type->is_num_type(IN_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13709
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13710
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13711
                symbol_c * return_type_symbol = IN_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13712
                s4o.print("__abs_");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13713
                IN_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13714
                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13715
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13716
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13717
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13718
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13719
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13720
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13721
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13722
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13723
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13724
    }/*function_abs*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13725
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13726
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13727
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13728
 *SQRT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13729
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13730
    case function_sqrt :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13731
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13732
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13733
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13734
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13735
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13736
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13737
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13738
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13739
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13740
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13741
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13742
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13743
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13744
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13745
            if(search_expression_type->is_real_type(IN_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13746
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13747
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13748
                symbol_c * return_type_symbol = IN_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13749
                s4o.print("sqrt(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13750
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13751
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13752
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13753
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13754
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13755
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13756
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13757
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13758
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13759
    }/*function_sqrt*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13760
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13761
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13762
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13763
 *LN
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13764
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13765
    case function_ln :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13766
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13767
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13768
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13769
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13770
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13771
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13772
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13773
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13774
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13775
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13776
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13777
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13778
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13779
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13780
            if(search_expression_type->is_real_type(IN_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13781
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13782
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13783
                symbol_c * return_type_symbol = IN_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13784
                s4o.print("ln(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13785
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13786
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13787
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13788
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13789
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13790
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13791
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13792
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13793
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13794
    }/*function_ln*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13795
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13796
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13797
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13798
 *LOG
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13799
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13800
    case function_log :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13801
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13802
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13803
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13804
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13805
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13806
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13807
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13808
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13809
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13810
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13811
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13812
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13813
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13814
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13815
            if(search_expression_type->is_real_type(IN_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13816
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13817
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13818
                symbol_c * return_type_symbol = IN_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13819
                s4o.print("log(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13820
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13821
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13822
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13823
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13824
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13825
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13826
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13827
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13828
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13829
    }/*function_log*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13830
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13831
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13832
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13833
 *EXP
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13834
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13835
    case function_exp :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13836
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13837
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13838
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13839
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13840
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13841
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13842
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13843
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13844
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13845
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13846
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13847
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13848
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13849
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13850
            if(search_expression_type->is_real_type(IN_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13851
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13852
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13853
                symbol_c * return_type_symbol = IN_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13854
                s4o.print("exp(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13855
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13856
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13857
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13858
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13859
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13860
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13861
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13862
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13863
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13864
    }/*function_exp*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13865
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13866
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13867
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13868
 *SIN
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13869
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13870
    case function_sin :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13871
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13872
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13873
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13874
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13875
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13876
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13877
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13878
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13879
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13880
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13881
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13882
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13883
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13884
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13885
            if(search_expression_type->is_real_type(IN_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13886
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13887
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13888
                symbol_c * return_type_symbol = IN_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13889
                s4o.print("sin(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13890
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13891
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13892
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13893
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13894
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13895
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13896
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13897
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13898
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13899
    }/*function_sin*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13900
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13901
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13902
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13903
 *COS
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13904
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13905
    case function_cos :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13906
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13907
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13908
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13909
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13910
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13911
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13912
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13913
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13914
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13915
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13916
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13917
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13918
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13919
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13920
            if(search_expression_type->is_real_type(IN_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13921
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13922
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13923
                symbol_c * return_type_symbol = IN_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13924
                s4o.print("cos(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13925
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13926
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13927
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13928
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13929
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13930
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13931
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13932
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13933
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13934
    }/*function_cos*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13935
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13936
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13937
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13938
 *TAN
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13939
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13940
    case function_tan :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13941
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13942
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13943
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13944
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13945
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13946
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13947
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13948
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13949
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13950
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13951
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13952
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13953
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13954
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13955
            if(search_expression_type->is_real_type(IN_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13956
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13957
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13958
                symbol_c * return_type_symbol = IN_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13959
                s4o.print("tan(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13960
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13961
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13962
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13963
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13964
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13965
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13966
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13967
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13968
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13969
    }/*function_tan*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13970
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13971
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13972
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13973
 *ASIN
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13974
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13975
    case function_asin :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13976
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13977
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13978
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13979
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13980
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13981
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13982
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13983
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13984
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13985
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13986
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13987
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13988
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13989
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13990
            if(search_expression_type->is_real_type(IN_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13991
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13992
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13993
                symbol_c * return_type_symbol = IN_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13994
                s4o.print("asin(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13995
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13996
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13997
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13998
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 13999
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14000
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14001
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14002
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14003
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14004
    }/*function_asin*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14005
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14006
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14007
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14008
 *ACOS
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14009
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14010
    case function_acos :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14011
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14012
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14013
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14014
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14015
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14016
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14017
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14018
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14019
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14020
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14021
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14022
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14023
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14024
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14025
            if(search_expression_type->is_real_type(IN_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14026
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14027
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14028
                symbol_c * return_type_symbol = IN_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14029
                s4o.print("acos(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14030
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14031
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14032
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14033
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14034
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14035
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14036
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14037
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14038
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14039
    }/*function_acos*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14040
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14041
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14042
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14043
 *ATAN
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14044
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14045
    case function_atan :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14046
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14047
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14048
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14049
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14050
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14051
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14052
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14053
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14054
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14055
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14056
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14057
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14058
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14059
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14060
            if(search_expression_type->is_real_type(IN_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14061
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14062
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14063
                symbol_c * return_type_symbol = IN_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14064
                s4o.print("atan(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14065
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14066
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14067
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14068
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14069
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14070
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14071
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14072
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14073
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14074
    }/*function_atan*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14075
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14076
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14077
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14078
 *ADD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14079
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14080
    case function_add :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14081
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14082
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14083
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14084
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14085
            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14086
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14087
            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14088
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14089
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14090
            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14091
              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14092
            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14093
            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14094
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14095
            if(search_expression_type->is_num_type(IN1_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14096
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14097
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14098
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14099
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14100
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14101
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14102
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14103
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14104
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14105
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14106
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14107
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14108
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14109
                    if(search_expression_type->is_num_type(IN2_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14110
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14111
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14112
                        symbol_c * return_type_symbol = last_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14113
                        s4o.indent_right();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14114
                        s4o.print("(\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14115
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14116
                        s4o.print("+\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14117
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14118
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14119
                        int base_num = 3;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14120
                        symbol_c *param_value = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14121
                        do{
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14122
                            char my_name[10];
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14123
                            sprintf(my_name, "IN%d", base_num++);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14124
                            identifier_c param_name(my_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14125
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14126
                            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14127
                            param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14128
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14129
                            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14130
                            if (param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14131
                              param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14132
                            if (param_value != NULL){
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14133
                                symbol_c *current_type_symbol = search_expression_type->get_type(param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14134
                                last_type_symbol = last_type_symbol && search_expression_type->is_same_type(current_type_symbol, last_type_symbol) ? search_expression_type->common_type(current_type_symbol, last_type_symbol) : current_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14135
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14136
                                /*Function specific CODE */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14137
                                s4o.print("+\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14138
                                param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14139
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14140
                            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14141
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14142
                        }while(param_value != NULL);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14143
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14144
                        s4o.indent_left();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14145
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14146
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14147
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14148
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14149
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14150
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14151
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14152
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14153
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14154
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14155
            if(search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14156
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14157
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14158
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14159
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14160
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14161
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14162
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14163
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14164
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14165
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14166
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14167
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14168
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14169
                    if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14170
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14171
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14172
                        symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14173
                        s4o.print("__time_add(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14174
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14175
                        s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14176
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14177
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14178
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14179
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14180
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14181
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14182
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14183
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14184
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14185
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14186
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14187
            if(search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14188
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14189
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14190
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14191
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14192
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14193
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14194
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14195
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14196
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14197
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14198
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14199
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14200
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14201
                    if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14202
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14203
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14204
                        symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14205
                        s4o.print("__time_add(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14206
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14207
                        s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14208
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14209
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14210
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14211
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14212
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14213
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14214
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14215
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14216
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14217
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14218
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14219
            if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14220
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14221
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14222
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14223
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14224
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14225
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14226
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14227
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14228
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14229
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14230
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14231
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14232
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14233
                    if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14234
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14235
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14236
                        symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14237
                        s4o.print("__time_add(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14238
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14239
                        s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14240
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14241
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14242
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14243
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14244
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14245
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14246
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14247
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14248
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14249
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14250
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14251
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14252
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14253
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14254
    }/*function_add*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14255
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14256
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14257
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14258
 *MUL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14259
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14260
    case function_mul :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14261
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14262
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14263
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14264
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14265
            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14266
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14267
            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14268
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14269
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14270
            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14271
              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14272
            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14273
            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14274
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14275
            if(search_expression_type->is_num_type(IN1_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14276
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14277
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14278
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14279
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14280
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14281
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14282
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14283
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14284
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14285
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14286
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14287
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14288
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14289
                    if(search_expression_type->is_num_type(IN2_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14290
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14291
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14292
                        symbol_c * return_type_symbol = last_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14293
                        s4o.indent_right();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14294
                        s4o.print("(\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14295
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14296
                        s4o.print("*\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14297
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14298
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14299
                        int base_num = 3;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14300
                        symbol_c *param_value = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14301
                        do{
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14302
                            char my_name[10];
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14303
                            sprintf(my_name, "IN%d", base_num++);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14304
                            identifier_c param_name(my_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14305
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14306
                            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14307
                            param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14308
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14309
                            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14310
                            if (param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14311
                              param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14312
                            if (param_value != NULL){
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14313
                                symbol_c *current_type_symbol = search_expression_type->get_type(param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14314
                                last_type_symbol = last_type_symbol && search_expression_type->is_same_type(current_type_symbol, last_type_symbol) ? search_expression_type->common_type(current_type_symbol, last_type_symbol) : current_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14315
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14316
                                /*Function specific CODE */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14317
                                s4o.print("*\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14318
                                param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14319
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14320
                            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14321
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14322
                        }while(param_value != NULL);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14323
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14324
                        s4o.indent_left();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14325
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14326
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14327
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14328
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14329
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14330
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14331
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14332
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14333
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14334
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14335
            if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14336
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14337
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14338
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14339
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14340
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14341
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14342
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14343
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14344
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14345
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14346
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14347
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14348
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14349
                    if(search_expression_type->is_num_type(IN2_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14350
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14351
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14352
                        symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14353
                        s4o.print("__time_mul(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14354
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14355
                        s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14356
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14357
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14358
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14359
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14360
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14361
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14362
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14363
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14364
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14365
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14366
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14367
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14368
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14369
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14370
    }/*function_mul*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14371
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14372
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14373
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14374
 *SUB
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14375
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14376
    case function_sub :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14377
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14378
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14379
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14380
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14381
            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14382
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14383
            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14384
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14385
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14386
            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14387
              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14388
            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14389
            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14390
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14391
            if(search_expression_type->is_num_type(IN1_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14392
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14393
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14394
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14395
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14396
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14397
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14398
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14399
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14400
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14401
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14402
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14403
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14404
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14405
                    if(search_expression_type->is_num_type(IN2_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14406
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14407
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14408
                        symbol_c * return_type_symbol = last_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14409
                        s4o.indent_right();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14410
                        s4o.print("(\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14411
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14412
                        s4o.print("-\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14413
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14414
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14415
                        s4o.indent_left();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14416
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14417
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14418
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14419
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14420
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14421
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14422
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14423
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14424
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14425
            if(search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14426
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14427
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14428
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14429
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14430
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14431
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14432
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14433
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14434
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14435
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14436
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14437
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14438
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14439
                    if(search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14440
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14441
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14442
                        symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14443
                        s4o.print("__time_sub(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14444
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14445
                        s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14446
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14447
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14448
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14449
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14450
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14451
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14452
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14453
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14454
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14455
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14456
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14457
            if(search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14458
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14459
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14460
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14461
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14462
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14463
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14464
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14465
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14466
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14467
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14468
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14469
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14470
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14471
                    if(search_expression_type->is_same_type(&search_constant_type_c::dt_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14472
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14473
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14474
                        symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14475
                        s4o.print("__time_sub(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14476
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14477
                        s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14478
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14479
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14480
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14481
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14482
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14483
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14484
                    if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14485
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14486
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14487
                        symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14488
                        s4o.print("__time_sub(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14489
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14490
                        s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14491
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14492
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14493
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14494
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14495
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14496
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14497
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14498
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14499
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14500
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14501
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14502
            if(search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14503
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14504
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14505
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14506
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14507
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14508
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14509
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14510
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14511
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14512
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14513
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14514
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14515
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14516
                    if(search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14517
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14518
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14519
                        symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14520
                        s4o.print("__time_sub(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14521
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14522
                        s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14523
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14524
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14525
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14526
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14527
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14528
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14529
                    if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14530
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14531
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14532
                        symbol_c * return_type_symbol = &search_constant_type_c::tod_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14533
                        s4o.print("__time_sub(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14534
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14535
                        s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14536
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14537
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14538
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14539
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14540
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14541
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14542
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14543
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14544
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14545
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14546
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14547
            if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14548
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14549
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14550
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14551
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14552
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14553
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14554
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14555
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14556
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14557
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14558
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14559
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14560
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14561
                    if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14562
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14563
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14564
                        symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14565
                        s4o.print("__time_sub(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14566
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14567
                        s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14568
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14569
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14570
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14571
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14572
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14573
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14574
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14575
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14576
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14577
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14578
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14579
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14580
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14581
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14582
    }/*function_sub*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14583
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14584
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14585
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14586
 *DIV
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14587
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14588
    case function_div :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14589
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14590
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14591
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14592
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14593
            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14594
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14595
            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14596
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14597
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14598
            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14599
              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14600
            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14601
            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14602
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14603
            if(search_expression_type->is_num_type(IN1_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14604
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14605
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14606
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14607
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14608
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14609
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14610
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14611
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14612
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14613
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14614
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14615
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14616
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14617
                    if(search_expression_type->is_num_type(IN2_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14618
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14619
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14620
                        symbol_c * return_type_symbol = last_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14621
                        s4o.indent_right();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14622
                        s4o.print("(\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14623
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14624
                        s4o.print("/\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14625
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14626
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14627
                        s4o.indent_left();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14628
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14629
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14630
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14631
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14632
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14633
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14634
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14635
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14636
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14637
            if(search_expression_type->is_same_type(&search_constant_type_c::time_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14638
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14639
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14640
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14641
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14642
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14643
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14644
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14645
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14646
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14647
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14648
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14649
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14650
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14651
                    if(search_expression_type->is_num_type(IN2_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14652
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14653
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14654
                        symbol_c * return_type_symbol = &search_constant_type_c::time_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14655
                        s4o.print("__time_div(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14656
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14657
                        s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14658
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14659
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14660
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14661
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14662
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14663
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14664
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14665
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14666
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14667
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14668
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14669
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14670
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14671
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14672
    }/*function_div*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14673
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14674
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14675
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14676
 *MOD
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14677
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14678
    case function_mod :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14679
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14680
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14681
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14682
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14683
            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14684
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14685
            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14686
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14687
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14688
            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14689
              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14690
            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14691
            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14692
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14693
            if(search_expression_type->is_num_type(IN1_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14694
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14695
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14696
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14697
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14698
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14699
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14700
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14701
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14702
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14703
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14704
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14705
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14706
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14707
                    if(search_expression_type->is_num_type(IN2_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14708
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14709
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14710
                        symbol_c * return_type_symbol = last_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14711
                        s4o.indent_right();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14712
                        s4o.print("(\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14713
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14714
                        s4o.print("%\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14715
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14716
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14717
                        s4o.indent_left();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14718
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14719
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14720
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14721
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14722
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14723
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14724
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14725
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14726
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14727
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14728
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14729
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14730
    }/*function_mod*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14731
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14732
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14733
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14734
 *EXPT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14735
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14736
    case function_expt :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14737
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14738
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14739
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14740
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14741
            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14742
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14743
            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14744
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14745
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14746
            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14747
              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14748
            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14749
            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14750
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14751
            if(search_expression_type->is_num_type(IN1_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14752
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14753
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14754
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14755
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14756
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14757
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14758
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14759
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14760
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14761
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14762
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14763
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14764
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14765
                    if(search_expression_type->is_num_type(IN2_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14766
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14767
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14768
                        symbol_c * return_type_symbol = last_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14769
                        s4o.print("pow(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14770
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14771
                        s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14772
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14773
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14774
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14775
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14776
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14777
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14778
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14779
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14780
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14781
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14782
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14783
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14784
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14785
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14786
    }/*function_expt*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14787
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14788
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14789
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14790
 *MOVE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14791
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14792
    case function_move :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14793
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14794
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14795
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14796
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14797
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14798
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14799
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14800
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14801
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14802
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14803
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14804
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14805
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14806
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14807
            if(search_expression_type->is_num_type(IN_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14808
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14809
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14810
                symbol_c * return_type_symbol = last_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14811
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14812
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14813
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14814
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14815
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14816
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14817
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14818
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14819
    }/*function_move*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14820
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14821
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14822
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14823
 *SHL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14824
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14825
    case function_shl :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14826
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14827
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14828
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14829
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14830
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14831
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14832
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14833
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14834
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14835
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14836
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14837
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14838
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14839
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14840
            if(search_expression_type->is_binary_type(IN_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14841
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14842
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14843
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14844
                    identifier_c param_name("N");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14845
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14846
                    symbol_c *N_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14847
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14848
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14849
                    if (N_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14850
                      N_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14851
                    symbol_c *N_type_symbol = search_expression_type->get_type(N_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14852
                    last_type_symbol = last_type_symbol && search_expression_type->is_same_type(N_type_symbol, last_type_symbol) ? search_expression_type->common_type(N_type_symbol, last_type_symbol) : N_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14853
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14854
                    if(search_expression_type->is_integer_type(N_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14855
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14856
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14857
                        symbol_c * return_type_symbol = IN_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14858
                        IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14859
                        s4o.print("<<");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14860
                        N_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14861
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14862
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14863
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14864
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14865
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14866
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14867
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14868
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14869
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14870
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14871
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14872
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14873
    }/*function_shl*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14874
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14875
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14876
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14877
 *SHR
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14878
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14879
    case function_shr :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14880
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14881
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14882
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14883
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14884
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14885
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14886
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14887
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14888
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14889
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14890
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14891
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14892
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14893
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14894
            if(search_expression_type->is_binary_type(IN_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14895
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14896
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14897
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14898
                    identifier_c param_name("N");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14899
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14900
                    symbol_c *N_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14901
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14902
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14903
                    if (N_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14904
                      N_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14905
                    symbol_c *N_type_symbol = search_expression_type->get_type(N_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14906
                    last_type_symbol = last_type_symbol && search_expression_type->is_same_type(N_type_symbol, last_type_symbol) ? search_expression_type->common_type(N_type_symbol, last_type_symbol) : N_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14907
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14908
                    if(search_expression_type->is_integer_type(N_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14909
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14910
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14911
                        symbol_c * return_type_symbol = IN_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14912
                        IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14913
                        s4o.print(">>");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14914
                        N_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14915
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14916
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14917
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14918
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14919
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14920
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14921
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14922
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14923
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14924
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14925
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14926
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14927
    }/*function_shr*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14928
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14929
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14930
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14931
 *ROR
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14932
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14933
    case function_ror :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14934
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14935
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14936
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14937
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14938
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14939
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14940
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14941
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14942
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14943
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14944
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14945
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14946
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14947
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14948
            if(search_expression_type->is_nbinary_type(IN_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14949
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14950
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14951
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14952
                    identifier_c param_name("N");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14953
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14954
                    symbol_c *N_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14955
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14956
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14957
                    if (N_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14958
                      N_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14959
                    symbol_c *N_type_symbol = search_expression_type->get_type(N_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14960
                    last_type_symbol = last_type_symbol && search_expression_type->is_same_type(N_type_symbol, last_type_symbol) ? search_expression_type->common_type(N_type_symbol, last_type_symbol) : N_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14961
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14962
                    if(search_expression_type->is_integer_type(N_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14963
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14964
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14965
                        symbol_c * return_type_symbol = IN_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14966
                        s4o.print("__ror_");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14967
                        IN_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14968
                        s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14969
                        IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14970
                        s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14971
                        N_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14972
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14973
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14974
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14975
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14976
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14977
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14978
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14979
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14980
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14981
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14982
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14983
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14984
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14985
    }/*function_ror*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14986
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14987
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14988
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14989
 *ROL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14990
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14991
    case function_rol :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14992
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14993
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14994
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14995
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14996
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14997
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14998
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 14999
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15000
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15001
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15002
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15003
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15004
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15005
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15006
            if(search_expression_type->is_nbinary_type(IN_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15007
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15008
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15009
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15010
                    identifier_c param_name("N");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15011
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15012
                    symbol_c *N_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15013
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15014
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15015
                    if (N_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15016
                      N_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15017
                    symbol_c *N_type_symbol = search_expression_type->get_type(N_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15018
                    last_type_symbol = last_type_symbol && search_expression_type->is_same_type(N_type_symbol, last_type_symbol) ? search_expression_type->common_type(N_type_symbol, last_type_symbol) : N_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15019
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15020
                    if(search_expression_type->is_integer_type(N_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15021
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15022
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15023
                        symbol_c * return_type_symbol = IN_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15024
                        s4o.print("__rol_");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15025
                        IN_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15026
                        s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15027
                        IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15028
                        s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15029
                        N_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15030
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15031
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15032
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15033
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15034
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15035
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15036
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15037
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15038
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15039
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15040
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15041
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15042
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15043
    }/*function_rol*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15044
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15045
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15046
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15047
 *AND
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15048
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15049
    case function_and :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15050
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15051
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15052
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15053
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15054
            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15055
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15056
            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15057
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15058
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15059
            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15060
              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15061
            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15062
            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15063
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15064
            if(search_expression_type->is_binary_type(IN1_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15065
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15066
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15067
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15068
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15069
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15070
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15071
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15072
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15073
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15074
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15075
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15076
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15077
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15078
                    if(search_expression_type->is_binary_type(IN2_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15079
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15080
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15081
                        symbol_c * return_type_symbol = last_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15082
                        s4o.indent_right();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15083
                        s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15084
                        if (search_expression_type->is_bool_type(last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15085
                          s4o.print("(\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15086
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15087
                        s4o.print("&\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15088
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15089
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15090
                        int base_num = 3;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15091
                        symbol_c *param_value = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15092
                        do{
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15093
                            char my_name[10];
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15094
                            sprintf(my_name, "IN%d", base_num++);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15095
                            identifier_c param_name(my_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15096
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15097
                            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15098
                            param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15099
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15100
                            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15101
                            if (param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15102
                              param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15103
                            if (param_value != NULL){
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15104
                                symbol_c *current_type_symbol = search_expression_type->get_type(param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15105
                                last_type_symbol = last_type_symbol && search_expression_type->is_same_type(current_type_symbol, last_type_symbol) ? search_expression_type->common_type(current_type_symbol, last_type_symbol) : current_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15106
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15107
                                /*Function specific CODE */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15108
                                s4o.print("&\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15109
                                param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15110
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15111
                            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15112
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15113
                        }while(param_value != NULL);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15114
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15115
                        if (search_expression_type->is_bool_type(last_type_symbol)) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15116
                          s4o.print("&1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15117
                          s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15118
                        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15119
                        s4o.print("");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15120
                        s4o.indent_left();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15121
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15122
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15123
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15124
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15125
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15126
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15127
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15128
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15129
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15130
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15131
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15132
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15133
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15134
    }/*function_and*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15135
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15136
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15137
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15138
 *OR
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15139
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15140
    case function_or :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15141
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15142
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15143
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15144
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15145
            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15146
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15147
            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15148
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15149
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15150
            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15151
              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15152
            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15153
            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15154
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15155
            if(search_expression_type->is_binary_type(IN1_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15156
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15157
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15158
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15159
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15160
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15161
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15162
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15163
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15164
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15165
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15166
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15167
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15168
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15169
                    if(search_expression_type->is_binary_type(IN2_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15170
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15171
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15172
                        symbol_c * return_type_symbol = last_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15173
                        s4o.indent_right();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15174
                        s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15175
                        if (search_expression_type->is_bool_type(last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15176
                          s4o.print("(\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15177
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15178
                        s4o.print("|\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15179
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15180
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15181
                        int base_num = 3;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15182
                        symbol_c *param_value = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15183
                        do{
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15184
                            char my_name[10];
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15185
                            sprintf(my_name, "IN%d", base_num++);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15186
                            identifier_c param_name(my_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15187
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15188
                            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15189
                            param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15190
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15191
                            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15192
                            if (param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15193
                              param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15194
                            if (param_value != NULL){
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15195
                                symbol_c *current_type_symbol = search_expression_type->get_type(param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15196
                                last_type_symbol = last_type_symbol && search_expression_type->is_same_type(current_type_symbol, last_type_symbol) ? search_expression_type->common_type(current_type_symbol, last_type_symbol) : current_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15197
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15198
                                /*Function specific CODE */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15199
                                s4o.print("|\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15200
                                param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15201
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15202
                            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15203
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15204
                        }while(param_value != NULL);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15205
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15206
                        if (search_expression_type->is_bool_type(last_type_symbol)) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15207
                          s4o.print("&1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15208
                          s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15209
                        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15210
                        s4o.print("");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15211
                        s4o.indent_left();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15212
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15213
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15214
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15215
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15216
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15217
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15218
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15219
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15220
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15221
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15222
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15223
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15224
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15225
    }/*function_or*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15226
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15227
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15228
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15229
 *XOR
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15230
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15231
    case function_xor :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15232
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15233
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15234
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15235
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15236
            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15237
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15238
            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15239
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15240
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15241
            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15242
              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15243
            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15244
            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15245
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15246
            if(search_expression_type->is_binary_type(IN1_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15247
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15248
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15249
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15250
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15251
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15252
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15253
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15254
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15255
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15256
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15257
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15258
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15259
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15260
                    if(search_expression_type->is_binary_type(IN2_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15261
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15262
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15263
                        symbol_c * return_type_symbol = last_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15264
                        s4o.indent_right();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15265
                        s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15266
                        if (search_expression_type->is_bool_type(last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15267
                          s4o.print("(\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15268
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15269
                        s4o.print("^\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15270
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15271
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15272
                        int base_num = 3;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15273
                        symbol_c *param_value = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15274
                        do{
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15275
                            char my_name[10];
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15276
                            sprintf(my_name, "IN%d", base_num++);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15277
                            identifier_c param_name(my_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15278
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15279
                            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15280
                            param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15281
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15282
                            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15283
                            if (param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15284
                              param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15285
                            if (param_value != NULL){
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15286
                                symbol_c *current_type_symbol = search_expression_type->get_type(param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15287
                                last_type_symbol = last_type_symbol && search_expression_type->is_same_type(current_type_symbol, last_type_symbol) ? search_expression_type->common_type(current_type_symbol, last_type_symbol) : current_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15288
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15289
                                /*Function specific CODE */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15290
                                s4o.print("^\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15291
                                param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15292
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15293
                            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15294
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15295
                        }while(param_value != NULL);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15296
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15297
                        if (search_expression_type->is_bool_type(last_type_symbol)) {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15298
                          s4o.print("&1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15299
                          s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15300
                        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15301
                        s4o.print("");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15302
                        s4o.indent_left();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15303
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15304
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15305
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15306
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15307
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15308
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15309
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15310
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15311
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15312
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15313
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15314
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15315
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15316
    }/*function_xor*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15317
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15318
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15319
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15320
 *NOT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15321
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15322
    case function_not :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15323
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15324
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15325
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15326
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15327
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15328
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15329
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15330
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15331
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15332
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15333
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15334
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15335
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15336
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15337
            if(search_expression_type->is_binary_type(IN_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15338
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15339
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15340
                symbol_c * return_type_symbol = IN_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15341
                s4o.print("~");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15342
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15343
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15344
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15345
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15346
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15347
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15348
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15349
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15350
    }/*function_not*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15351
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15352
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15353
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15354
 *SEL
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15355
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15356
    case function_sel :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15357
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15358
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15359
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15360
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15361
            identifier_c param_name("G");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15362
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15363
            symbol_c *G_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15364
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15365
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15366
            if (G_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15367
              G_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15368
            symbol_c *G_type_symbol = search_expression_type->get_type(G_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15369
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(G_type_symbol, last_type_symbol) ? search_expression_type->common_type(G_type_symbol, last_type_symbol) : G_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15370
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15371
            if(search_expression_type->is_same_type(&search_constant_type_c::bool_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15372
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15373
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15374
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15375
                    identifier_c param_name("IN0");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15376
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15377
                    symbol_c *IN0_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15378
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15379
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15380
                    if (IN0_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15381
                      IN0_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15382
                    symbol_c *IN0_type_symbol = search_expression_type->get_type(IN0_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15383
                    last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN0_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN0_type_symbol, last_type_symbol) : IN0_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15384
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15385
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15386
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15387
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15388
                        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15389
                            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15390
                            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15391
                            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15392
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15393
                            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15394
                            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15395
                              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15396
                            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15397
                            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15398
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15399
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15400
                            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15401
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15402
                                symbol_c * return_type_symbol = last_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15403
                                G_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15404
                                s4o.print(" ? ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15405
                                IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15406
                                s4o.print(" :  ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15407
                                IN0_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15408
                                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15409
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15410
                            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15411
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15412
                            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15413
                        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15414
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15415
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15416
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15417
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15418
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15419
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15420
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15421
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15422
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15423
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15424
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15425
    }/*function_sel*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15426
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15427
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15428
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15429
 *MAX
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15430
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15431
    case function_max :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15432
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15433
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15434
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15435
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15436
            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15437
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15438
            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15439
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15440
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15441
            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15442
              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15443
            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15444
            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15445
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15446
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15447
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15448
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15449
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15450
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15451
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15452
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15453
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15454
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15455
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15456
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15457
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15458
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15459
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15460
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15461
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15462
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15463
                        symbol_c * return_type_symbol = last_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15464
                        s4o.indent_right();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15465
                        s4o.print("__max_");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15466
                        return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15467
                        s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15468
                        s4o.print_integer(nb_param);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15469
                        s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15470
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15471
                        s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15472
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15473
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15474
                        int base_num = 3;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15475
                        symbol_c *param_value = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15476
                        do{
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15477
                            char my_name[10];
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15478
                            sprintf(my_name, "IN%d", base_num++);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15479
                            identifier_c param_name(my_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15480
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15481
                            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15482
                            param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15483
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15484
                            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15485
                            if (param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15486
                              param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15487
                            if (param_value != NULL){
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15488
                                symbol_c *current_type_symbol = search_expression_type->get_type(param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15489
                                last_type_symbol = last_type_symbol && search_expression_type->is_same_type(current_type_symbol, last_type_symbol) ? search_expression_type->common_type(current_type_symbol, last_type_symbol) : current_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15490
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15491
                                /*Function specific CODE */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15492
                                s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15493
                                param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15494
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15495
                            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15496
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15497
                        }while(param_value != NULL);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15498
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15499
                        s4o.indent_left();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15500
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15501
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15502
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15503
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15504
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15505
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15506
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15507
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15508
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15509
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15510
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15511
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15512
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15513
    }/*function_max*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15514
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15515
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15516
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15517
 *MIN
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15518
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15519
    case function_min :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15520
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15521
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15522
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15523
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15524
            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15525
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15526
            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15527
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15528
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15529
            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15530
              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15531
            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15532
            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15533
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15534
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15535
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15536
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15537
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15538
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15539
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15540
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15541
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15542
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15543
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15544
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15545
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15546
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15547
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15548
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15549
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15550
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15551
                        symbol_c * return_type_symbol = last_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15552
                        s4o.indent_right();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15553
                        s4o.print("__min_");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15554
                        return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15555
                        s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15556
                        s4o.print_integer(nb_param);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15557
                        s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15558
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15559
                        s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15560
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15561
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15562
                        int base_num = 3;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15563
                        symbol_c *param_value = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15564
                        do{
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15565
                            char my_name[10];
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15566
                            sprintf(my_name, "IN%d", base_num++);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15567
                            identifier_c param_name(my_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15568
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15569
                            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15570
                            param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15571
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15572
                            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15573
                            if (param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15574
                              param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15575
                            if (param_value != NULL){
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15576
                                symbol_c *current_type_symbol = search_expression_type->get_type(param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15577
                                last_type_symbol = last_type_symbol && search_expression_type->is_same_type(current_type_symbol, last_type_symbol) ? search_expression_type->common_type(current_type_symbol, last_type_symbol) : current_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15578
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15579
                                /*Function specific CODE */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15580
                                s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15581
                                param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15582
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15583
                            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15584
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15585
                        }while(param_value != NULL);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15586
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15587
                        s4o.indent_left();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15588
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15589
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15590
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15591
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15592
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15593
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15594
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15595
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15596
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15597
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15598
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15599
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15600
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15601
    }/*function_min*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15602
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15603
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15604
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15605
 *LIMIT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15606
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15607
    case function_limit :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15608
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15609
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15610
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15611
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15612
            identifier_c param_name("MN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15613
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15614
            symbol_c *MN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15615
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15616
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15617
            if (MN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15618
              MN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15619
            symbol_c *MN_type_symbol = search_expression_type->get_type(MN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15620
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(MN_type_symbol, last_type_symbol) ? search_expression_type->common_type(MN_type_symbol, last_type_symbol) : MN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15621
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15622
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15623
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15624
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15625
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15626
                    identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15627
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15628
                    symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15629
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15630
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15631
                    if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15632
                      IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15633
                    symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15634
                    last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15635
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15636
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15637
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15638
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15639
                        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15640
                            identifier_c param_name("MX");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15641
                            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15642
                            symbol_c *MX_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15643
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15644
                            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15645
                            if (MX_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15646
                              MX_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15647
                            symbol_c *MX_type_symbol = search_expression_type->get_type(MX_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15648
                            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(MX_type_symbol, last_type_symbol) ? search_expression_type->common_type(MX_type_symbol, last_type_symbol) : MX_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15649
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15650
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15651
                            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15652
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15653
                                symbol_c * return_type_symbol = IN_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15654
                                s4o.print("__limit_");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15655
                                IN_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15656
                                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15657
                                MN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15658
                                s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15659
                                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15660
                                s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15661
                                MX_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15662
                                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15663
                                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15664
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15665
                            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15666
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15667
                            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15668
                        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15669
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15670
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15671
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15672
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15673
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15674
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15675
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15676
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15677
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15678
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15679
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15680
    }/*function_limit*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15681
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15682
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15683
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15684
 *MUX
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15685
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15686
    case function_mux :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15687
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15688
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15689
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15690
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15691
            identifier_c param_name("K");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15692
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15693
            symbol_c *K_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15694
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15695
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15696
            if (K_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15697
              K_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15698
            symbol_c *K_type_symbol = search_expression_type->get_type(K_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15699
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(K_type_symbol, last_type_symbol) ? search_expression_type->common_type(K_type_symbol, last_type_symbol) : K_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15700
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15701
            if(search_expression_type->is_integer_type(K_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15702
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15703
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15704
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15705
                    identifier_c param_name("IN0");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15706
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15707
                    symbol_c *IN0_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15708
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15709
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15710
                    if (IN0_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15711
                      IN0_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15712
                    symbol_c *IN0_type_symbol = search_expression_type->get_type(IN0_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15713
                    last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN0_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN0_type_symbol, last_type_symbol) : IN0_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15714
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15715
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15716
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15717
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15718
                        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15719
                            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15720
                            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15721
                            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15722
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15723
                            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15724
                            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15725
                              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15726
                            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15727
                            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15728
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15729
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15730
                            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15731
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15732
                                symbol_c * return_type_symbol = last_type_symbol;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15733
                                s4o.indent_right();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15734
                                s4o.print("__mux_");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15735
                                return_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15736
                                s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15737
                                s4o.print_integer(nb_param);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15738
                                s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15739
                                K_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15740
                                s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15741
                                IN0_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15742
                                s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15743
                                IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15744
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15745
                                int base_num = 2;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15746
                                symbol_c *param_value = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15747
                                do{
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15748
                                    char my_name[10];
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15749
                                    sprintf(my_name, "IN%d", base_num++);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15750
                                    identifier_c param_name(my_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15751
                                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15752
                                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15753
                                    param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15754
                                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15755
                                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15756
                                    if (param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15757
                                      param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15758
                                    if (param_value != NULL){
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15759
                                        symbol_c *current_type_symbol = search_expression_type->get_type(param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15760
                                        last_type_symbol = last_type_symbol && search_expression_type->is_same_type(current_type_symbol, last_type_symbol) ? search_expression_type->common_type(current_type_symbol, last_type_symbol) : current_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15761
                                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15762
                                        /*Function specific CODE */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15763
                                        s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15764
                                        param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15765
                                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15766
                                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15767
                                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15768
                                }while(param_value != NULL);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15769
                                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15770
                                s4o.indent_left();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15771
                                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15772
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15773
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15774
                            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15775
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15776
                            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15777
                        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15778
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15779
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15780
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15781
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15782
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15783
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15784
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15785
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15786
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15787
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15788
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15789
    }/*function_mux*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15790
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15791
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15792
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15793
 *GT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15794
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15795
    case function_gt :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15796
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15797
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15798
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15799
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15800
            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15801
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15802
            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15803
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15804
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15805
            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15806
              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15807
            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15808
            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15809
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15810
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15811
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15812
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15813
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15814
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15815
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15816
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15817
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15818
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15819
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15820
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15821
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15822
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15823
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15824
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15825
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15826
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15827
                        symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15828
                        s4o.indent_right();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15829
                        s4o.print("__gt_");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15830
                        last_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15831
                        s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15832
                        s4o.print_integer(nb_param);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15833
                        s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15834
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15835
                        s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15836
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15837
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15838
                        int base_num = 3;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15839
                        symbol_c *param_value = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15840
                        do{
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15841
                            char my_name[10];
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15842
                            sprintf(my_name, "IN%d", base_num++);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15843
                            identifier_c param_name(my_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15844
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15845
                            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15846
                            param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15847
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15848
                            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15849
                            if (param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15850
                              param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15851
                            if (param_value != NULL){
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15852
                                symbol_c *current_type_symbol = search_expression_type->get_type(param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15853
                                last_type_symbol = last_type_symbol && search_expression_type->is_same_type(current_type_symbol, last_type_symbol) ? search_expression_type->common_type(current_type_symbol, last_type_symbol) : current_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15854
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15855
                                /*Function specific CODE */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15856
                                s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15857
                                param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15858
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15859
                            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15860
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15861
                        }while(param_value != NULL);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15862
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15863
                        s4o.indent_left();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15864
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15865
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15866
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15867
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15868
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15869
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15870
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15871
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15872
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15873
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15874
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15875
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15876
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15877
    }/*function_gt*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15878
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15879
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15880
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15881
 *GE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15882
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15883
    case function_ge :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15884
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15885
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15886
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15887
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15888
            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15889
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15890
            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15891
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15892
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15893
            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15894
              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15895
            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15896
            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15897
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15898
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15899
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15900
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15901
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15902
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15903
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15904
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15905
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15906
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15907
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15908
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15909
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15910
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15911
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15912
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15913
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15914
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15915
                        symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15916
                        s4o.indent_right();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15917
                        s4o.print("__ge_");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15918
                        last_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15919
                        s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15920
                        s4o.print_integer(nb_param);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15921
                        s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15922
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15923
                        s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15924
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15925
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15926
                        int base_num = 3;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15927
                        symbol_c *param_value = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15928
                        do{
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15929
                            char my_name[10];
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15930
                            sprintf(my_name, "IN%d", base_num++);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15931
                            identifier_c param_name(my_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15932
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15933
                            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15934
                            param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15935
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15936
                            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15937
                            if (param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15938
                              param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15939
                            if (param_value != NULL){
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15940
                                symbol_c *current_type_symbol = search_expression_type->get_type(param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15941
                                last_type_symbol = last_type_symbol && search_expression_type->is_same_type(current_type_symbol, last_type_symbol) ? search_expression_type->common_type(current_type_symbol, last_type_symbol) : current_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15942
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15943
                                /*Function specific CODE */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15944
                                s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15945
                                param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15946
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15947
                            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15948
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15949
                        }while(param_value != NULL);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15950
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15951
                        s4o.indent_left();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15952
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15953
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15954
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15955
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15956
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15957
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15958
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15959
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15960
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15961
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15962
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15963
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15964
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15965
    }/*function_ge*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15966
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15967
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15968
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15969
 *EQ
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15970
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15971
    case function_eq :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15972
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15973
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15974
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15975
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15976
            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15977
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15978
            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15979
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15980
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15981
            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15982
              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15983
            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15984
            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15985
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15986
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15987
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15988
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15989
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15990
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15991
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15992
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15993
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15994
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15995
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15996
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15997
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15998
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 15999
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16000
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16001
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16002
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16003
                        symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16004
                        s4o.indent_right();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16005
                        s4o.print("__eq_");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16006
                        last_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16007
                        s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16008
                        s4o.print_integer(nb_param);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16009
                        s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16010
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16011
                        s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16012
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16013
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16014
                        int base_num = 3;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16015
                        symbol_c *param_value = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16016
                        do{
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16017
                            char my_name[10];
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16018
                            sprintf(my_name, "IN%d", base_num++);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16019
                            identifier_c param_name(my_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16020
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16021
                            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16022
                            param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16023
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16024
                            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16025
                            if (param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16026
                              param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16027
                            if (param_value != NULL){
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16028
                                symbol_c *current_type_symbol = search_expression_type->get_type(param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16029
                                last_type_symbol = last_type_symbol && search_expression_type->is_same_type(current_type_symbol, last_type_symbol) ? search_expression_type->common_type(current_type_symbol, last_type_symbol) : current_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16030
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16031
                                /*Function specific CODE */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16032
                                s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16033
                                param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16034
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16035
                            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16036
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16037
                        }while(param_value != NULL);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16038
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16039
                        s4o.indent_left();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16040
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16041
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16042
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16043
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16044
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16045
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16046
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16047
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16048
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16049
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16050
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16051
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16052
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16053
    }/*function_eq*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16054
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16055
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16056
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16057
 *LT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16058
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16059
    case function_lt :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16060
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16061
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16062
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16063
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16064
            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16065
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16066
            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16067
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16068
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16069
            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16070
              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16071
            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16072
            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16073
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16074
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16075
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16076
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16077
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16078
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16079
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16080
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16081
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16082
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16083
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16084
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16085
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16086
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16087
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16088
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16089
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16090
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16091
                        symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16092
                        s4o.indent_right();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16093
                        s4o.print("__lt_");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16094
                        last_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16095
                        s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16096
                        s4o.print_integer(nb_param);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16097
                        s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16098
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16099
                        s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16100
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16101
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16102
                        int base_num = 3;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16103
                        symbol_c *param_value = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16104
                        do{
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16105
                            char my_name[10];
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16106
                            sprintf(my_name, "IN%d", base_num++);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16107
                            identifier_c param_name(my_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16108
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16109
                            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16110
                            param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16111
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16112
                            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16113
                            if (param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16114
                              param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16115
                            if (param_value != NULL){
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16116
                                symbol_c *current_type_symbol = search_expression_type->get_type(param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16117
                                last_type_symbol = last_type_symbol && search_expression_type->is_same_type(current_type_symbol, last_type_symbol) ? search_expression_type->common_type(current_type_symbol, last_type_symbol) : current_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16118
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16119
                                /*Function specific CODE */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16120
                                s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16121
                                param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16122
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16123
                            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16124
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16125
                        }while(param_value != NULL);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16126
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16127
                        s4o.indent_left();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16128
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16129
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16130
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16131
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16132
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16133
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16134
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16135
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16136
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16137
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16138
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16139
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16140
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16141
    }/*function_lt*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16142
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16143
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16144
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16145
 *LE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16146
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16147
    case function_le :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16148
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16149
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16150
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16151
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16152
            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16153
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16154
            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16155
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16156
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16157
            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16158
              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16159
            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16160
            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16161
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16162
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16163
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16164
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16165
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16166
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16167
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16168
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16169
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16170
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16171
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16172
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16173
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16174
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16175
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16176
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16177
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16178
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16179
                        symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16180
                        s4o.indent_right();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16181
                        s4o.print("__le_");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16182
                        last_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16183
                        s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16184
                        s4o.print_integer(nb_param);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16185
                        s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16186
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16187
                        s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16188
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16189
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16190
                        int base_num = 3;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16191
                        symbol_c *param_value = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16192
                        do{
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16193
                            char my_name[10];
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16194
                            sprintf(my_name, "IN%d", base_num++);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16195
                            identifier_c param_name(my_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16196
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16197
                            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16198
                            param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16199
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16200
                            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16201
                            if (param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16202
                              param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16203
                            if (param_value != NULL){
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16204
                                symbol_c *current_type_symbol = search_expression_type->get_type(param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16205
                                last_type_symbol = last_type_symbol && search_expression_type->is_same_type(current_type_symbol, last_type_symbol) ? search_expression_type->common_type(current_type_symbol, last_type_symbol) : current_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16206
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16207
                                /*Function specific CODE */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16208
                                s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16209
                                param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16210
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16211
                            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16212
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16213
                        }while(param_value != NULL);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16214
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16215
                        s4o.indent_left();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16216
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16217
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16218
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16219
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16220
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16221
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16222
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16223
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16224
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16225
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16226
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16227
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16228
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16229
    }/*function_le*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16230
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16231
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16232
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16233
 *NE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16234
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16235
    case function_ne :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16236
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16237
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16238
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16239
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16240
            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16241
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16242
            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16243
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16244
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16245
            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16246
              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16247
            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16248
            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16249
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16250
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16251
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16252
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16253
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16254
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16255
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16256
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16257
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16258
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16259
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16260
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16261
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16262
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16263
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16264
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16265
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16266
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16267
                        symbol_c * return_type_symbol = &search_constant_type_c::bool_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16268
                        s4o.indent_right();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16269
                        s4o.print("__ne_");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16270
                        last_type_symbol->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16271
                        s4o.print("(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16272
                        s4o.print_integer(nb_param);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16273
                        s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16274
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16275
                        s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16276
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16277
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16278
                        int base_num = 3;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16279
                        symbol_c *param_value = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16280
                        do{
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16281
                            char my_name[10];
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16282
                            sprintf(my_name, "IN%d", base_num++);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16283
                            identifier_c param_name(my_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16284
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16285
                            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16286
                            param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16287
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16288
                            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16289
                            if (param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16290
                              param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16291
                            if (param_value != NULL){
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16292
                                symbol_c *current_type_symbol = search_expression_type->get_type(param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16293
                                last_type_symbol = last_type_symbol && search_expression_type->is_same_type(current_type_symbol, last_type_symbol) ? search_expression_type->common_type(current_type_symbol, last_type_symbol) : current_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16294
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16295
                                /*Function specific CODE */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16296
                                s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16297
                                param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16298
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16299
                            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16300
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16301
                        }while(param_value != NULL);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16302
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16303
                        s4o.indent_left();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16304
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16305
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16306
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16307
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16308
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16309
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16310
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16311
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16312
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16313
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16314
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16315
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16316
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16317
    }/*function_ne*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16318
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16319
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16320
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16321
 *LEN
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16322
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16323
    case function_len :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16324
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16325
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16326
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16327
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16328
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16329
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16330
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16331
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16332
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16333
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16334
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16335
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16336
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16337
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16338
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16339
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16340
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16341
                symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16342
                s4o.print("__len(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16343
                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16344
                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16345
                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16346
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16347
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16348
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16349
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16350
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16351
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16352
    }/*function_len*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16353
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16354
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16355
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16356
 *LEFT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16357
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16358
    case function_left :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16359
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16360
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16361
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16362
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16363
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16364
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16365
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16366
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16367
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16368
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16369
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16370
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16371
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16372
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16373
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16374
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16375
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16376
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16377
                    identifier_c param_name("L");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16378
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16379
                    symbol_c *L_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16380
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16381
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16382
                    if (L_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16383
                      L_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16384
                    symbol_c *L_type_symbol = search_expression_type->get_type(L_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16385
                    last_type_symbol = last_type_symbol && search_expression_type->is_same_type(L_type_symbol, last_type_symbol) ? search_expression_type->common_type(L_type_symbol, last_type_symbol) : L_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16386
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16387
                    if(search_expression_type->is_integer_type(L_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16388
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16389
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16390
                        symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16391
                        s4o.print("__left(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16392
                        IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16393
                        s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16394
                        L_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16395
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16396
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16397
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16398
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16399
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16400
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16401
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16402
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16403
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16404
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16405
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16406
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16407
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16408
    }/*function_left*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16409
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16410
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16411
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16412
 *RIGHT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16413
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16414
    case function_right :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16415
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16416
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16417
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16418
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16419
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16420
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16421
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16422
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16423
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16424
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16425
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16426
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16427
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16428
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16429
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16430
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16431
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16432
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16433
                    identifier_c param_name("L");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16434
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16435
                    symbol_c *L_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16436
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16437
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16438
                    if (L_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16439
                      L_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16440
                    symbol_c *L_type_symbol = search_expression_type->get_type(L_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16441
                    last_type_symbol = last_type_symbol && search_expression_type->is_same_type(L_type_symbol, last_type_symbol) ? search_expression_type->common_type(L_type_symbol, last_type_symbol) : L_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16442
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16443
                    if(search_expression_type->is_integer_type(L_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16444
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16445
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16446
                        symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16447
                        s4o.print("__right(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16448
                        IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16449
                        s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16450
                        L_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16451
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16452
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16453
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16454
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16455
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16456
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16457
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16458
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16459
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16460
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16461
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16462
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16463
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16464
    }/*function_right*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16465
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16466
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16467
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16468
 *MID
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16469
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16470
    case function_mid :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16471
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16472
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16473
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16474
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16475
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16476
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16477
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16478
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16479
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16480
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16481
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16482
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16483
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16484
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16485
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16486
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16487
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16488
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16489
                    identifier_c param_name("L");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16490
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16491
                    symbol_c *L_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16492
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16493
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16494
                    if (L_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16495
                      L_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16496
                    symbol_c *L_type_symbol = search_expression_type->get_type(L_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16497
                    last_type_symbol = last_type_symbol && search_expression_type->is_same_type(L_type_symbol, last_type_symbol) ? search_expression_type->common_type(L_type_symbol, last_type_symbol) : L_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16498
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16499
                    if(search_expression_type->is_integer_type(L_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16500
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16501
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16502
                        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16503
                            identifier_c param_name("P");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16504
                            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16505
                            symbol_c *P_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16506
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16507
                            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16508
                            if (P_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16509
                              P_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16510
                            symbol_c *P_type_symbol = search_expression_type->get_type(P_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16511
                            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(P_type_symbol, last_type_symbol) ? search_expression_type->common_type(P_type_symbol, last_type_symbol) : P_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16512
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16513
                            if(search_expression_type->is_integer_type(P_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16514
                            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16515
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16516
                                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16517
                                s4o.print("__mid(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16518
                                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16519
                                s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16520
                                L_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16521
                                s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16522
                                P_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16523
                                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16524
                                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16525
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16526
                            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16527
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16528
                            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16529
                        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16530
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16531
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16532
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16533
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16534
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16535
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16536
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16537
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16538
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16539
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16540
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16541
    }/*function_mid*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16542
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16543
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16544
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16545
 *CONCAT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16546
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16547
    case function_concat :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16548
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16549
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16550
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16551
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16552
            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16553
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16554
            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16555
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16556
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16557
            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16558
              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16559
            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16560
            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16561
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16562
            if(search_expression_type->is_same_type(&search_constant_type_c::date_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16563
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16564
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16565
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16566
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16567
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16568
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16569
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16570
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16571
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16572
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16573
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16574
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16575
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16576
                    if(search_expression_type->is_same_type(&search_constant_type_c::tod_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16577
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16578
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16579
                        symbol_c * return_type_symbol = &search_constant_type_c::dt_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16580
                        s4o.print("__time_add(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16581
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16582
                        s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16583
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16584
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16585
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16586
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16587
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16588
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16589
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16590
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16591
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16592
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16593
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16594
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16595
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16596
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16597
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16598
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16599
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16600
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16601
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16602
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16603
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16604
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16605
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16606
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16607
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16608
                    if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16609
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16610
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16611
                        symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16612
                        s4o.indent_right();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16613
                        s4o.print("__concat(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16614
                        s4o.print_integer(nb_param);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16615
                        s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16616
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16617
                        s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16618
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16619
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16620
                        int base_num = 3;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16621
                        symbol_c *param_value = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16622
                        do{
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16623
                            char my_name[10];
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16624
                            sprintf(my_name, "IN%d", base_num++);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16625
                            identifier_c param_name(my_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16626
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16627
                            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16628
                            param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16629
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16630
                            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16631
                            if (param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16632
                              param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16633
                            if (param_value != NULL){
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16634
                                symbol_c *current_type_symbol = search_expression_type->get_type(param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16635
                                last_type_symbol = last_type_symbol && search_expression_type->is_same_type(current_type_symbol, last_type_symbol) ? search_expression_type->common_type(current_type_symbol, last_type_symbol) : current_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16636
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16637
                                /*Function specific CODE */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16638
                                s4o.print(",\n" + s4o.indent_spaces);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16639
                                param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16640
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16641
                            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16642
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16643
                        }while(param_value != NULL);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16644
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16645
                        s4o.indent_left();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16646
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16647
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16648
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16649
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16650
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16651
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16652
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16653
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16654
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16655
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16656
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16657
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16658
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16659
    }/*function_concat*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16660
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16661
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16662
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16663
 *INSERT
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16664
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16665
    case function_insert :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16666
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16667
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16668
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16669
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16670
            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16671
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16672
            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16673
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16674
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16675
            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16676
              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16677
            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16678
            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16679
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16680
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16681
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16682
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16683
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16684
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16685
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16686
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16687
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16688
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16689
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16690
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16691
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16692
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16693
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16694
                    if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16695
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16696
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16697
                        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16698
                            identifier_c param_name("P");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16699
                            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16700
                            symbol_c *P_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16701
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16702
                            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16703
                            if (P_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16704
                              P_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16705
                            symbol_c *P_type_symbol = search_expression_type->get_type(P_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16706
                            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(P_type_symbol, last_type_symbol) ? search_expression_type->common_type(P_type_symbol, last_type_symbol) : P_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16707
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16708
                            if(search_expression_type->is_integer_type(P_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16709
                            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16710
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16711
                                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16712
                                s4o.print("__insert(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16713
                                IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16714
                                s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16715
                                IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16716
                                s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16717
                                P_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16718
                                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16719
                                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16720
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16721
                            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16722
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16723
                            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16724
                        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16725
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16726
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16727
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16728
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16729
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16730
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16731
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16732
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16733
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16734
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16735
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16736
    }/*function_insert*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16737
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16738
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16739
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16740
 *DELETE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16741
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16742
    case function_delete :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16743
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16744
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16745
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16746
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16747
            identifier_c param_name("IN");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16748
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16749
            symbol_c *IN_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16750
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16751
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16752
            if (IN_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16753
              IN_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16754
            symbol_c *IN_type_symbol = search_expression_type->get_type(IN_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16755
            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(IN_type_symbol, last_type_symbol) ? search_expression_type->common_type(IN_type_symbol, last_type_symbol) : IN_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16756
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16757
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16758
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16759
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16760
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16761
                    identifier_c param_name("L");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16762
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16763
                    symbol_c *L_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16764
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16765
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16766
                    if (L_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16767
                      L_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16768
                    symbol_c *L_type_symbol = search_expression_type->get_type(L_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16769
                    last_type_symbol = last_type_symbol && search_expression_type->is_same_type(L_type_symbol, last_type_symbol) ? search_expression_type->common_type(L_type_symbol, last_type_symbol) : L_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16770
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16771
                    if(search_expression_type->is_integer_type(L_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16772
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16773
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16774
                        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16775
                            identifier_c param_name("P");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16776
                            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16777
                            symbol_c *P_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16778
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16779
                            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16780
                            if (P_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16781
                              P_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16782
                            symbol_c *P_type_symbol = search_expression_type->get_type(P_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16783
                            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(P_type_symbol, last_type_symbol) ? search_expression_type->common_type(P_type_symbol, last_type_symbol) : P_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16784
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16785
                            if(search_expression_type->is_integer_type(P_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16786
                            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16787
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16788
                                symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16789
                                s4o.print("__delete(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16790
                                IN_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16791
                                s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16792
                                L_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16793
                                s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16794
                                P_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16795
                                s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16796
                                return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16797
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16798
                            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16799
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16800
                            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16801
                        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16802
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16803
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16804
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16805
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16806
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16807
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16808
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16809
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16810
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16811
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16812
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16813
    }/*function_delete*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16814
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16815
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16816
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16817
 *REPLACE
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16818
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16819
    case function_replace :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16820
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16821
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16822
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16823
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16824
            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16825
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16826
            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16827
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16828
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16829
            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16830
              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16831
            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16832
            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16833
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16834
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16835
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16836
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16837
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16838
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16839
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16840
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16841
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16842
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16843
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16844
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16845
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16846
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16847
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16848
                    if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16849
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16850
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16851
                        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16852
                            identifier_c param_name("L");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16853
                            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16854
                            symbol_c *L_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16855
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16856
                            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16857
                            if (L_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16858
                              L_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16859
                            symbol_c *L_type_symbol = search_expression_type->get_type(L_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16860
                            last_type_symbol = last_type_symbol && search_expression_type->is_same_type(L_type_symbol, last_type_symbol) ? search_expression_type->common_type(L_type_symbol, last_type_symbol) : L_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16861
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16862
                            if(search_expression_type->is_integer_type(L_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16863
                            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16864
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16865
                                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16866
                                    identifier_c param_name("P");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16867
                                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16868
                                    symbol_c *P_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16869
                                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16870
                                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16871
                                    if (P_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16872
                                      P_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16873
                                    symbol_c *P_type_symbol = search_expression_type->get_type(P_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16874
                                    last_type_symbol = last_type_symbol && search_expression_type->is_same_type(P_type_symbol, last_type_symbol) ? search_expression_type->common_type(P_type_symbol, last_type_symbol) : P_type_symbol ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16875
                                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16876
                                    if(search_expression_type->is_integer_type(P_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16877
                                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16878
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16879
                                        symbol_c * return_type_symbol = &search_constant_type_c::string_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16880
                                        s4o.print("__replace(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16881
                                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16882
                                        s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16883
                                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16884
                                        s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16885
                                        L_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16886
                                        s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16887
                                        P_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16888
                                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16889
                                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16890
                                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16891
                                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16892
                                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16893
                                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16894
                                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16895
                                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16896
                            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16897
                            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16898
                            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16899
                        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16900
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16901
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16902
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16903
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16904
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16905
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16906
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16907
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16908
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16909
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16910
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16911
    }/*function_replace*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16912
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16913
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16914
/****
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16915
 *FIND
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16916
 */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16917
    case function_find :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16918
    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16919
        symbol_c *last_type_symbol = NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16920
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16921
        {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16922
            identifier_c param_name("IN1");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16923
            /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16924
            symbol_c *IN1_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16925
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16926
            /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16927
            if (IN1_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16928
              IN1_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16929
            symbol_c *IN1_type_symbol = search_expression_type->get_type(IN1_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16930
            last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16931
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16932
            if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16933
            {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16934
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16935
                {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16936
                    identifier_c param_name("IN2");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16937
                    /* Get the value from a foo(<param_name> = <param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16938
                    symbol_c *IN2_param_value = function_call_param_iterator.search(&param_name);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16939
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16940
                    /* Get the value from a foo(<param_value>) style call */
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16941
                    if (IN2_param_value == NULL)
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16942
                      IN2_param_value = function_call_param_iterator.next();
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16943
                    symbol_c *IN2_type_symbol = search_expression_type->get_type(IN2_param_value);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16944
                    last_type_symbol = last_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 ;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16945
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16946
                    if(search_expression_type->is_same_type(&search_constant_type_c::string_type_name, last_type_symbol))
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16947
                    {
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16948
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16949
                        symbol_c * return_type_symbol = &search_constant_type_c::int_type_name;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16950
                        s4o.print("__find(");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16951
                        IN1_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16952
                        s4o.print(", ");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16953
                        IN2_param_value->accept(*this);
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16954
                        s4o.print(")");
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16955
                        return NULL;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16956
                        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16957
                    }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16958
                    
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16959
                    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16960
                }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16961
                
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16962
            }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16963
            
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16964
            ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16965
        }
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16966
        
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16967
    }/*function_find*/
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16968
    break;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16969
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16970
    case function_none :
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16971
    ERROR;
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16972
}
e1f0ebd2d9ec Change generate_cc to generate_c
lbessard
parents:
diff changeset
 16973
return NULL;